38 posts tagged
linux
Later
Ctrl + ↑
IPTABLES (firewall)
iptables -t filter -nL – отобразить все цепочки правил
iptables -nL – отобразить все цепочки правил
iptables -t nat -L -отобразить все цепочки правил в NAT-таблице
iptables -t filter -F – очистить все цепочки правил в filter-таблице
iptables -F – очистить все цепочки правил в filter-таблице
iptables -t nat -F -очистить все цепочки правил в NAT-таблице
iptables -t filter -X -удалить все пользовательские цепочки правил в filter-таблице
iptables -t filter -A INPUT -p tcp --dport telnet -j ACCEPT – позволить входящее подключение telnet’ом
iptables -t filter -A OUTPUT -p tcp --dport http -j DROP -блокировать исходящие HTTP-соединения
iptables -t filter -A FORWARD -p tcp --dport pop3 -j ACCEPT – позволить “прокидывать” (forward) POP3-соединения
iptables -t filter -A INPUT -j LOG --log-prefix “DROP INPUT” – включить журналирование ядром пакетов, проходящих через цепочку INPUT, и добавлением к сообщению префикса “DROP INPUT”
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -включить NAT (Network Address Translate) исходящих пакетов на интерфейс eth0. Допустимо при использовании с динамически выделяемыми ip-адресами.
iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.2:22 – перенаправление пакетов, адресованных одному хосту, на другой хост
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT – допускать не больше 2 соединений telnet с одного хоста
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT – ограничить число одновременных запросов http до 16 на подсеть класса C (24 первых разряда)
Примечание: Чтобы отменить ошибочное правило не обязательно очищать все цепочки правил, для этого в опции iptables есть команда
-A, --append означает -добавить одно или несколько правил в конец указанной цепочки.
-D, --delete удалить
Так в нашем случае:
iptables -t filter -D OUTPUT -p tcp --dport http -j DROP – отменяет заданную нами ранее блокировку исходящих HTTP-соединений
можно также
iptables -t nat -D POSTROUTING 1
где 1 это номер правила по порядку, или удаляем все правила из таблицы POSTROUTING
iptables -t nat -F POSTROUTING
Еще примеры использования iptables:
Прописываем правила, закрывающие все порты за исключением 25 (smtp: принимаем почту) и 80 (http: показываем web страницы)
# iptables -A INPUT -i eth1 -p tcp --dport 25 -j ACCEPT
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
# iptables -A FORWARD -o eth1 -p tcp -j DROP
Теперь наш сервер прикрыт с внешнего мира. Запуск команд netcat и nmap c самого сервера покажет тоже, что и до внесения правил, но если пробовать с другого компьютера, то заметим результат: доступ везде прикрыт, кроме как на разрешённые нами 25 и 80 порты.
iptables -t nat -A POSTROUTING -s 10.0.3.41 -d 217.217.217.217 -o eth1 -p tcp --dport 25 -j SNAT --to 116.116.116.116
Разрешаем прямой доступ к внешней почте. Подробнее: разрешаем доступ хосту 10.0.3.41 из внутренней сети обращаться к хосту 217.217.217.217 на 25 порт (smtp) протокола tcp; такие обращения пропускаем через интерфейс eth1, который имеет адрес 116.116.116.116
Для доступа к РОР добавляем такое же правило для порта 110
iptables -t nat -A POSTROUTING -s 10.0.3.41 -p tcp --dport 25 -j MASQUERADE
Более короткое правило, аналогичное вышеприведённому, только здесь пользователь с ip 10.0.3.41 имеет доступ к любому почтовому серверу в Интернете.
Можно посмотреть действующие правила в виде команд:
# iptables-save
Чтобы запомнить эти правила сохраняем новую конфигурацию в этот файл:
# iptables-save > /etc/sysconfig/iptables
Теперь при запуске системы прописанные нами правила восстановятся.
Дополнение: Разрешаем маршрутизацию на на один раз до перезагрузки
sysctl -w net.ipv4.ip_forward=1
Проверить
sysctl -a |grep forwarding
увидеть net.ipv4.conf.lo.forwarding = 1 или 0 если не открыт
Для того чтобы правило вступало в силу и после перезагрузки заходим в /etc/net/sysctl.conf находим
net.ipv4.ip_forward = 0 и изменяем на 1
Проверим, осуществляется ли автоматический запуск iptables, то есть запускается при перезагрузки сервера проверяем
chkconfig --list iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
видим, что нет. Добавляем и проверяем:
chkconfig --level 35 iptables on
chkconfig --list iptables
iptables 0:off 1:off 2:off 3:on 4:off 5:on 6: off
http://www.opennet.ru/docs/RUS/iptables/
http://ru.wikipedia.org/wiki/Iptables
iptables -nL – отобразить все цепочки правил
iptables -t nat -L -отобразить все цепочки правил в NAT-таблице
iptables -t filter -F – очистить все цепочки правил в filter-таблице
iptables -F – очистить все цепочки правил в filter-таблице
iptables -t nat -F -очистить все цепочки правил в NAT-таблице
iptables -t filter -X -удалить все пользовательские цепочки правил в filter-таблице
iptables -t filter -A INPUT -p tcp --dport telnet -j ACCEPT – позволить входящее подключение telnet’ом
iptables -t filter -A OUTPUT -p tcp --dport http -j DROP -блокировать исходящие HTTP-соединения
iptables -t filter -A FORWARD -p tcp --dport pop3 -j ACCEPT – позволить “прокидывать” (forward) POP3-соединения
iptables -t filter -A INPUT -j LOG --log-prefix “DROP INPUT” – включить журналирование ядром пакетов, проходящих через цепочку INPUT, и добавлением к сообщению префикса “DROP INPUT”
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -включить NAT (Network Address Translate) исходящих пакетов на интерфейс eth0. Допустимо при использовании с динамически выделяемыми ip-адресами.
iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.2:22 – перенаправление пакетов, адресованных одному хосту, на другой хост
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT – допускать не больше 2 соединений telnet с одного хоста
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT – ограничить число одновременных запросов http до 16 на подсеть класса C (24 первых разряда)
Примечание: Чтобы отменить ошибочное правило не обязательно очищать все цепочки правил, для этого в опции iptables есть команда
-A, --append означает -добавить одно или несколько правил в конец указанной цепочки.
-D, --delete удалить
Так в нашем случае:
iptables -t filter -D OUTPUT -p tcp --dport http -j DROP – отменяет заданную нами ранее блокировку исходящих HTTP-соединений
можно также
iptables -t nat -D POSTROUTING 1
где 1 это номер правила по порядку, или удаляем все правила из таблицы POSTROUTING
iptables -t nat -F POSTROUTING
Еще примеры использования iptables:
Прописываем правила, закрывающие все порты за исключением 25 (smtp: принимаем почту) и 80 (http: показываем web страницы)
# iptables -A INPUT -i eth1 -p tcp --dport 25 -j ACCEPT
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
# iptables -A FORWARD -o eth1 -p tcp -j DROP
Теперь наш сервер прикрыт с внешнего мира. Запуск команд netcat и nmap c самого сервера покажет тоже, что и до внесения правил, но если пробовать с другого компьютера, то заметим результат: доступ везде прикрыт, кроме как на разрешённые нами 25 и 80 порты.
iptables -t nat -A POSTROUTING -s 10.0.3.41 -d 217.217.217.217 -o eth1 -p tcp --dport 25 -j SNAT --to 116.116.116.116
Разрешаем прямой доступ к внешней почте. Подробнее: разрешаем доступ хосту 10.0.3.41 из внутренней сети обращаться к хосту 217.217.217.217 на 25 порт (smtp) протокола tcp; такие обращения пропускаем через интерфейс eth1, который имеет адрес 116.116.116.116
Для доступа к РОР добавляем такое же правило для порта 110
iptables -t nat -A POSTROUTING -s 10.0.3.41 -p tcp --dport 25 -j MASQUERADE
Более короткое правило, аналогичное вышеприведённому, только здесь пользователь с ip 10.0.3.41 имеет доступ к любому почтовому серверу в Интернете.
Можно посмотреть действующие правила в виде команд:
# iptables-save
Чтобы запомнить эти правила сохраняем новую конфигурацию в этот файл:
# iptables-save > /etc/sysconfig/iptables
Теперь при запуске системы прописанные нами правила восстановятся.
Дополнение: Разрешаем маршрутизацию на на один раз до перезагрузки
sysctl -w net.ipv4.ip_forward=1
Проверить
sysctl -a |grep forwarding
увидеть net.ipv4.conf.lo.forwarding = 1 или 0 если не открыт
Для того чтобы правило вступало в силу и после перезагрузки заходим в /etc/net/sysctl.conf находим
net.ipv4.ip_forward = 0 и изменяем на 1
Проверим, осуществляется ли автоматический запуск iptables, то есть запускается при перезагрузки сервера проверяем
chkconfig --list iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
видим, что нет. Добавляем и проверяем:
chkconfig --level 35 iptables on
chkconfig --list iptables
iptables 0:off 1:off 2:off 3:on 4:off 5:on 6: off
http://www.opennet.ru/docs/RUS/iptables/
http://ru.wikipedia.org/wiki/Iptables
Маршрутизация через несколько каналов/провайдеров.
http://www.opennet.ru/docs/RUS/LARTC/x348.html#SPLITACCESS
Ниже представлена обычная конфигурация, когда локальная сеть (или даже одна машина) подключена к Internet через двух провайдеров.
________
+----------+ /
| | |
+-----------+ Провайдер 1+-----
__ | | | /
___/ \_ +----+-----+ +----------+ |
_/ \__ | if1 | /
/ \ | Linux | |
| Локальная сеть---+ маршрутизатор| | Internet
\_ __/ | | |
\__ __/ | if2 | \
\___/ +----+-----+ +----------+ |
| | | \
+-----------+ Провайдер 2+-----
| | |
+--------+ \________
В этом случае обычно возникает два вопроса.
4.2.1. Раздельный доступ
Первый вопрос заключается в том, как организовать маршрутизацию таким образом, чтобы ответы на запросы, приходящие через определенного провайдера, скажем ровайдера 1, уходили через того же провайдера.
Давайте определим некоторые переменные. Пусть $IF1 будет именем первого интерфейса (if1 на рисунке), а $IF2 -- именем второго. Тогда $IP1 будет IP адресом $IF1 , а $IP2 -- IP адресом $IF2 . Далее, $P1 это IP-адрес шлюза провайдера 1, а $P2 -- IP адрес шлюза провайдера 2. Наконец, $P1_NET это IP сеть, к которой принадлежит $P1 , а $P2_NET -- сеть, к которой принадлежит $P2 .
Создадим две дополнительные таблицы маршрутизации, скажем T1 и T2. Добавим их в файл /etc/iproute2/rt_tables. Теперь можно настроить эти таблицы следующими командами:
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
Ничего особо эффектного, маршрут к шлюзу и маршрут по-умолчанию через этот шлюз. Точно так же, как и в случае одного провайдера, но по таблице на каждого провайдера. Заметьте, что маршрута к сети, в которой находится шлюз достаточно, потому что он определяет как найти все хосты в этой сети, включая сам шлюз.
Теперь нужно настроить главную таблицу маршрутизации. Хорошо бы маршрутизировать пакеты для сетей провайдеров через соответствующие интерфейсы. Обратите внимание на аргумент `src’, который обеспечивает правильный выбор исходного IP-адреса.
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
Теперь задаем маршрут по умолчанию:
ip route add default via $P1
Зададим правила маршрутизации. Они будут отвечать за то, какая таблица будет использоваться при маршрутизации. Вы хотите, чтобы пакет с определенным адресом источника маршрутизировался через соответствующий интерфейс:
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
Этот набор команд обеспечивает маршрутизацию ответов через интерфейс, на котором был получен запрос.
Внимание!
Заметка читателя Рода Роака (Rod Roark): ’ если $P0_NET это локальная сеть, а $IF0 -- соответствующий ей интерфейс, желательно задать следующие команды:
ip route add $P0_NET dev $IF0 table T1
ip route add $P2_NET dev $IF2 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add $P0_NET dev $IF0 table T2
ip route add $P1_NET dev $IF1 table T2
ip route add 127.0.0.0/8 dev lo table T2
Итак, мы рассмотрели очень простой пример. Он будет работать для всех процессов, выполняющихся на маршрутизаторе и для локальной сети, если настроено преобразование адресов (NAT/masquerading). В противном случае, вам будет необходим диапазон IP адресов обоих провайдеров, или выполнять маскирование для одного из провайдеров. В любом случае, вы можете задать правила выбора провайдера для каждого конкретного адреса вашей локальной сети.
4.2.2. Распределение нагрузки.
Второй вопрос заключается в балансировке нагрузки между двумя провайдерами. Это не сложно, если у вас уже настроен раздельный доступ, описанный в предыдущем разделе.
Вместо выбора одного из провайдеров в качестве маршрута по-умолчанию, вы настраиваете т.н. многолучевой (multipath) маршрут. В стандартном ядре это обеспечит балансировку нагрузки между двумя провайдерами. Делается это следующим образом (повторюсь, мы основываемся на примере из раздела Раздельный доступ):
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
nexthop via $P2 dev $IF2 weight 1
Результатом команды будет попеременный выбор маршрута по-умолчанию. Вы можете изменить параметр weight, так чтобы один из провайдеров получал большую нагрузку.
Обратите внимание, что балансировка не будет идеальной, так как она основывается на маршрутах, а маршруты кэшируются. Это означает, что маршруты к часто посещаемым сайтам не будут проходить через разных провайдеров.
Если вы действительно интересуетесь этим, вам стоит посмотреть на патчи Юлиана Анастасова (Julian Anastasov), расположеные по адресу http://www.ssi.bg/~ja/#routes. Они могут вам помочь.
Ниже представлена обычная конфигурация, когда локальная сеть (или даже одна машина) подключена к Internet через двух провайдеров.
________
+
| | |
+-----------
__ | | | /
___/ \_ +----
_/ \__ | if1 | /
/ \ | Linux | |
| Локальная сеть
\_ __/ | | |
\__ __/ | if2 | \
\___/ +----
| | | \
+
| | |
+
В этом случае обычно возникает два вопроса.
4.2.1. Раздельный доступ
Первый вопрос заключается в том, как организовать маршрутизацию таким образом, чтобы ответы на запросы, приходящие через определенного провайдера, скажем ровайдера 1, уходили через того же провайдера.
Давайте определим некоторые переменные. Пусть $IF1 будет именем первого интерфейса (if1 на рисунке), а $IF2 -- именем второго. Тогда $IP1 будет IP адресом $IF1 , а $IP2 -- IP адресом $IF2 . Далее, $P1 это IP-адрес шлюза провайдера 1, а $P2 -- IP адрес шлюза провайдера 2. Наконец, $P1_NET это IP сеть, к которой принадлежит $P1 , а $P2_NET -- сеть, к которой принадлежит $P2 .
Создадим две дополнительные таблицы маршрутизации, скажем T1 и T2. Добавим их в файл /etc/iproute2/rt_tables. Теперь можно настроить эти таблицы следующими командами:
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
Ничего особо эффектного, маршрут к шлюзу и маршрут по-умолчанию через этот шлюз. Точно так же, как и в случае одного провайдера, но по таблице на каждого провайдера. Заметьте, что маршрута к сети, в которой находится шлюз достаточно, потому что он определяет как найти все хосты в этой сети, включая сам шлюз.
Теперь нужно настроить главную таблицу маршрутизации. Хорошо бы маршрутизировать пакеты для сетей провайдеров через соответствующие интерфейсы. Обратите внимание на аргумент `src’, который обеспечивает правильный выбор исходного IP-адреса.
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
Теперь задаем маршрут по умолчанию:
ip route add default via $P1
Зададим правила маршрутизации. Они будут отвечать за то, какая таблица будет использоваться при маршрутизации. Вы хотите, чтобы пакет с определенным адресом источника маршрутизировался через соответствующий интерфейс:
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
Этот набор команд обеспечивает маршрутизацию ответов через интерфейс, на котором был получен запрос.
Внимание!
Заметка читателя Рода Роака (Rod Roark): ’ если $P0_NET это локальная сеть, а $IF0 -- соответствующий ей интерфейс, желательно задать следующие команды:
ip route add $P0_NET dev $IF0 table T1
ip route add $P2_NET dev $IF2 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add $P0_NET dev $IF0 table T2
ip route add $P1_NET dev $IF1 table T2
ip route add 127.0.0.0/8 dev lo table T2
Итак, мы рассмотрели очень простой пример. Он будет работать для всех процессов, выполняющихся на маршрутизаторе и для локальной сети, если настроено преобразование адресов (NAT/masquerading). В противном случае, вам будет необходим диапазон IP адресов обоих провайдеров, или выполнять маскирование для одного из провайдеров. В любом случае, вы можете задать правила выбора провайдера для каждого конкретного адреса вашей локальной сети.
4.2.2. Распределение нагрузки.
Второй вопрос заключается в балансировке нагрузки между двумя провайдерами. Это не сложно, если у вас уже настроен раздельный доступ, описанный в предыдущем разделе.
Вместо выбора одного из провайдеров в качестве маршрута по-умолчанию, вы настраиваете т.н. многолучевой (multipath) маршрут. В стандартном ядре это обеспечит балансировку нагрузки между двумя провайдерами. Делается это следующим образом (повторюсь, мы основываемся на примере из раздела Раздельный доступ):
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
nexthop via $P2 dev $IF2 weight 1
Результатом команды будет попеременный выбор маршрута по-умолчанию. Вы можете изменить параметр weight, так чтобы один из провайдеров получал большую нагрузку.
Обратите внимание, что балансировка не будет идеальной, так как она основывается на маршрутах, а маршруты кэшируются. Это означает, что маршруты к часто посещаемым сайтам не будут проходить через разных провайдеров.
Если вы действительно интересуетесь этим, вам стоит посмотреть на патчи Юлиана Анастасова (Julian Anastasov), расположеные по адресу http://www.ssi.bg/~ja/#routes. Они могут вам помочь.
Настройка маршрутизации в Ubuntu Linux, для начинающих
Оригинал: http://forum.ubuntu.ru/index.php?topic=12454.
Правила маршрутизации определяют, куда отправлять IP-пакеты. Данные
маршрутизации хранятся в одной из таблиц ядра. Вести таблицы
маршрутизации можно статически или динамически. Статический маршрут --
это маршрут, который задается явно с помощью команды route.
Динамическая маршрутизация выполняется процессом-демоном (routed или
gated), который ведет и модифицирует таблицу маршрутизации на основе
сообщений от других компьютеров сети. Для выполнения динамической
маршрутизации разработаны специальные протоколы: RIP, OSPF, IGRP, EGP,
BGP и т. д.
Динамическая маршрутизация необходима в том случае, если у вас
сложная, постоянно меняющаяся структура сети и одна и та же машина
может быть доступна по различным интерфейсам (например, через разные
Ethernet или SLIP интерфейсы). Маршруты, заданные статически, обычно
не меняются, даже если используется динамическая маршрутизация.
Для персонального компьютера, подключаемого к локальной сети, в
большинстве ситуаций бывает достаточно статической маршрутизации
командой route. Прежде чем пытаться настраивать маршруты, просмотрите
таблицу маршрутизации ядра с помощью команды netstat -n -r. Вы должны
увидеть что-то вроде следующего
rigon@ubuntu-comp:~$ netstat -n -r
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth1
Если таблица пуста, то вы увидите только заголовки столбцов. Тогда
надо использовать route. С помощью команды route можно добавить или
удалить один (за один раз) статический маршрут. Вот ее формат:
route -f операция -тип адресат шлюз интерфейс
Здесь аргумент операция может принимать одно из двух значений: add
(маршрут добавляется) или delete (маршрут удаляется). Аргумент адресат
может быть IP-адресом машины, IP-адресом сети или ключевым словом
default . Аргумент шлюз -- это IP-адрес компьютера, на который
следует пересылать пакет (этот компьютер должен иметь прямую связь с
вашим компьютером). Команда
route -f
удаляет из таблицы данные обо всех шлюзах. Необязательный аргумент тип
принимает значения net или host . В первом случае в поле адресата
указывается адрес сети, а во втором -- адрес конкретного компьютера
(хоста).
Как правило, бывает необходимо настроить маршрутизацию по
упоминавшимся выше трем интерфейсам:
* локальный интерфейс (lo),
* интерфейс для платы Ethetnet (eth0),
* интерфейс для последовательного порта (PPP или SLIP).
Локальный интерфейс поддерживает сеть с IP-номером 127.0.0.1. Поэтому
для маршрутизации пакетов с адресом 127.... используется команда:
route add -net 127.0.0.1 lo
Если у вас для связи с локальной сетью используется одна плата
Ethernet, и все машины находятся в этой сети (сетевая маска
255.255.255.0), то для настройки маршрутизации достаточно вызвать:
route add -net 192.168.36.0 netmask 255.255.255.0 eth0
Если же вы имеете насколько интерфейсов, то вам надо определиться с
сетевой маской и вызвать команду route для каждого интерфейса.
Поскольку очень часто IP-пакеты с вашего компьютера могут отправляться
не в одну единственную сеть, а в разные сети (например, при просмотре
разных сайтов в Интернете), то в принципе надо было бы задать очень
много маршрутов. Очевидно, что сделать это было бы очень сложно,
точнее просто невозможно. Поэтому решение проблемы маршрутизации
пакетов перекладывают на плечи специальных компьютеров --
маршрутизаторов, а на обычных компьютерах задают маршрут по умолчанию,
который используется для отправки всех пакетов, не указанных явно в
таблице маршрутизации. С помощью маршрута по умолчанию вы говорите
ядру “а все остальное отправляй туда”. Маршрут по умолчанию
настраивается следующей командой:
route add default gw 192.168.1.1 eth0
Опция gw указывает программе route, что следующий аргумент – это
IP-адрес или имя маршрутизатора, на который надо отправлять все
пакеты, соответствующие этой строке таблицы маршрутизации.
Вот немного теории с сайта linuxcenter.ru
А теперь пример из жизни
Имеются следующие интерфейсы /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255
auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255
Интерфейс eth0 это связь с локальной сетью состоящей из 20 подсетей
192.168.1.х-192.168.20.х
Интерфейс eth1 это связь с ADSL модемом с выходом в интернет. Так
большинство запросов идут в Инет на этом интерфейсе прописываем шлюз
(gateway 192.168.254.1) данный параметр указывает в системе шлюз
по-умолчанию, обращаю внимание, что шлюз надо прописывать только на
одном интерфейсе, иначе в системе появятся 2 маршрута по умолчанию и
естно будет затупление в работе. С интернетом разобрались.
Но требуется еще просматривать ресурсы локальной сети
для этого надо выполнить вот эти команды
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
На этом примере маршрутизируются 3 подсети
Все эти команды и многие другие можно прописать в файлк
/etc/network/interfaces в итоге получится следующее:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255
Ну вот и все по аналогии настраиваются любое кол-во маршрутов и
сетевых интерфейсов
Дополнение 1.
Обратите внимание
hwaddress ether 00:E0:4C:A2:C4:48
так легко можно изменить MAC, не забываем после редактирования файла
делать рестарт
sudo /etc/init.d/networking restart
Дополнение 2.
Следует отметить, что:
1) Для того, чтобы просмотреть таблицу маршрутов достаточно запуска
команды route без параметров или route -n, если в сети нет DNS.
2) Маска может быть записана проще, в виде /x, где x – число единичных
битов, например:
route add -net 192.168.36.0/24 eth0
вместо
route add -net 192.168.36.0 netmask 255.255.255.0 eth0
Настройки сети размещаются в файле /etc/network/interfaces
При подключение к Inet через VPN (ppp0...), необходимо заменять
маршрут по умолчанию на ppp0.
А проще указать в файле /etc/ppp/options следующее:
defaultroute
replacedefaultroute
тогда маршрут заменяется сам и при отключении восстанавливается.
Дополнение 3.
Есть прога, серверная часть которой стоит во внутренней сети, например
Radmin Server, чтобы к нему подключиться клиентская прога (Radmin
Viewer) запрашивает соединение по порту 4799 (например). Все работает
внутри локальной сети. Есть шлюз (с внешним IP), через который
обеспечивает доступ в и-нет всех компов внутренней сети. Теперь
вопрос, как настроить шлюз, чтобы при обращении из вне клиентсокой
частью к IP шлюза по порту 4799, он пробрасывал этот запрос дальше,
например на 192.168.0.2 по томуже порту?
Для этого есть команда iptables:
iptables -t nat -D PREROUTING -i <интерфейс> -s <IP откуда будет коннект>
-p tcp --dport 4899 -j DNAT --to-destination 192.168.0.2:4899
Если ограничивать входящие IP не требуется, то опцию -s можно
опустить.
Пример:
iptables -t nat -D PREROUTING -i vlan1 -s 213.87.34.20/24 -p tcp
--dport 4899 -j DNAT --to-destination 192.168.128.24:4899
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 3658 -j DNAT
--to-destination 192.168.0.2:3658
Правила маршрутизации определяют, куда отправлять IP-пакеты. Данные
маршрутизации хранятся в одной из таблиц ядра. Вести таблицы
маршрутизации можно статически или динамически. Статический маршрут --
это маршрут, который задается явно с помощью команды route.
Динамическая маршрутизация выполняется процессом-демоном (routed или
gated), который ведет и модифицирует таблицу маршрутизации на основе
сообщений от других компьютеров сети. Для выполнения динамической
маршрутизации разработаны специальные протоколы: RIP, OSPF, IGRP, EGP,
BGP и т. д.
Динамическая маршрутизация необходима в том случае, если у вас
сложная, постоянно меняющаяся структура сети и одна и та же машина
может быть доступна по различным интерфейсам (например, через разные
Ethernet или SLIP интерфейсы). Маршруты, заданные статически, обычно
не меняются, даже если используется динамическая маршрутизация.
Для персонального компьютера, подключаемого к локальной сети, в
большинстве ситуаций бывает достаточно статической маршрутизации
командой route. Прежде чем пытаться настраивать маршруты, просмотрите
таблицу маршрутизации ядра с помощью команды netstat -n -r. Вы должны
увидеть что-то вроде следующего
rigon@ubuntu-comp:~$ netstat -n -r
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth1
Если таблица пуста, то вы увидите только заголовки столбцов. Тогда
надо использовать route. С помощью команды route можно добавить или
удалить один (за один раз) статический маршрут. Вот ее формат:
route -f операция -тип адресат шлюз интерфейс
Здесь аргумент операция может принимать одно из двух значений: add
(маршрут добавляется) или delete (маршрут удаляется). Аргумент адресат
может быть IP-адресом машины, IP-адресом сети или ключевым словом
default . Аргумент шлюз -- это IP-адрес компьютера, на который
следует пересылать пакет (этот компьютер должен иметь прямую связь с
вашим компьютером). Команда
route -f
удаляет из таблицы данные обо всех шлюзах. Необязательный аргумент тип
принимает значения net или host . В первом случае в поле адресата
указывается адрес сети, а во втором -- адрес конкретного компьютера
(хоста).
Как правило, бывает необходимо настроить маршрутизацию по
упоминавшимся выше трем интерфейсам:
* локальный интерфейс (lo),
* интерфейс для платы Ethetnet (eth0),
* интерфейс для последовательного порта (PPP или SLIP).
Локальный интерфейс поддерживает сеть с IP-номером 127.0.0.1. Поэтому
для маршрутизации пакетов с адресом 127.... используется команда:
route add -net 127.0.0.1 lo
Если у вас для связи с локальной сетью используется одна плата
Ethernet, и все машины находятся в этой сети (сетевая маска
255.255.255.0), то для настройки маршрутизации достаточно вызвать:
route add -net 192.168.36.0 netmask 255.255.255.0 eth0
Если же вы имеете насколько интерфейсов, то вам надо определиться с
сетевой маской и вызвать команду route для каждого интерфейса.
Поскольку очень часто IP-пакеты с вашего компьютера могут отправляться
не в одну единственную сеть, а в разные сети (например, при просмотре
разных сайтов в Интернете), то в принципе надо было бы задать очень
много маршрутов. Очевидно, что сделать это было бы очень сложно,
точнее просто невозможно. Поэтому решение проблемы маршрутизации
пакетов перекладывают на плечи специальных компьютеров --
маршрутизаторов, а на обычных компьютерах задают маршрут по умолчанию,
который используется для отправки всех пакетов, не указанных явно в
таблице маршрутизации. С помощью маршрута по умолчанию вы говорите
ядру “а все остальное отправляй туда”. Маршрут по умолчанию
настраивается следующей командой:
route add default gw 192.168.1.1 eth0
Опция gw указывает программе route, что следующий аргумент – это
IP-адрес или имя маршрутизатора, на который надо отправлять все
пакеты, соответствующие этой строке таблицы маршрутизации.
Вот немного теории с сайта linuxcenter.ru
А теперь пример из жизни
Имеются следующие интерфейсы /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255
auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255
Интерфейс eth0 это связь с локальной сетью состоящей из 20 подсетей
192.168.1.х-192.168.20.х
Интерфейс eth1 это связь с ADSL модемом с выходом в интернет. Так
большинство запросов идут в Инет на этом интерфейсе прописываем шлюз
(gateway 192.168.254.1) данный параметр указывает в системе шлюз
по-умолчанию, обращаю внимание, что шлюз надо прописывать только на
одном интерфейсе, иначе в системе появятся 2 маршрута по умолчанию и
естно будет затупление в работе. С интернетом разобрались.
Но требуется еще просматривать ресурсы локальной сети
для этого надо выполнить вот эти команды
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
На этом примере маршрутизируются 3 подсети
Все эти команды и многие другие можно прописать в файлк
/etc/network/interfaces в итоге получится следующее:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255
Ну вот и все по аналогии настраиваются любое кол-во маршрутов и
сетевых интерфейсов
Дополнение 1.
Обратите внимание
hwaddress ether 00:E0:4C:A2:C4:48
так легко можно изменить MAC, не забываем после редактирования файла
делать рестарт
sudo /etc/init.d/networking restart
Дополнение 2.
Следует отметить, что:
1) Для того, чтобы просмотреть таблицу маршрутов достаточно запуска
команды route без параметров или route -n, если в сети нет DNS.
2) Маска может быть записана проще, в виде /x, где x – число единичных
битов, например:
route add -net 192.168.36.0/24 eth0
вместо
route add -net 192.168.36.0 netmask 255.255.255.0 eth0
Настройки сети размещаются в файле /etc/network/interfaces
При подключение к Inet через VPN (ppp0...), необходимо заменять
маршрут по умолчанию на ppp0.
А проще указать в файле /etc/ppp/options следующее:
defaultroute
replacedefaultroute
тогда маршрут заменяется сам и при отключении восстанавливается.
Дополнение 3.
Есть прога, серверная часть которой стоит во внутренней сети, например
Radmin Server, чтобы к нему подключиться клиентская прога (Radmin
Viewer) запрашивает соединение по порту 4799 (например). Все работает
внутри локальной сети. Есть шлюз (с внешним IP), через который
обеспечивает доступ в и-нет всех компов внутренней сети. Теперь
вопрос, как настроить шлюз, чтобы при обращении из вне клиентсокой
частью к IP шлюза по порту 4799, он пробрасывал этот запрос дальше,
например на 192.168.0.2 по томуже порту?
Для этого есть команда iptables:
iptables -t nat -D PREROUTING -i <интерфейс> -s <IP откуда будет коннект>
-p tcp --dport 4899 -j DNAT --to-destination 192.168.0.2:4899
Если ограничивать входящие IP не требуется, то опцию -s можно
опустить.
Пример:
iptables -t nat -D PREROUTING -i vlan1 -s 213.87.34.20/24 -p tcp
--dport 4899 -j DNAT --to-destination 192.168.128.24:4899
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 3658 -j DNAT
--to-destination 192.168.0.2:3658
Утилита Screen
Введение
Данная утилита GNU Screen имеет множество функций. Очень удобно использовать эту утилиту при удаленном подключении к системе по ssh. Но наиболее частое ее применение – сворачивание в фон программ, которые сами этого не умеют, с возможностью последюущего возврата к ним. это может быть полезно при работе с программами, которые реализованы не в виде «демон+клиент», а единым целым, и не работают без запуска интерфейса. Типичный пример – rtorrent, который при всех своих преимуществах запускается только в виде консольного интерфейса, а в фон уходить не умеет, можно только «выйти вообще». Его и возьмем в качестве примера.
Запуск и основы работы Screen
Screen создает отдельные объекты, называемые иногда «скринами». Каждый скрин – это что-то вроде окна, которое можно свернуть-развернуть, если проводить аналогию с графическим интрефейсом. Только вместо окна вы получаете виртуальную консоль, которую можно отправить в фон или вывести на передний план, и в которой запускается указанное приложение.
Простейший запуск осуществляется командой:
screen
При запуске в таком виде, т.е. без параметров, программа создаст новый скрин, в котором откроет сессию командной оболочки, как если бы вы залогинились в tty-консоли или открыли новую вкладку в графическом терминале, для наглядности выполните что-нибудь в командной строке – например, ls.
Теперь о том, как свернуть запущенный скрин вместе со всем, что в нем работает. Для этого нужно нажать Ctrl+A, после чего нажать D. в принципе, это единственная комбинация, которую простому пользователю стоит запомнить. Сtrl+A переведет screen в командный режим. клавиша D даст команду свернуть текущий скрин. Теперь вы можете закрыть терминал или разлогиниться с tty-консоли – запущенный в свернутом скрине процесс продолжит работу в фоне.
Для того, чтобы вернуться к свернутому скрину, достаточно запустить:
screen -r
Ключ -r как раз и укажет программе, что нужно развернуть свернутый скрин (если таковой, конечно, имеется). Перед вами должна предстать та самая сессия в консоли, которую вы свернули, со всем, что в ней было.
Теперь выйдете из сессии с помощью команды exit. Screen сообщит о завершении своей работы. Таким образом, вам достаточно выйти из запущенного в скрине процесса, а screen выключится сама.
Далее запустим вышеупомянутый rtorrent. Делается это предельно просто – нужно указать screen команду для запуска. Тогда вместо командной оболочки откроется указанная программа:
screen rtorrent
Перед вами открылся rtorrent, его можно свернуть, а потом вернуться к нему, как описано выше. Rtorrent будет качать/раздавать в фоне, избавляя вас от необходимости держать ради него открытую вкладку терминала или tty-консоль (что еще и небезопасно).
Работа с несколькими скринами
Eсли вам нужно запустить лишь одну программу – вышеописанного более чем достаточно, но в случае если таких программ несколько – скринам нужно будет раздать имена, чтобы screen знала, к какому именно свернутому скрину вы хотите вернуться. Имя создаваемого скрина задается с помощью ключа -S:
screen -S rtor rtorrent
Cверните скрин с rtorrent’ом и запустите еще что-нибудь, к примеру nano:
screen -S nano nano
Этот скрин также сверните. Теперь можно вернуться к любому из двух скринов аналогично вышеописанному, только с указанием имени скрина, который вы хотите развернуть, например:
screen -r nano
Список запущенных скринов можно посмотреть с помощью:
screen -list
или
screen -ls
Возможно так-же вернуться к уже развернутому в ином терминале скрину:
screen -x nano
Запуск скрина в свернутом виде
Программу можно запустить сразу в свернутом скрине. Это полезно в случае с автозапуском, или когда вы знаете, что программа сама все сделает (установит соединение и продолжит закачку/раздачу в нашем примере с rtorrent), и смотреть там не на что. Делается все опять же просто. Команда на запуск будет такой:
screen -dmS rtor rtorrent
Ключ -d укажет, что скрин нужно свернуть, а ключ -m – что его нужно для начала создать. Процесс «усложняется» по той причине, что ключ -d по умолчанию используется для сворачивания ранее запущенного скрина, развернутого на другой консоли или в соседней вкладке, с той целью, чтобы развернуть его в текущем месте (ибо если одна и та же программа управляется из двух мест – это может и к конфузу привести). Таким образом нужная программа запустится сразу в фоне, а screen лишь выведет сообщение о том, что программа запущена, и скрин свернут.
Прочие возможности
Данная статья описывает лишь основы. На самом деле утилита screen обладает массой возможностей, например: можно разбить экран пополам, отобразив несколько скринов с разными программами; можно задать множество разных параметров, настроить под разные типа терминалов. Во всем этом поможет разобраться screen –help или man screen. Также есть еще одна полезная комбинация клавиш. Как сказано в мануале, «если вам лень читать кучу текста – запомните эту комбинацию» – Ctrl+A и затем ? 1). Вам будет выведен список доступных сочетаний клавиш и команд, которые они выполняют. Все это нажимается также после Ctrl+A.
Данная утилита GNU Screen имеет множество функций. Очень удобно использовать эту утилиту при удаленном подключении к системе по ssh. Но наиболее частое ее применение – сворачивание в фон программ, которые сами этого не умеют, с возможностью последюущего возврата к ним. это может быть полезно при работе с программами, которые реализованы не в виде «демон+клиент», а единым целым, и не работают без запуска интерфейса. Типичный пример – rtorrent, который при всех своих преимуществах запускается только в виде консольного интерфейса, а в фон уходить не умеет, можно только «выйти вообще». Его и возьмем в качестве примера.
Запуск и основы работы Screen
Screen создает отдельные объекты, называемые иногда «скринами». Каждый скрин – это что-то вроде окна, которое можно свернуть-развернуть, если проводить аналогию с графическим интрефейсом. Только вместо окна вы получаете виртуальную консоль, которую можно отправить в фон или вывести на передний план, и в которой запускается указанное приложение.
Простейший запуск осуществляется командой:
screen
При запуске в таком виде, т.е. без параметров, программа создаст новый скрин, в котором откроет сессию командной оболочки, как если бы вы залогинились в tty-консоли или открыли новую вкладку в графическом терминале, для наглядности выполните что-нибудь в командной строке – например, ls.
Теперь о том, как свернуть запущенный скрин вместе со всем, что в нем работает. Для этого нужно нажать Ctrl+A, после чего нажать D. в принципе, это единственная комбинация, которую простому пользователю стоит запомнить. Сtrl+A переведет screen в командный режим. клавиша D даст команду свернуть текущий скрин. Теперь вы можете закрыть терминал или разлогиниться с tty-консоли – запущенный в свернутом скрине процесс продолжит работу в фоне.
Для того, чтобы вернуться к свернутому скрину, достаточно запустить:
screen -r
Ключ -r как раз и укажет программе, что нужно развернуть свернутый скрин (если таковой, конечно, имеется). Перед вами должна предстать та самая сессия в консоли, которую вы свернули, со всем, что в ней было.
Теперь выйдете из сессии с помощью команды exit. Screen сообщит о завершении своей работы. Таким образом, вам достаточно выйти из запущенного в скрине процесса, а screen выключится сама.
Далее запустим вышеупомянутый rtorrent. Делается это предельно просто – нужно указать screen команду для запуска. Тогда вместо командной оболочки откроется указанная программа:
screen rtorrent
Перед вами открылся rtorrent, его можно свернуть, а потом вернуться к нему, как описано выше. Rtorrent будет качать/раздавать в фоне, избавляя вас от необходимости держать ради него открытую вкладку терминала или tty-консоль (что еще и небезопасно).
Работа с несколькими скринами
Eсли вам нужно запустить лишь одну программу – вышеописанного более чем достаточно, но в случае если таких программ несколько – скринам нужно будет раздать имена, чтобы screen знала, к какому именно свернутому скрину вы хотите вернуться. Имя создаваемого скрина задается с помощью ключа -S:
screen -S rtor rtorrent
Cверните скрин с rtorrent’ом и запустите еще что-нибудь, к примеру nano:
screen -S nano nano
Этот скрин также сверните. Теперь можно вернуться к любому из двух скринов аналогично вышеописанному, только с указанием имени скрина, который вы хотите развернуть, например:
screen -r nano
Список запущенных скринов можно посмотреть с помощью:
screen -list
или
screen -ls
Возможно так-же вернуться к уже развернутому в ином терминале скрину:
screen -x nano
Запуск скрина в свернутом виде
Программу можно запустить сразу в свернутом скрине. Это полезно в случае с автозапуском, или когда вы знаете, что программа сама все сделает (установит соединение и продолжит закачку/раздачу в нашем примере с rtorrent), и смотреть там не на что. Делается все опять же просто. Команда на запуск будет такой:
screen -dmS rtor rtorrent
Ключ -d укажет, что скрин нужно свернуть, а ключ -m – что его нужно для начала создать. Процесс «усложняется» по той причине, что ключ -d по умолчанию используется для сворачивания ранее запущенного скрина, развернутого на другой консоли или в соседней вкладке, с той целью, чтобы развернуть его в текущем месте (ибо если одна и та же программа управляется из двух мест – это может и к конфузу привести). Таким образом нужная программа запустится сразу в фоне, а screen лишь выведет сообщение о том, что программа запущена, и скрин свернут.
Прочие возможности
Данная статья описывает лишь основы. На самом деле утилита screen обладает массой возможностей, например: можно разбить экран пополам, отобразив несколько скринов с разными программами; можно задать множество разных параметров, настроить под разные типа терминалов. Во всем этом поможет разобраться screen –help или man screen. Также есть еще одна полезная комбинация клавиш. Как сказано в мануале, «если вам лень читать кучу текста – запомните эту комбинацию» – Ctrl+A и затем ? 1). Вам будет выведен список доступных сочетаний клавиш и команд, которые они выполняют. Все это нажимается также после Ctrl+A.
FTP сервер в Ubuntu
Моя задача была поднять FTP-сервер + открыть к нему доступ из интернета. Для выполнения этой задачи был выбран сервер proftpd. О его установке и настройке я хочу поведать Вам сегодня. В статье написано пошагово как это сделать:
Устанавливаем пакет proftpd:
sudo aptitude install proftpd
Отвечаем на появившийся вопрос о способе запуска: «самостоятельно». Открываем файл /etc/shells:
sudo gedit /etc/shells
Добавляем в него строку:
/bin/false
Создаем в /HOME каталоге папку FTP-shared(Не обязательно в корне /HOME и не обязательно такое имя папки, это просто пример):
sudo mkdir /home/FTP-shared
Теперь создаем пользователя с именем userftp(ну или что поинтересней):
sudo useradd userftp -p pass -d /home/FTP-shared -s /bin/false
Вместо «pass» – ввести свое слово или фразу в качестве пароля(не вводите только цифры, работать не будет). В папке FTP-shared создаем две вложенные папки(называем как хотим):
sudo mkdir /home/FTP-shared/public
sudo mkdir /home/FTP-shared/upload
Присвоим права созданным папкам:
sudo chmod 755 /home/FTP-shared
sudo chmod 755 /home/FTP-shared/public
sudo chmod 777 /home/FTP-shared/upload
FTP-shared и public – только чтение. upload – запись. Переименовываем имеющийся конфигурационный файл proftpd.conf и создаем новый:
sudo mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.old
sudo gedit /etc/proftpd/proftpd.conf
Добавляем в него: proftpd Если Вы создавали структуру папок, имя пользоватля и т.д не как в статье, то редактируйте данный файл под себя. После произведенных действий фтп-сервер будет иметь следующие параметры доступа:
user (пользователь): test
password (пароль): pass (тот, что присвоен для userftp)
Можно создать несколько пользователей, но все они должны быть прописаны в файле proftpd.conf. Если нужно сделать анонимный доступ, следует закомментировать обе секции для test и раскомментировать секцию для Anonymous. Сервер запущен, но с параметрами по умолчанию, перезагружаем его:
sudo /etc/init.d/proftpd restart
Что бы узнать, кто подключен к фтп-серверу в данный момент используется команда ftptop (клавиша t меняет отображение, q – выход). Полезные советы: Если нужно подключить какую-либо папку к фтп-серверу (например, проверить работу только что созданного фтп-сервера) без редактирования конфига пригодится команда:
sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/public
или с доступом на запись:
sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/upload
Таким образом можно в срочном порядке временно подключить папку или диск и потом отмонтировать командой:
sudo umount /home/FTP-shared/public
sudo umount /home/FTP-shared/upload
Для постоянного доступа к нужным папкам подключаем их посредством fstab. Бэкап файла fstab:
sudo cp /etc/fstab /etc/fstab.old
Открываем файл /etc/fstab:
sudo gedit /etc/fstab
и добавляем нужные пути:
/здесь/путь/папки/что/я/хочу/расшарить /home/FTP-shared/public none bind 0 0
Теперь даже при рестарте компьютера информация будет доступна, если сервер за роутером то только в локальной сети. Что бы увидеть фтп-сервер из интернета нужно дать ему внешний ip-адрес. Для этого следует открыть нужный порт (в данном случае 21) для локального адреса (вида 192.168.xxx.xxx) на котором висит сервер, для доступа извне. Следующим шагом нужно дать внешнему динамическому IP-адресу постоянный адрес. Сделать это можно при помощи сервиса DynDNS.com(регистрируемся), создав при помощи его удобный и запоминающийся адрес (вида moi-server.homeip.net). Устанавливаем ddclient:
sudo apt-get install ddclient
Вводим регистрационные данные с DynDNS.com на вопросы пакета. Изменяем ServerName «server» в файле proftpd.conf на ServerName «moi-server.homeip.net». Перезагружаем фтп-сервер:
sudo /etc/init.d/proftpd restart
Пользуемся Автор статьи – Монахов Сергей Спасибо за предоставленную статью
Устанавливаем пакет proftpd:
sudo aptitude install proftpd
Отвечаем на появившийся вопрос о способе запуска: «самостоятельно». Открываем файл /etc/shells:
sudo gedit /etc/shells
Добавляем в него строку:
/bin/false
Создаем в /HOME каталоге папку FTP-shared(Не обязательно в корне /HOME и не обязательно такое имя папки, это просто пример):
sudo mkdir /home/FTP-shared
Теперь создаем пользователя с именем userftp(ну или что поинтересней):
sudo useradd userftp -p pass -d /home/FTP-shared -s /bin/false
Вместо «pass» – ввести свое слово или фразу в качестве пароля(не вводите только цифры, работать не будет). В папке FTP-shared создаем две вложенные папки(называем как хотим):
sudo mkdir /home/FTP-shared/public
sudo mkdir /home/FTP-shared/upload
Присвоим права созданным папкам:
sudo chmod 755 /home/FTP-shared
sudo chmod 755 /home/FTP-shared/public
sudo chmod 777 /home/FTP-shared/upload
FTP-shared и public – только чтение. upload – запись. Переименовываем имеющийся конфигурационный файл proftpd.conf и создаем новый:
sudo mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.old
sudo gedit /etc/proftpd/proftpd.conf
Добавляем в него: proftpd Если Вы создавали структуру папок, имя пользоватля и т.д не как в статье, то редактируйте данный файл под себя. После произведенных действий фтп-сервер будет иметь следующие параметры доступа:
user (пользователь): test
password (пароль): pass (тот, что присвоен для userftp)
Можно создать несколько пользователей, но все они должны быть прописаны в файле proftpd.conf. Если нужно сделать анонимный доступ, следует закомментировать обе секции для test и раскомментировать секцию для Anonymous. Сервер запущен, но с параметрами по умолчанию, перезагружаем его:
sudo /etc/init.d/proftpd restart
Что бы узнать, кто подключен к фтп-серверу в данный момент используется команда ftptop (клавиша t меняет отображение, q – выход). Полезные советы: Если нужно подключить какую-либо папку к фтп-серверу (например, проверить работу только что созданного фтп-сервера) без редактирования конфига пригодится команда:
sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/public
или с доступом на запись:
sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/upload
Таким образом можно в срочном порядке временно подключить папку или диск и потом отмонтировать командой:
sudo umount /home/FTP-shared/public
sudo umount /home/FTP-shared/upload
Для постоянного доступа к нужным папкам подключаем их посредством fstab. Бэкап файла fstab:
sudo cp /etc/fstab /etc/fstab.old
Открываем файл /etc/fstab:
sudo gedit /etc/fstab
и добавляем нужные пути:
/здесь/путь/папки/что/я/хочу/расшарить /home/FTP-shared/public none bind 0 0
Теперь даже при рестарте компьютера информация будет доступна, если сервер за роутером то только в локальной сети. Что бы увидеть фтп-сервер из интернета нужно дать ему внешний ip-адрес. Для этого следует открыть нужный порт (в данном случае 21) для локального адреса (вида 192.168.xxx.xxx) на котором висит сервер, для доступа извне. Следующим шагом нужно дать внешнему динамическому IP-адресу постоянный адрес. Сделать это можно при помощи сервиса DynDNS.com(регистрируемся), создав при помощи его удобный и запоминающийся адрес (вида moi-server.homeip.net). Устанавливаем ddclient:
sudo apt-get install ddclient
Вводим регистрационные данные с DynDNS.com на вопросы пакета. Изменяем ServerName «server» в файле proftpd.conf на ServerName «moi-server.homeip.net». Перезагружаем фтп-сервер:
sudo /etc/init.d/proftpd restart
Пользуемся Автор статьи – Монахов Сергей Спасибо за предоставленную статью
Перенаправление портов в виртуальную машину
Если вы желаете перенаправить определенные порты с хостовой в виртуальную машину, например, если вы хотите иметь почтовый сервер на ваиртуальной машине с адресом 192.168.122.90 и перенаправить порт smtp 25 и хост машину с адресом 192.168.0.10, то это можно сделать как-то так (на хост-машине):
iptables -t nat -A PREROUTING -d 192.168.0.10 -p tcp --dport 25 -j DNAT --to-destination 192.168.122.90:25
возможные ошибки
Не работает DNAT в KVM qemu
Мне помогло добавить запись:
iptables -I FORWARD -i eth0 -o virbr0 -p tcp -m state --state NEW -j ACCEPT
http://gorbach.me/2011/ubuntu-10-04-lts-kvm-netwoking/
iptables -t nat -A PREROUTING -d 192.168.0.10 -p tcp --dport 25 -j DNAT --to-destination 192.168.122.90:25
возможные ошибки
Не работает DNAT в KVM qemu
Мне помогло добавить запись:
iptables -I FORWARD -i eth0 -o virbr0 -p tcp -m state --state NEW -j ACCEPT
http://gorbach.me/2011/ubuntu-10-04-lts-kvm-netwoking/
Выключение Windows 2003/2008 через virsh shutdown
Для того, чтобы работал shutdown по ACPI в гостевой системе необходимо исправить ключ реестра:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\shutdownwithoutlogon
выставить 1.
p.s.
Правда одна проблема, если производится выключение терминального сервера с подключеными клиентами, выдается запрос:“Данный компьютер используется другими пользователями...”
и выключение не производится. Как обойти пока не знаю...
p.s.s.
Ура получилось!!!
Правим реестр:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Error Message Instrument]
“EnableDefaultReply”=dword:00000001
[добавлено]
На wiki от proxmox нашел еще один ключ, иногда windows выключался некорректно:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
“ShutdownWarningDialogTimeout”=dword:00000001
Перезагружаемся и проверяем.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\shutdownwithoutlogon
выставить 1.
p.s.
Правда одна проблема, если производится выключение терминального сервера с подключеными клиентами, выдается запрос:“Данный компьютер используется другими пользователями...”
и выключение не производится. Как обойти пока не знаю...
p.s.s.
Ура получилось!!!
Правим реестр:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Error Message Instrument]
“EnableDefaultReply”=dword:00000001
[добавлено]
На wiki от proxmox нашел еще один ключ, иногда windows выключался некорректно:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
“ShutdownWarningDialogTimeout”=dword:00000001
Перезагружаемся и проверяем.