Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.
Имеется сервер с 2-мя сетевыми картами, одна подключена к локальной сети, другая к роутеру. На роутере настроено перенаправление запросов по 21 порту на сервер и DynDNS через noip.com. Для IPTables заданы такие настройки:
Установил и настроил Pure-FTPd + MySQL + Pure-FTPd WebUI на базе Debian 8.1. Но столкнулся с проблемой: по локальной сети FTP-сервер доступен, а вот удаленно через роутер уже нет. Где может быть проблема?
Так-с...
У Вас есть роутер и есть сервер (компьютер).
Доступ блокируется либо на роутере (средствами его файрвола), либо на самом сервере. А может быть, и там, и там.
Приведенные правила iptables относятся к роутеру или к серверу?
Теперь по приведенным правилам.
Интерфейс eth1 смотрит в локальную сеть, как я понял.
Для него у Вас разрешены любые входящие пакеты. -A INPUT -i eth1 -j ACCEPT 15 строка
и любые исходящие пакеты -A OUTPUT -o eth1 -j ACCEPT 32 строка
поэтому с локальной сетью проблем с доступом не будет - всё разрешено.
А вот с доступом снаружи всё сложнее.
Входящие разрешены на 21 порт, с исходящими неясно. -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 33 строка - здесь вроде бы разрешены новые и ответные пакеты. -A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP34 строка - а здесь новые блокируются.
По идее, сначала должно отработать правило в 33 строке.
Советую включить логирование и посмотреть, где именно бьются пакеты.
Я обычно делаю так: прямо перед проверяемым правилом вставляю точно такое же, только действие ставлю LOG (или можно ULOG).
Например:
с логированием будет выглядеть так -A INPUT -i eth0 -p tcp -m tcp --dport 21 -j LOG --log-prefix "Input 21 port accept" 24 строка (вставили ещё одну строку) -A INPUT -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT 25 строка
если пакет попадает под правило в 24 строке, стало быть, попадет и под правило в 25 строке.
То есть, если в логе отразилась запись, значит правило отработало.
Аналогичным образом делаете для исходящих пакетов. -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j LOG --log-prefix "OUTPUT ACCEPT" -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "Output DROP" -A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
В самый конец добавьте ещё пару логирующих правил.
-A INPUT -j LOG --log-prefix "default input" -A OUTPUT -j LOG --log-prefix "default output"
они отобразят пакеты, не попавшие ни под одно правило, и обработанные политикой по умолчанию (которая у Вас DROP).
Дальше обращаетесь к серверу снаружи и потом смотрите логи: с каким префиксом попадают в логи Ваши пакеты, тем правилом они и обрабатываются.
В Вашем конкретном случае, подозреваю, что пакеты рубятся политикой по умолчанию. Стало быть, увидите их с префиксом "default"
Пускай скрипят мои конечности.
Я - повелитель бесконечности... Мой блог
Hephaestus спасибо за помощь! Проблема решена! Хочу обратить внимание, что кроме 21 порта, нужно открыть и пассивные порты для FTP-сервера, как на сервере, так и на роутере. Иначе подключиться не получится.
с логированием будет выглядеть так -A INPUT -i eth0 -p tcp -m tcp --dport 21 -j LOG --log-prefix "Input 21 port accept" 24 строка (вставили ещё одну строку) -A INPUT -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT 25 строка
если пакет попадает под правило в 24 строке, стало быть, попадет и под правило в 25 строке.
То есть, если в логе отразилась запись, значит правило отработало.
Аналогичным образом делаете для исходящих пакетов. -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j LOG --log-prefix "OUTPUT ACCEPT" -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "Output DROP" -A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
В самый конец добавьте ещё пару логирующих правил.
-A INPUT -j LOG --log-prefix "default input" -A OUTPUT -j LOG --log-prefix "default output"
они отобразят пакеты, не попавшие ни под одно правило, и обработанные политикой по умолчанию (которая у Вас DROP).
Дальше обращаетесь к серверу снаружи и потом смотрите логи: с каким префиксом попадают в логи Ваши пакеты, тем правилом они и обрабатываются.
В Вашем конкретном случае, подозреваю, что пакеты рубятся политикой по умолчанию. Стало быть, увидите их с префиксом "default"
Если в iptables используется действие LOG, то записи попадают в логи ядра (это же на уровне ядра пакеты фильтуются).
Если же используется действие ULOG, то здесь задействуется syslog, и можно настроить вывод в отдельный файл.
Пускай скрипят мои конечности.
Я - повелитель бесконечности... Мой блог