ポート転送を実行する既存のiptables設定があります。このポート転送シナリオでは、ポート転送を望まない状況があります。たとえば、私はこのように定義します。
iptables -A PREROUTING -t nat -i eth0 '!' -s 10.200.0.0/16 -p tcp --dport 80 -j DNAT --to 10.200.30.11
これにより、10.200/16がこのルールにアクセスできなくなります。複数の除外項目を追加する必要があることがわかりました。しかし、これを行う方法はないようです。
iptables -A PREROUTING -t nat -i eth0 '!' -s 10.200.0.0/16,192.168.0.0/16 -p tcp --dport 8080 -j DNAT --to 10.200.30.11:80
iptables v1.4.8: ! not allowed with multiple source or destination IP addresses
この問題を異なる方法で処理する必要があると思いますが、どうすればよいかわかりません。どんな提案がありますか?
答え1
次のバリエーションのいずれかを使用できます。
最初のものはipsetで、設定タイプは「hash:net」です。
-j RETURN
2番目は、各ネットワークのスキャンをスキップし、最後のチェーンルールとして必要な基本操作を提供するiptablesルールチェーンです。
3番目は、いくつかのビットフラグでパケットにタグを付け、-j MARK
そのフラグを再生して(などを使用して--set-mark
)タグ検証が満たされたら、--set-xmark
必要なアクション(-m mark
および)を実行することです。--mark
タグを1つのテーブルに設定して別のテーブルにチェックインできるため、これは最も多様なバリエーションです。 OTOHフラグビットマスクは32ビットに制限されているため、複雑なルールには不十分です。
答え2
たとえば、IPが正しい場合:
1.1.1.5,1.1.1.6,1.1.1.7...,
--src-range
シーケンスの最初のIPと最後のIPを使用して指定できます。たとえば、1.1.1.[5-8]を除くすべてのIPに対してポート8020を閉じる必要がある場合は、次のiptablesルールを追加する必要があります。
-A INPUT -p tcp -m iprange ! --src-range 1.1.1.5-1.1.1.8 -m tcp --dport 8020 -j DROP
-m iprange
と一緒に使用することを忘れないでください--src-range
。