UDP
標準ポートでリッスンするtftpサーバーがあります69
。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
カーネルにモジュールがあります。しかし、何をすべきですか?
答え1
まず、送信元IPが「192.168.1.0/24」と一致するサーバーにのみ接続できます。確かにこれは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 より大きいポートでは新しい接続を確立できません。
答え2
TFTPクライアントの場合、非常に簡単な解決策はiptablesに設定を追加することです。
ファイル:/etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_netbios_ns ip_conntrack_tftp"