私の現在のシナリオでは、さまざまなルールを許可していますが、どこからでもftpにアクセスできるようにする必要があります。 OSは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
Re:投稿にOUTPUTチェーンがないので、ここにも含めます。 OUTPUTチェーンがdefault-dropの場合、これは重要です。
これらのルールを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
これにより、ポート21でlistenするnetcatが開始され、入力がシェルにエコーされます。別のホストからTELNETをサーバーのポート21に接続し、TCP接続が確立されていること、およびTELNET接続を入力するとシェルに出力が表示されることを確認します。
最後に、VSFTPDを再起動し、ポート21でリッスンしていることを確認して、再度接続を試みます。 netcatへの接続が機能していれば、iptablesルールは問題ありません。 netcatの実行後にVSFTPDへの接続が機能しない場合は、VSFTPD構成に問題があります。
このルールを試してください。注意: $EXTIP
は、FTPサーバーの外部IPアドレスです。
-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT
私の場合、ip_conntrack_ftpカーネルモジュールがありませんでした。ロードする必要があります。だからあなたはこれを試すことができます:
modprobe ip_conntrack_ftp
また、ip_conntrack_ftpを/ etc/modulesに追加して、再起動後に動作するようにします