Я хочу разрешить входящий 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=1
via 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
Смотрите также:
- https://github.com/rtsisyk/linux-iptables-contrack-exploit
- http://home.regit.org/wp-content/uploads/2011/11/secure-conntrack-helpers.html
Примечание:вы должны установить 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