Linux

允許使用 IPTables 進行 FTP

  • February 22, 2017

我目前的情況涉及允許各種規則,但我需要可以從任何地方訪問 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 配置有問題。

引用自:https://serverfault.com/questions/38398