私が間違っていることを理解するのを手伝ってください。iptablesUbuntu 14.04で。
iptables -F
ip6tables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
# allows the outgoing traffic of established connections, necessary if the OUTPUT policy is not set to ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -j DROP
iptables-nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
10574 17M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2 88 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
260 14124 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
10317 623K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW,ESTABLISHED
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
上記では、sshを除くすべてをブロックしてみました。だから私はwgetが何もダウンロードできないと予想しましたが、うまくいきますが、apt-get updateは(予想どおり)動作しません。すべて(受信/送信)をブロックする方法を説明してください。または、この設定が問題ない場合、wgetがまだ機能するのはなぜですか?
編集:また、2行を1行に変更しようとしましたが、役に立ちませんでした。
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
結果:wgetは機能しますが、apt-getアップデートは機能しません。誰かが理由を明確にすることができますか?ありがとうございます。
答え1
ルールと要件をブロックごとに見てみましょう。基本的なポリシーがあるため、DROP
最終ルールは必要ありません。 (それでも悪い考えではありません。)
SSHを除くすべてをブロックしてみました。だから
wget
何もダウンロードできないと予想していましたが、apt-get update
(予想どおり)動作することもできないかもしれません。
ルールを入力してください:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
つまり、発信接続に関連するすべてのトラフィックが許可されます。 tcp/22 (たとえば ) へのインバウンドssh
も許可されます。他のすべては捨てなければなりません。これには出てきて要請するのに邪魔になるものはありませんのでご参考wget
くださいapt-get update
。
出力ルール:
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -j DROP
これは、以前に許可されたインバウンド接続に関連するすべてのトラフィックが許可されることを意味します。宛先 tcp/22 (たとえば tcp/22 ssh
) へのすべてのアウトバウンドも許可されます。結局、他のものはすべて捨てなければなりません。
観察結果:
アウトバウンドセクションのいかなるアイテムもあなたまたは要求wget
をapt-get update
許可しません。したがってwget
、機能している場合に使用しているサンプルコマンドを提供してください。 (たとえば、対応する各プロトコルのプロキシを定義するなど、set | grep _proxy
1つ以上の定義を表示できます。)http_proxy
しかし、推奨されるアプローチiptables
は、すべてのループバックトラフィックを許可することです。次の2つのコマンドを使用してこれを実行できます。
iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT