web-dev-qa-db-ja.com

ファイアウォールの設定と構成

ここの初心者。ファイアウォールを設定するための次のルールを見つけました(Linuxの仕組みの本から)

iptables -P INPUT DROP   # the default policy
iptables -A INPUT -s 127.0.0.1 -j ACCEPT     
iptables -A INPUT -p tcp '!' --syn -j ACCEPT   # accepting incoming 
connections from everywhere except those initiating a connection hence syn

これまでのところ(またはそうだと思われる)。 DNSのルールを追加しようとすると問題が発生します。これは私が試したもので、正しくないようです(一度に1つずつ)。

INPUT -p udp --dport 53 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p udp --source-port 53 -s 127.0.1.1 -j ACCEPT
iptables -A INPUT -p udp --source-port 53 -j ACCEPT

望ましい結果:外部からの接続の初期化(ssh、icmtp、...)を防ぎ、DNSルックアップとWebブラウジング(curl、wget、telnet ...)を有効にします。私はローカルでWebサーバーまたはデータベースサーバーを実行する可能性があります...

助けていただければ幸いです。

1
user10089632

確立されたセッションの許可確立されたセッションにトラフィックの受信を許可できます。

Sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

上記の行が機能しない場合は、プロバイダーが拡張機能を利用可能にしていない去勢されたVPSにいる可能性があります。その場合、下位バージョンを最後の手段として使用できます。

Sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

特定のポートでの着信トラフィックの許可

Sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT

トラフィックのブロック

Sudo iptables -A INPUT -j DROP

iptablesを編集してループバックを有効にする:

Sudo iptables -I INPUT 1 -i lo -j ACCEPT

不要なトラフィックのロギング:

Sudo iptables -I INPUT 4 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

変更が正常に行われたことを確認するには:

iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP       all  --  anywhere             anywhere

iptables -L -vを使用して詳細を取得します。

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:ssh
    0     0 LOG        all  --  any    any     anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
    0     0 DROP       all  --  any    any     anywhere             anywhere

空のiptables:

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

iptablesの保存

今すぐマシンを再起動すると、iptablesの設定が消えます。ただし、再起動するたびにこれを入力するのではなく、構成を保存して、自動的に起動させることができます。

ファイアウォールルールをファイルに保存する

Sudo sh -c "iptables-save > /etc/iptables.rules"

スクリプト/etc/network/if-pre-up.d/iptablesloadには以下が含まれます。

#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0

および/etc/network/if-post-down.d/iptablessaveには以下が含まれます。

#!/bin/sh
iptables-save -c > /etc/iptables.rules
if [ -f /etc/iptables.downrules ]; then
   iptables-restore < /etc/iptables.downrules
fi
exit 0

次に、必ず両方のスクリプトに実行権限を付与してください。

Sudo chmod +x /etc/network/if-post-down.d/iptablessave
Sudo chmod +x /etc/network/if-pre-up.d/iptablesload

ソース

1
user10089632

次のようなすべての確立された関連トラフィックを許可する入力ルールを作成することをお勧めします。

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

また、ループバックデバイスを常に許可する必要があります。

#ループバックインターフェイスが何でもできるようにします。
 $ IPTABLES -A INPUT -i lo -j ACCEPT 
 $ IPTABLES -A OUTPUT -o lo -j ACCEPT 

デフォルトの出力ポリシーが受け入れられている場合、ほとんどの問題は解消されています。それ以外の場合は、次も追加する必要があります。

$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

hTTP、DNS、ICMP、または必要なポートを開きます。

https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

https://en.wikibooks.org/wiki/Communication_Networks/IP_Tables

1
AlexOnLinux