web-dev-qa-db-ja.com

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
26
IOTAMAN

ここに私が人々がFTPプロトコルに従うことができるように参照するドキュメントがあります: http://slacksite.com/other/ftp.html

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

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構成に問題があります。

41
Evan Anderson

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

私の場合、ip_conntrack_ftpカーネルモジュールがありませんでした。ロードする必要があります。だからあなたはこれを試すことができます:

modprobe ip_conntrack_ftp

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

0
Kornel