Linux
允許使用 IPTables 進行 FTP
我目前的情況涉及允許各種規則,但我需要可以從任何地方訪問 ftp。作業系統是 Cent 5,我正在使用 VSFTPD。我似乎無法使語法正確。所有其他規則都正常工作。
## Filter all previous rules *filter ## Loopback address -A INPUT -i lo -j ACCEPT ## Established inbound rule -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## Management ports -A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -i lo -j ACCEPT ## Allow NRPE port (Nagios) -A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT -A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT ##Allow FTP ## Default rules :INPUT DROP [0:0] :FORWARD DROP :OUTPUT ACCEPT [0:0] COMMIT
以下是我嘗試過的規則。
##Allow FTP -A INPUT --dport 21 any -j ACCEPT -A INPUT --dport 20 any -j ACCEPT -A INPUT -p tcp --dport 21 -j ACCEPT -A INPUT -p tcp --dport 20 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT -A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
這是我推薦人們參考的文件,以便他們可以遵循 FTP 協議:http ://slacksite.com/other/ftp.html
- 要進行主動模式 FTP,您需要允許 TCP 埠 21 的傳入連接和埠 20 的傳出連接。
- 要進行被動模式 FTP,您需要允許到 TCP 埠 21 的傳入連接和到伺服器電腦上隨機生成的埠的傳入連接(需要在 netfilter 中使用 conntrack 模組)
您的文章中沒有任何內容:您的 OUTPUT 鏈,所以我也會在此處包含它。如果您的 OUTPUT 鍊是預設丟棄,那麼這很重要。
將這些規則添加到您的 iptables 配置中:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
那麼,要支持被動模式 FTP,您需要在啟動時載入 ip_conntrack_ftp 模組。取消註釋並將 /etc/sysconfig/iptables-config 文件中的 IPTABLES_MODULES 行修改為:
IPTABLES_MODULES="ip_conntrack_ftp"
保存 iptables 配置並重新啟動 iptables。
service iptables save service iptables restart
要完全排除 VSFTPD 的問題,請停止 VSFTPD,使用“netstat -a”驗證它沒有在埠 21 上偵聽,然後執行:
nc -l 21
這將啟動 netcat 監聽埠 21 並將輸入回顯到您的 shell。從另一台主機,TELNET 到您伺服器的埠 21,並驗證您獲得了 TCP 連接,並且當您鍵入 TELNET 連接時,您在 shell 中看到了輸出。
最後,重新啟動 VSFTPD,確認它正在偵聽埠 21,然後再次嘗試連接。如果與 netcat 的連接正常,那麼您的 iptables 規則就可以了。如果在 netcat 完成後無法連接到 VSFTPD,則說明您的 VSFTPD 配置有問題。