Serverfault.comとのHTTPトラフィックのみを許可するようにマシンを設定する必要があります。他のすべてのWebサイト、サービスポートにはアクセスできません。私はこれらのiptablesルールを思いつきました:
#drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#Now, allow connection to website serverfault.com on port 80
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
それはかなりうまくいきません:
すべてをドロップして、ルール3に進みます。
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
私はこのエラーを受け取ります:
iptables v1.4.4: Host/network `serverfault.com' not found
Try `iptables -h' or 'iptables --help' for more information.
DNSに関連していると思いますか?それも許可する必要がありますか?または、ルールにIPアドレスを入れるだけですか?私がやろうとしていることは、より単純なルールで達成できると思いますか?どうやって?
これに関するヘルプやヒントをいただければ幸いです。どうもありがとう!
IPTablesルールでは、順序が重要です。規則が順番に追加され、適用されます。さらに、手動でルールを追加すると、すぐに適用されます。したがって、この例では、デフォルトのポリシーが設定されるとすぐに、INPUTチェーンとOUTPUTチェーンを通過するすべてのパケットがドロップされ始めます。これは、偶然にも、エラーメッセージが表示された理由です。何が起こっているのですか?
ソース/宛先オプションはホスト名を受け入れますが、強くお勧めしません。 manページを引用すると、
ホスト名は、ルールがカーネルに送信される前に一度だけ解決されます。 DNSなどのリモートクエリで解決する名前を指定することは、非常に悪い考えです。
Slillibriは彼の答えである頭に釘を打ちました、あなたはDNS ACCEPTルールを逃しました。あなたの場合それは問題ではありませんが、一般的に私はプロセスのデフォルトポリシーを後で設定します。最後に必要なことは、リモートで作業していて、SSHを許可することですafterデフォルトの拒否をオンにします。
また、ディストリビューションによっては、ファイアウォールルールを保存して、開始時に自動的に適用されるようにする必要があります。
これらすべてを理解し、スクリプトを再構成することをお勧めします。
# Allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
# Allow DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# Now, allow connection to website serverfault.com on port 80
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
追加
iptables -A OUPUT -p udp --dport 53 -j ACCEPT
dNSルックアップを許可します。
この種の要件は、Webプロキシやフィルタでより適切に処理される場合があります。 Dansgaurdianはこれを行うように構成できます。 NATルールを使用して、トラフィックをフィルターに強制的に通過させる必要があります。
Iptablesを使用してフィルタリングすると、関連するIPアドレスから利用可能なすべてのサイトが許可されます。これは通常、Web全体の小さなサブセットです。
このレベルではiptablesが機能しないのではないかと思います。ホスト名ではなく、IPアドレスのみを考慮します。同じIP上の他の名前の仮想ホストへのアクセスをブロックする場合は、.htaccessファイルの配置を確認する必要があります。
これをウェブサーバーで設定する必要があります。 iptablesはパケットフィルターです。 HTTPトランザクションは、TCPペイロードの一部として(つまり、iptablesが簡単に読み取ることができるTCPヘッダーの一部としてではなく))サイトの名前(つまり、stackoverflow)を送信します。 。
それと、HTTPトランザクションがほぼ確実に複数のパケットに分散される(つまり、HTTPヘッダーの文字列と一致することはできない)という事実を考えると、これはWebサーバー構成または前のプロキシによってより適切に処理されますそれの。
これの背後にある理由を知っておくと便利です。他にもいくつかの選択肢があります。