Подходящие правила iptables для FTP-сервера в активном \ пассивном режиме

Я установил сервер ProFTPD на CentOS6. Если я создаю ftp localhost, я могу правильно подключиться, но если я попробую извне, я получаю сообщение "нет маршрута к хосту". Но есть маршрут к хосту, потому что я подключен через SSH.

Я попытался добавить следующие правила iptable:

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"

iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections"

и перезапустил оба сервиса proftpd и iptables. Что я могу сделать, чтобы устранить эту проблему?

1 ответ

Решение

Чтобы разрешить FTP, вам нужны следующие правила на сервере:

  1. Разрешите управляющие соединения, инициированные клиентом, к порту 21 следующим образом:

    iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
    iptables -A OUTPUT -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
    
  2. В активном режиме разрешите подключения для передачи данных, инициированные сервером через порт 20, следующим образом:

    iptables -A OUTPUT -p tcp -m tcp --sport 20 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
    iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
    
  3. Для пассивного режима разрешите подключения данных, инициированные клиентом на непривилегированных портах:

    iptables -A INPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
    iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
    

Обычный conntrack модули должны правильно отслеживать, когда RELATED соединение для передачи данных установлено в активном режиме, однако вам может потребоваться загрузить nf_conntrack_ftp модуль для корректного отслеживания, когда такие соединения устанавливаются в пассивном режиме:

  • Проверьте, загружен ли он lsmod | grep nf_conntrack_ftp,
  • Загрузите это с modprobe nf_conntrack_ftp,

Кроме того, вы можете заменить RELATED состояние с NEW состояние, которое менее безопасно, но определенно сделало бы работу.

Эта ссылка содержит краткое изложение обоснования вышеуказанных правил.

Другие вопросы по тегам