Соответствующие правила 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. Что я могу сделать, чтобы устранить эту проблему?


person user1014351    schedule 30.10.2014    source источник


Ответы (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, которое менее безопасно, но определенно сделает свою работу.

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

person Yoel    schedule 30.10.2014