Iptables для разрешения входящего FTP

Iptables для разрешения входящего FTP

Я хочу разрешить входящий FTP-трафик.

CentOS 5.4:

Это мой /etc/sysconfig/iptablesфайл.

# Generated by iptables-save v1.3.5 on Thu Oct  3 21:23:07 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133:14837]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Thu Oct  3 21:23:07 2013

Также по умолчанию загружается модуль ip_conntrack_netbios_n.

#service iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

Но проблема не в этом модуле, так как я пытался выгрузить его, но безуспешно.

Если я отключу iptables, я смогу перенести резервную копию с другой машины на FTP. Если iptables принудительно, то передача не удалась.

решение1

Вашему ftp-серверу нужен канал для передачи данных. Порт 21используется для установления соединения. Поэтому, чтобы сделать передачу данных возможной, вам 20также нужно включить порт. Смотрите следующую конфигурацию

Сначала загрузите следующий модуль, чтобы убедиться, что пассивные ftp-соединения не отклоняются.

modprobe ip_conntrack_ftp

Разрешить FTP-подключения на 21входящем и исходящем порту

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -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"

Разрешить FTP-порт 20для активных входящих и исходящих соединений

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"

Наконец-то разрешим пассивный входящий трафик FTP

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"

Дополнительную информацию о проблемах FTP и брандмауэра см. по адресу:http://slacsite.com/other/ftp.html#active

Редактировать:Добавлено NEWв правило ввода порта 21.

решение2

Я уже видел такие обширные правила в нескольких блогах и т. д. и задался вопросом, почему бы просто не использовать

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

вместе с nf_conntrack_ftpмодулем. Это более кратко и читабельно, что в целом хорошо, особенно с брандмауэрами...

FWIW, похоже, что в ядре 4.7 произошли изменения, так что вам нужно либо установить net.netfilter.nf_conntrack_helper=1via sysctl(например, поместить его в /etc/sysctl.d/conntrack.conf), либо использовать

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp

(видетьздесьБольше подробностей)

решение3

FTP-клиент:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

FTP-СЕРВЕР:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Для переключения между пассивным и активным режимами на стороне клиента

ftp> passive
Passive mode on.
ftp> passive
Passive mode off.

решение4

Если вам нужны как активные, так и пассивные соединения, и вы уже принимаете ESTABLISHEDсоединения, например:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Затем вам нужно только открыть порт 21 и добавить специальное правило для пассивных портов. Для порта 20 правило не нужно, так как он уже принят правилом ESTABLISHEDвыше.

Сначала примите новые подключения на port 21:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

Затем добавьте помощника CT для пассивных портов 1024::

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp --dport 1024: -j ACCEPT

Смотрите также:

Примечание:вы должны установить 1024:как в вашем FTP-сервере: найдите пассивные порты по умолчанию в вашей конфигурации FTP. В противном случае вы откроете слишком много портов, которые могут не быть FTP-относительными.

Важная заметка:Я не добавлял OUTPUTправила, как мои настройки по умолчанию iptables -P OUTPUT ACCEPT. Это значит, что я доверяю тому, что идет из моей коробки. Это может быть не лучшим вариантом, особенно в настройке NAT.

Очень важное примечание:FTPS не будет работать с такой настройкой, так как пассивный порт скрыт (зашифрован), поэтому нет возможности iptablesугадать хороший порт. СмотритеИзменение IPTables для разрешения FTP через TLS с использованием пассивных портовиhttps://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

Связанный контент