--state
私はただ選択肢を得ませんiptables
。
私は「新しい」、「確立された」、「関連する」の例を読みました。しかし、なぜこれが必要ですか?
つまり、ポート(22など)を開くときです。通信は22を介して行われ、それがすべてです。この状態パラメータを使用するのはなぜですか?
たぶんポート22は悪い例かもしれません。しかし、承認され、確立された、または関連付けられた接続を持つ新しい接続を作成するとき、状態は単により多くのポートを開くのですか?
例:次の違いは何ですか?
iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
そして
iptables -A OUTPUT -p tcp --dport 22 -m state -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -m state -j ACCEPT
どちらも動作するはずです。
ベストアンサー1
iptables -A INPUT -p tcp --sport 22 -m state -j ACCEPT
これにより、発信SSH接続のパケットを返すのではなく、任意の場所からシステムのすべてのポートに送信元ポート22を使用するすべてのTCP接続が許可されます。 SSHだけでなく、コンピュータのすべてのポートでサーバーを実行している場合は、誰でもそのサーバーに接続できます(22をソースポートとして使用すると推測する限り)。あいまいなセキュリティ。
Conntrackは、システムで開かれた実際の発信接続を追跡するため、着信iptables
接続パケットを受け入れるように指示することによって、そのESTABLISHED
パケットのみが受信されていることがわかります。
ただし、次の点に注意してください。
iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
発信SSH接続(ポート22)への応答のみを許可します。接続する必要があるシステムの他のポート、OUTPUT
ミラーチェーン内のすべてのルールに対してそれらをコピーする必要があります。
別の例は、親ポートへのパケットを受け入れ、(すべての)発信接続への応答パケットを許可することです。
iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT
これにより、高いポート(8080や6667など)で実行されているすべてのサーバーへの接続が許可され、誤って実行され続けるサーバーも可能になります。もちろん、範囲をさらに制限できますが、システムが発信接続に使用する範囲を確認する必要があります。
繰り返しますが、TCPを使用すると新しい接続をブロックするために追加できますが、! --syn
UDPでは戻りまたは応答パケットが下位レベルの初期パケットと変わらないため、これは不可能です。ここで、conntrack は、システムで最後に開かれた接続と外部から入ってくる他のパケットを区別するほとんど唯一のオプションです。