在設定ftp通過iptables規則前,需要先瞭解下ftp工作的兩種模式,他們分別是主動模式和被動模式。如果對ftp原理不是很清楚,可以先參考下下面幾篇文章。
FTP簡介
1、FTP主動模式和被動模式的區別
2、Active FTP vs. Passive FTP, a Definitive Explanation
簡單的說,主動模式是從伺服器端向用戶端發起串連;被動模式是用戶端向伺服器端發起串連。兩者的共同點是都使用 21連接埠進行使用者驗證及管理,差別在於傳送資料的方式不同,PORT模式的FTP伺服器資料連接埠固定在20,而PASV模式則在1025-65535之間 隨機。
瞭解ftp原理後,接下來就去設定iptables規則。我自己伺服器上預設INPUT規則是DROP,OUTPUT是ACCEPT。
命令
1、開放21、20連接埠
# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
如果OUTPUT預設也是DROP,那麼還需要添加一下規則。
# iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
2、接受所有狀態為ESTABLISHED、RELATED的串連
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
有關related狀態的說明:
RELATED狀態在有雙通道的服務中會出現的。比如ftp服務的控制通道和資料通道。client發送syn請求到server的21連接埠,中間的linux系統變為NEW狀態。server回複syn+ack應答包給client,中間的linux變為ESTABLISHED狀態。當ftp的控制通道建立完後,會建立資料通道,而資料通道的第一個包就是RELATED狀態,以後的包又變成ESTABLISHED狀態。
3、配置iptables
# vi /etc/sysconfig/iptables-config
找到IPTABLES_MODULES,取消注釋,添加ip_conntrack_ftp模組,儲存。ip_conntrack_ftp模組可以讓iptables支援被動模式的ftp串連。
IPTABLES_MODULES="ip_conntrack_ftp"
4、儲存iptables規則、重啟。
[root@iZ94myad6wkZ ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@iZ94myad6wkZ ~]# service iptables restart
iptables: Setting chains to policy ACCEPT: filter nat [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
iptables: Loading additional modules: ip_conntrack_ftp [ OK ]
重啟iptables是多了個載入模組的地址,ok正常。