web-dev-qa-db-ja.com

iptables:Web閲覧にHTTPアクセスのみを許可する

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 
5
user1448260

ルールが

iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

DROPチェーンにOUTPUTポリシーを使用するには、ここで非常に関連性の高い2つのことが必要です。

  1. 接続はすでに確立されている必要があります
  2. 送信元ポートは80/tcpである必要があります

1024未満の送信元ポートには特権があり、通常、ソケット所有プロセスがrootとして実行されている場合でも、送信接続には使用されません。高い送信元ポート番号が表示される可能性が高く、30000をはるかに超えるのが一般的です。

許可される唯一の発信トラフィックは、すでに確立されている接続に関連している必要があるため、接続を確立する方法もありません。

したがって、実際には、このルールに一致するものはありません。

代わりに試してください:

iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT

これにより、宛先 TCPポート80へのアウトバウンド接続が許可されます。ここでトラフィックはeth0を介してルーティングされます。これは、必要なものとはるかに一致しています。

そして、指摘されているように、HTTPS、DNS、...を忘れないでください。

3
a CVn

あなたが持っているこれらの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ページでは明らかですが、間違ったセクションを参照していたようです。

だからあなたが持っていた両方のルールは間違っていました。

2
barlop

可能であれば、ipテーブルをフラッシュして、実際にhttp経由で接続できるかどうかを確認してください。 (iptables -F

ダースAndroidが言っていたように、https経由で接続しようとしていないことを確認してください。

また、複数のイーサネットインターフェイスがありますか?または、イーサネットインターフェイスはeth0以外の何かと呼ばれていますか。簡単なifconfigは、インターフェース名が何であるかを示します。

1
Cameron Aziz
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

ルールを必要以上に複雑にしないようにしましょう。

ループバックアダプターを絶対にブロックしないでください。

- - - 入力

  1. DNSやWebサーフィンなどは、出力に基づいてトラフィックを生成するだけなので、RELATEDまたはESTABLISHEDと見なされます。
  2. それは必要ないので、他のすべてをドロップします。

- - -出力

  1. LOを受け入れる
  2. Webトラフィックのみを受け入れたい80,443は、これらのポートが残りをドロップします

-----フォワード

Nicが1つある場合、ここではトラフィックはそれほど多くないはずですが、RELATEDまたはESTABLISHEDでない場合も同じことが当てはまり、必要ありません。

1
cybernard

また、双方向のICMPを許可する必要があります。そうでない場合、別のIPアドレスを使用すると、パスMTU検出とエラー回復が失敗します。

一般に、ESTABLISHEDおよびRELATEDのすべてのトラフィックを許可します。

0
Timothy Baldwin

私のようなグーグル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
0
Evaldas