Linuxボックスを持っていて、ロックダウンしたいが、インターネットをサーフィンできるようにしたい。このスクリプトがhttpもブロックしているのはなぜですか?
#!/ bin/sh # # iptables -F # #デフォルトに設定INPUT、FORWARD、およびOUTPUTチェーンのポリシー # iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP # #許可TCP tcpポート80 # iptables -A INPUT -i eth0 -ptcp-- dport 80 -m state --state NEW、ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # #localhost # iptables -A INPUT -i lo -j ACCEPT のアクセスを設定します# #リストルール # iptables -L -v
ルールが
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
DROP
チェーンにOUTPUT
ポリシーを使用するには、ここで非常に関連性の高い2つのことが必要です。
1024未満の送信元ポートには特権があり、通常、ソケット所有プロセスがrootとして実行されている場合でも、送信接続には使用されません。高い送信元ポート番号が表示される可能性が高く、30000をはるかに超えるのが一般的です。
許可される唯一の発信トラフィックは、すでに確立されている接続に関連している必要があるため、接続を確立する方法もありません。
したがって、実際には、このルールに一致するものはありません。
代わりに試してください:
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
これにより、宛先 TCPポート80へのアウトバウンド接続が許可されます。ここでトラフィックはeth0を介してルーティングされます。これは、必要なものとはるかに一致しています。
そして、指摘されているように、HTTPS、DNS、...を忘れないでください。
あなたが持っているこれらの2つのルールを見て
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
あなたが持っているのは、あなたが実行しているウェブサーバーへの着信を許可するためにあなたが言うことです。
あなたが持っているものは、このウェブページが着信を許可するために言っていることと同じです.. http://crm.vpscheap.net/knowledgebase.php?action=displayarticle&id=29
6. Allow Incoming HTTP and HTTPS
The following rules allow all incoming web traffic. i.e HTTP traffic to port 80.
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
しかし、あなたの質問によると、あなたは発信を許可したいです。あなたはそのウェブページをもう一度調べることができます
発信を許可する例を次に示します。
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
そのWebページでは明らかですが、間違ったセクションを参照していたようです。
だからあなたが持っていた両方のルールは間違っていました。
可能であれば、ipテーブルをフラッシュして、実際にhttp経由で接続できるかどうかを確認してください。 (iptables -F
)
ダースAndroidが言っていたように、https経由で接続しようとしていないことを確認してください。
また、複数のイーサネットインターフェイスがありますか?または、イーサネットインターフェイスはeth0以外の何かと呼ばれていますか。簡単なifconfig
は、インターフェース名が何であるかを示します。
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -I INPUT 2 -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I INPUT 3 -j DROP
iptables -I OUTPUT 1 -o lo -j ACCEPT
iptables -I OUTPUT 2 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -I OUTPUT 3 -j DROP
iptables -I FORWARD 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 2 -j DROP
ルールを必要以上に複雑にしないようにしましょう。
ループバックアダプターを絶対にブロックしないでください。
- - - 入力
- - -出力
-----フォワード
Nicが1つある場合、ここではトラフィックはそれほど多くないはずですが、RELATEDまたはESTABLISHEDでない場合も同じことが当てはまり、必要ありません。
また、双方向のICMPを許可する必要があります。そうでない場合、別のIPアドレスを使用すると、パスMTU検出とエラー回復が失敗します。
一般に、ESTABLISHEDおよびRELATEDのすべてのトラフィックを許可します。
私のようなグーグルDNSを使用している場合は、次のようになります。
Sudo ip6tables -P INPUT DROP
Sudo iptables -P INPUT ACCEPT
Sudo iptables -F
Sudo iptables -A INPUT -i lo -p udp -s 127.0.0.1 -d 127.0.1.1 --sport 40000:65535 --dport 53 -m limit --limit 50/s -j ACCEPT
Sudo iptables -A INPUT -i lo -p udp -d 127.0.0.1 -s 127.0.1.1 --dport 40000:65535 --sport 53 -m limit --limit 50/s -j ACCEPT
Sudo iptables -A INPUT -p udp -s 8.8.4.4 --sport 53 -m limit --limit 50/s -j ACCEPT
Sudo iptables -A INPUT -p udp -s 8.8.8.8 --sport 53 -m limit --limit 50/s -j ACCEPT
Sudo iptables -A INPUT -p tcp -m multiport --sports 443,80 -m state --state NEW,ESTABLISHED -m limit --limit 50/s -j ACCEPT
Sudo iptables -P INPUT DROP