--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 は、システムで最後に開かれた接続と外部から入ってくる他のパケットを区別するほとんど唯一のオプションです。
答え2
「両方とも動作しなければならない」と言うことは、両方とも動作することを意味します。あなたそうしたいのですが、私たち何が欲しいのかわかりません。
最初のルールペアは次のことを許可します。出るリモートポート22に接続します。これはあなたが望むものかもしれないし、そうでないかもしれません。ほとんどの人は着信接続を制限することに興味があります。
第2のルールペアは、リモートポート22への接続も許可する。ただし、ファイアウォールを使用すると、許可する必要が実際に許可されているかどうかを簡単にテストできます。ブロックする必要があるコンテンツが実際にブロックされているかどうかをテストするのは難しいです。
この場合、2番目のルールペアは、リモートポートが22の限り、すべてのポートへの着信接続を許可します。私はこれがあなたが望むものではないと確信しています。過去には、ステートレスファイアウォールのルールのため、ソースポート22に正確に接続しようとする試みがたくさんありました。最近は見たことがなく、まだこのような試みが一般的であり、攻撃者がソースポートを選択するのは簡単です。
答え3
iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
〜するいいえ新しい接続が許可されます。
マニュアルページから:「NEW は、パケットが新しい接続を開始したか、または双方向でパケットを表示できなかった接続に関連付けられていることを示します。」。 IOW、デフォルトポリシーがDROP / REJECTの場合、このルールだけではホストに接続できません。