web-dev-qa-db-ja.com

Iptables-特定のポートを許可し、他のポートをブロックする問題に直面しています

22(ssh)、80(http)、443(https)を除くすべてのポートをブロックしようとしました。私の現在のINPUTルールはこれらです。

> iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
DROP       all  --  anywhere             anywhere            

httpおよびhttpsポートを受け入れてから、他のすべてをブロックする必要があります。しかし、それはすべてをブロックしています。たとえば、ポート80と443を使用するFacebookにアクセスしようとすると、機能しません。 Facebookにアクセスできません。私は今どうすればいい?

私もこうやってみました。言及されたポートを許可し、policy DROPを作成しましたが、よくわかりません。同じことが起こります。

> iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
1
Anna

作成したポリシールールは、外部ホストがあなたの TCPポート22、80、および443に接続することを許可しますが、許可しませんあなた自身を含む他のトラフィック!このホストがこれらの3つのポート以外にアクセスするのを本当に防ぎたい、そして外部のホストがあなたのポートにアクセスしたくない場合まったく、あなたはルールを置くことができますOUTPUTルールチェーンではなくINPUTルールチェーンで、入力チェーンにCONNTRACKルールを設定して、開始しなかった接続を防止します。

-P INPUT DROP
-P OUTPUT DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m udp -p udp --sport 53 -j ACCEPT
-A OUTPUT -i lo -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A OUTPUT -m udp -p udp --dport 53 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 443 -j ACCEPT

一部の内部プログラムでループバックアダプタが必要になる場合があるため、通常はループバックアダプタを正常に動作させます。同様に、DNSトラフィックを許可します。そうしないと、ドメイン名を解決できません。

1
ErikF

他の人がコメントで指摘したように、ウェブサイトにアクセスするためのようなINPUTルールは必要ありません。これらのポートでサービスをローカルで実行している場合にのみ、これらのルールが必要になります。代わりにアウトバウンドトラフィックを制限したい場合は、これらのルールをOUTPUTチェーンに入れる必要があります。

さらに、すべてのインバウンドトラフィックをドロップしているため、すべての接続が失われています。 Webサーバーに接続すると、キャッチオールドロップのために、返されるデータ(具体的には、TCP 3ウェイハンドシェイク)がINPUTチェーンにドロップされます。これを修正するには、これらのリターン接続を許可するルールを追加する必要があります。

iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
1
multithr3at3d

update-alternatives --config iptablesを試して、レガシーバージョンを選択してください。とりあえず働いてくれました。

0
pape fall bnc