iptablesを作成しようとしています。文字列一致ブロックするルールとルール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
答え1
私が思うよりもはるかに複雑なことをしようとしているようです。
あなたは何を求めますか?
パケットペイロード(レイヤ7)で特定の文字列をブロックします。これにより、誰かが「linuxcore」という文字列に言及した電子メールまたはIMを送信したり、フォーラムにコメントを投稿したりするのを防ぎます。
私はあなたが望むものを考えます:
ポート8888に向けられたパケットを、domain.comという名前で解決されたIPアドレスにポート7777にリダイレクトします。
前者はあまり意味がないので、私はあなたが望むものを仮定します。私はまた、「foo.domain.com」マッチングに興味がないと仮定します。覚えておいて、これアイピー気をつけて、いいえドメインネームサーバー表面。
この場合、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