web-dev-qa-db-ja.com

安全なNAT iptablesを使用したセットアップ

インターネットゲートウェイとして機能する必要のあるDebian実行デバイスがあります。その上、インバウンドトラフィックだけでなくアウトバウンドトラフィックもブロックするファイアウォールを提供したいと思います。そして、私はiptablesがその仕事をすることができるはずだと考えました。

問題:NATを適切に構成しました(私は思いますか?)が、デフォルトのポリシーをたとえば、ドロップしてルールを追加すると、LAN内からのHTTPトラフィックが許可され、HTTPは通過しません。したがって、基本的に私のルールは機能していないようです。

以下は、iptablesに使用する初期化スクリプトです。デバイスには、それぞれeth0(WANインターフェイス)とeth1(LANインターフェイス))の2つのNICがあります。

echo 1 > /proc/sys/net/ipv4/ip_forward

# Flush tables
iptables -F
iptables -t nat -F

# Set policies
iptables -P INPUT DROP
iptables -P OUTPUT DROP

# NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow outbound HTTP from LAN? 
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

誰かがこれに光を当てることができますか?

解決済み:マイクはHTTPトラフィックをテストするためにドメイン名の代わりにtelnetとIPを使用することを提案しました、そしてそれは2つの発見につながりました:DNSが正しく機能していませんでしたアウトバウンドフィルタリングも機能していませんでした(ポート8080にtelnetできました)。

そこでまず、LANクライアントがゲートウェイのサービス(DNSなど)を使用できるようにするルールを追加しました。 (はい、心配しないでください。これを提供されるサービスに絞り込みます)

iptables -A INPUT -i eth1 -d 172.16.0.1 -j ACCEPT
iptables -A OUTPUT -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

あなたは私が今DNS要求をすることができると思うでしょう。実際には可能でしたが、ゲートウェイがDNS要求自体を実行できなかったため、要求はタイムアウトしていました。アウトバウンドDNSのルールが追加されました。

iptables -A OUTPUT -o eth0 -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT

最後に、FORWARDチェーンのデフォルトポリシーをDROPに設定しました。そして、私たちは正方形に戻りました。

既存の接続にインバウンドトラフィックを許可することを提案するRamの返信を見たとき、私は更新を投稿しようとしていました。上記のOUTPUTチェーンにもこの原則を適用しました。

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

だから今、それは私が望むように正確に機能しているようです。 ここに完全なスクリプト 。ありがとう!

5
TheBigB

アウトバウンドリクエストへの返信を許可する必要があります。

3
Ram

コメントへの返信を受け取った後、これを回答として追加するつもりでしたが、あなたは私の考えに従ったようです...内部インターフェイスでDNSが許可されていないことに気づきました。あなたのサービスで頑張ってください。

2
Mike Pennington