我想允許傳入 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
21
允許連接埠傳入和傳出的FTP 連接
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://slacksite.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 以允許使用被動連接埠透過 TLS 進行 FTP和https://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok