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

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=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 以允許使用被動連接埠透過 TLS 進行 FTPhttps://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

相關內容