web-dev-qa-db-ja.com

iptables:tftpサーバーのルール

標準の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

カーネルにモジュールがありますが、他に何をする必要がありますか?

2
Martin Vegter
  • まず、「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を超えるポートでは、まったく新しい接続を確立できないことに注意してください。

2
xwst

TFTPクライアントの場合、かなり簡単な解決策は、iptablesに構成を追加することです。

ファイル:/ etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_netbios_ns ip_conntrack_tftp"
1
chandank