標準のUDP
ポート69
でリッスンするtftpサーバーがあります。次のルールをiptables
に追加して、UDP 69
以外のすべてをブロックします。
-A INPUT -i eth0 -s 192.168.1.0/24 -p udp -m udp --dport 69 -j ACCEPT
-A INPUT -j DROP
ただし、このルールでは、クライアントはtftpサーバーにアクセスできません。私はtftp
が実際の転送に(ftp
と同様に)より高いポートを使用しており、ip_conntrack_tftp
モジュールを使用する必要があることを読みました。
# zcat /proc/config.gz | grep -i tftp
CONFIG_NF_CONNTRACK_TFTP=m
カーネルにモジュールがありますが、他に何をする必要がありますか?
まず、「192.168.1.0/24」に一致するソースIPを持つサーバーへの接続のみを許可します。念のため:これはLAN IPなので、サーバーとクライアントが同じLANの一部である場合にのみ機能します。この場合、おそらくインターネットへのファイアウォールとしてルーターを使用しているため、iptablesの構成は必要ありません。
2番目:最初の設定を次のように変更します
-A INPUT -i eth0 -s 192.168.1.0/24 -p udp --dport 69 -m state --state NEW,ESTABLISHED -j ACCEPT
ただし、上記の設定では、ポート69での受信接続のみを許可します。つまり、サーバーはメッセージを返信できません(送信接続のデフォルトのフィルターポリシーによって異なります)。サーバーがポート69で応答できるようにするには、発信接続用のデフォルトポリシーを受け入れる必要があります。
-P OUTPUT ACCEPT
または、ポート69で回答を許可します。
-A OUTPUT -i eth0 -p udp --sport 69 -m state --state ESTABLISHED -j ACCEPT
さらに、カーネルモジュールをロードする必要がありますip_conntrack
およびip_conntrack_tftp
「上位ポート接続」用。 (lsmod
を使用して両方がロードされているかどうかを確認してください。)実際のデータ転送のために新しい接続を受け入れるには、次を使用します。
-A INPUT --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
1024を超えるポートでは、まったく新しい接続を確立できないことに注意してください。
TFTPクライアントの場合、かなり簡単な解決策は、iptablesに構成を追加することです。
ファイル:/ etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_netbios_ns ip_conntrack_tftp"