web-dev-qa-db-ja.com

一部のURLでIPtables文字列が一致する

Iptablesを書き込もうとしていますstring matchルールをブロックするhttp://example.com:8888およびhttps://example.com:8888ルールで指定された文字列と一致する場合。また、ポートを8888から7777にリダイレクトする別のルール。

次のルールを試しましたが、残念ながら機能しませんでした。

iptables -A INPUT -p tcp -s 0.0.0.0/0 -m string --string linuxcore --algo bm --sport 8888 -j DROP
iptables -t raw -A PREROUTING -m string --algo bm --string linuxcore -p tcp -i eth0 --dport 8888 -j DROP
iptables -t nat -A PREROUTING -p tcp --dport 8888 -m string --algo bm --string "linuxcore" -j REDIRECT --to-port 7777
iptables  -A INPUT -t nat -p tcp --dport 8888 -m string --algo bm --string "linuxcore" -j DROP
2
linuxcore

あなたが思っているよりもかなり複雑なことをしようとしているようです。

あなたが求めているもの:

パケットのペイロード(レイヤー7)で特定の文字列をブロックします。これにより、誰かが文字列「linuxcore」について言及している電子メールまたはIMを送信したり、それに関するコメントをフォーラムに投稿したりするのを防ぐことができます。

私があなたが望むと思うもの:

Domain.comという名前で解決され、ポート8888宛てのIPアドレス宛てのパケットをポート7777にリダイレクトします。

前者はあまり意味がないので、私はあなたが望むと思うものを想定します。また、「foo.domain.com」のマッチングには興味がないと思います。 ipテーブルであり、dnsテーブルではないことを忘れないでください。

この場合、1、2、4行目は不要です。そして、文字列照合は必要ありません。 iptablesは、名前を適切なIPアドレスに変換し、必要に応じてルールを多重化するのに十分なほど賢いです。さらに、PREROUTINGを使用しているため、これはシステムに着信するのみに一致し、パケットには一致しないシステムを離れる(離れるパケットを照合する場合は、OUTPUTを使用するか、またはそれぞれ1つずつ使用する必要があります)。

そのルールは次のようになります。

iptables -t nat -A PREROUTING -d domain.com -p tcp --dport 8888 -j REDIRECT --to-ports 7777 
2
bahamat