IPTables - 2つのホスト間の通信を許可し、他のすべてを放棄します。

IPTables - 2つのホスト間の通信を許可し、他のすべてを放棄します。

インターネットからのすべてのトラフィックをブロックするように設定したいルーターがあります。私が理解したのは、転送されたパケットを破棄することです。また、内部LAN上のあるシステムと他の複数のシステム間のトラフィックを許可したいと思います。

このために、以下を試しました。

IPT="/sbin/iptables"

LOCAL_CONTROLLER="192.168.1.2"
SUBNET="192.168.1."
MACHINE_IPS="100 101 102 103 104"

for MACHINE in ${MACHINE_IPS}; do
    $IPT -A FORWARD -s $LOCAL_CONTROLLER -j ACCEPT
    $IPT -A FORWARD -s $SUBNET$MACHINE -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A FORWARD -s $SUBNET$MACHINE -d $LOCAL_CONTROLLER -j ACCEPT 
    $IPT -A FORWARD -s $SUBNET$MACHINE -j DROP
done

残念ながら、期待どおりに動作しません。 192.168.1.2 から 192.168.1.103 へのトラフィックとその逆のトラフィックはブロックされます。

私のスクリプトにどのような問題があるかを指摘してもらえますか?

答え1

FORWARDサーバーに問題がある場合にのみキューを使用してください。ルーターです、ネットワーク外部からの着信および発信パケットを処理するために使用され、ネットワーク外(ルーターレベルで)パケットルーティングをブロック/受け入れるために使用されます。

ホストレベルで接続を制御するためにルーティングを実行しないため(たとえば、IP転送を実行しない)、接続がどこから来るかに関係なく、使用またはINPUTキューに入れるのが一般的です。OUTPUT

ローカルネットワーク上のコンピュータグループがインターネットではなく互いに通信できるようにしたい場合は、最も簡単な方法はそのコンピュータにゲートウェイを定義しないことです。

それでもこれを行う必要がある場合は、代わりにスクリプトでキューを使用する必要がiptablesあります。INPUTFORWARD

主な関心事がインターネットに入るトラフィックであれば、ゲートウェイを提供するのは好きではありませんが、OUTPUTローカルシステムのキューを使用する必要があります。

良い:

iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT
iptables -A OUTPUT -j DROP

(192.168.1.0/24 -> 192.168.1ネットワーク上のすべてのマシン)

他のネットワークからSSH経由でアクセスしている場合は、これらのルールを使用すると効果的に自分自身をロックできます。

ただし、ルーターがLinuxボックスの場合は、FORWARDルールを作成すると、インターネット上の複数のシステムをロックするのに十分です。

iptables -A FORWARD -s 192.168.1.10 -j DROP
iptables -A FORWARD -s 192.168.1.11 -J DROP

からman iptables

INPUT(ローカルソケットに向かうパケット用)
FORWARD(ボックス経由でルーティングされるパケット用)
OUTPUT(ローカルで生成されたパケット用)

関連情報