IPTables で FTP を許可する

IPTables で FTP を許可する

現在のシナリオでは、さまざまなルールを許可していますが、どこからでも 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

答え1

FTP プロトコルに従うために私が人々に参照させるドキュメントは次のとおりです。http://slacksite.com/other/ftp.html

  • アクティブ モード FTP を実行するには、TCP ポート 21 への着信接続とポート 20 からの発信接続を許可する必要があります。
  • パッシブモードFTPを実行するには、TCPポート21への着信接続と、サーバーコンピュータ上のランダムに生成されたポートへの着信接続を許可する必要があります(netfilterのconntrackモジュールを使用する必要があります)。

投稿には 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 で netcat のリッスンが開始され、シェルに入力がエコーされます。別のホストからサーバーのポート 21 に TELNET し、TCP 接続が確立され、TELNET 接続を入力するとシェルに出力が表示されることを確認します。

最後に、VSFTPD を再起動させ、ポート 21 でリッスンしていることを確認し、再度接続を試みます。netcat への接続が機能した場合、iptables ルールは正常です。netcat が機能した後で VSFTPD への接続が機能しない場合は、VSFTPD の設定に問題があります。

答え2

このルールを試してください。注:$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

答え3

私の場合、ip_conntrack_ftp カーネル モジュールがありませんでした。これをロードする必要があります。次の操作を試してください。

modprobe ip_conntrack_ftp

また、ip_conntrack_ftpを/etc/modulesに追加して、再起動後に機能するようにします。

関連情報