私は複数のイーサネットポート(DHCPを含むさまざまなサーバータスクを実行します)と、各ポートにLANを備えたDebian / Squeezeを実行する常時稼働中のコンピュータを持っています。
eth0 は 192.168.7.* にあり、192.168.7.1 にある LAN のゲートウェイ (NAT 変換 DSL ルーター) 経由でインターネット (および残りの「オフィス LAN」) にアクセスできます。
eth1 は 192.168.1.* にあります。私は192.168.1.* LANのすべての人が外部インターネット、DHCPにのみアクセスでき、192.168.1.* LANの他のすべてにアクセスできるようにシステムを構成する迅速で簡単でDebianに優しい方法を探しています。 192.168.7.*。
適切なiptablesルールセットを使用すると、可能であると確信しています。疑われる人は、次のいずれかを探しています。
- 上記の目標を達成するためにiptablesを設定する方法についての簡単なガイドです(これをやろうとする最初の人ではありません)。
- これを行うことができるユーザーフレンドリーなファイアウォール構成ソフトウェアを指摘しました(ただし、eth0の終わりと192.168.7。*ネットワークをまったくロックしたくないことに注意してください)。
- この目的のために特別に設計されたソフトウェアを提案します。私はインターネットカフェなどについて私が望むものと同様の機能を達成するように設計されたいくつかのパッケージがあると思いますが、どこから探すべきか、これらのパッケージが過剰であるかわかりません。 。
Debian Squeeze(またはWheezy)のすべてのツールはすでに大きな利点を持っています。
答え1
これはiptablesを使用して簡単に行うことができます。以下、「wan-iface」は、WAN 接続が確立されたインターフェイスです。接続方法によってはeth2、ppp0などになります。また、編集でイーサネットインターフェイスの名前を変更することもできます/etc/udev/rules.d/70-persistent-net.rules
。これは、イーサネットインターフェイスが複数ある場合に強くお勧めします。-i lan
それよりはるかに明確です-i eth0
。
init.dスクリプトを作成して起動時にこれらのルールを適用したり、iptables-pertantパッケージを使用したりできます。あるいは、さまざまなファイアウォールルールジェネレータをパッケージ化しました(私はしばしば奇妙なことをしたいので、個人的にiptablesルールを直接書いています)。
既存のルールにまだ適用されていない場合は、NAT ルールが必要です。
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wan-iface -j SNAT --to-source external-ip
external-ip は物理 IP アドレスです。動的項目がある場合は、行を次に変更します。
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wan-iface -j MASQUERADE
その後、トラフィックを許可するにはファイアウォールルールが必要です。基本的な転送がDROPかどうかに応じて、ここに2つのことを提供します。それしなければならない落ちますが…
iptables -A FORWARD -i eth1 -o wan-iface -j ACCEPT # default is drop
iptables -A FORWARD -i eth1 ! -o wan-iface -j DROP # default is accept
これでDHCPを許可するだけです。ファイアウォールがDHCPを実行していてDNSがWANにあるとします(そうでない場合は、ファイアウォールがDNSサーバーと通信できるようにする必要があります)。
iptables -A INPUT -i eth1 -p udp --dport bootps -j ACCEPT
iptables -A INPUT -i eth0 -j DROP # only if your default isn't drop
私はこれが最小限の構成だと思います。インターネットトラフィックを制限することもできます。たとえば、上記のFORWARDルールの代わりにWebを閲覧したい場合は、次のことができます(WANのDNSも想定)。
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport domain -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p udp --dport domain -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport http -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport https -j ACCEPT
iptables -A FORWARD -i eth1 -j DROP # only if default is accept
上記では、ドメイン(DNSの場合はTCPとUDP)、http(TCP)、およびhttps(TCP)の3つのポートが許可されています。
編集する:
説明のために:
現在、このボックスにはNATが発生していないようです。また、WAN インターフェイスがなく、トラフィックは LAN を通過します。最適な設定ではありませんが、実行可能です。
LAN(eth0) にある Debian コンピュータの IP アドレスを意味するために "lan-ip" を使います。ゲストネットワーク(eth1)の同じボックスのIPアドレスを意味するために「guest-ip」を使用します。
この記事を書いた時点で、私はあなたのインターフェース名が混乱しているので、あなたが私のアドバイスを受け入れ、インターフェース名を「lan」(eth0)と「guest」(eth1)に変更したとします。そうでない場合は、検索と置換を実行できます。
現在、このコンピュータにルーティングやファイアウォールが設定されていないようです。追加するルールだけでなく、ルール全体を提供します。もちろん、追加する必要があるかもしれません。
IP転送を有効にする必要があります(これを行うには/etc/sysctl.confを編集します)。そして、同じファイルでリバースパスフィルタをオンにします。
eth1ネットワークでサービスを提供するには、DHCPを構成する必要があります。提供されるデフォルトゲートウェイ(eth1ゲストネットワークのみ)はguest-ipである必要があります。いいえ192.168.7.1。
NATのルールは少し異なって見えます。しないで192.168.7.1でやればいいのですが、それは不可能だと思います。可能であれば、このnatルールをスキップして7.1に追加し、lan-ip経由で192.168.1.0/24にパスを追加してください。
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o lan -j SNAT --to-source lan-ip
現在ファイアウォールが設定されていないため、デフォルトは拒否です。一般的に言えば、これが作業を実行する最も安全な方法です。
iptables -P INPUT DROP # default for traffic to firewall (this box)
iptables -P FORWARD DROP # default for forwarded traffic
iptables -F # clear rules
iptables -X # delete custom chains
iptables -t nat -F # same, but for nat table
iptables -t nat -X
iptables -A INPUT -i lo -j ACCEPT # let the box talk to itself. Important.
この時点では、ボックスに完全にアクセスできません。あなたが望むものではありません。次のいくつかの規則でこの問題を解決できます。最初の 2 つは接続トレースを確立し、既存の接続に属するか、または密接に関連するパケットを許可します。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
それでは、オフィスLANのコンピュータを信頼し、そのコンピュータからのすべてのトラフィックを許可するとします。必要に応じて、これをより制限的なルールに変更できます。 FORWARDルールを使用すると、ゲストネットワーク上のコンピュータにアクセスできます。~からオフィスLAN。必要でない場合は無視してください。
iptables -A INPUT -i lan -j ACCEPT
iptables -A FORWARD -i lan -o guest -j ACCEPT
今すぐゲストネットワークのいくつかのトラフィックを許可します。まず、DHCPを許可する必要があります。
iptables -A INPUT -i guest -p udp --dport bootps -j ACCEPT # dhcp
次に、あなたはあなたのプライベートネットワークへのゲストアクセスを許可したくないと仮定します。したがって、すべてのゲストトラフィックをRFC1918(プライベート)スペースにドロップします。
iptables -A FORWARD -i guest -d 10.0.0.0/8 -j DROP
iptables -A FORWARD -i guest -d 172.16.0.0/12 -j DROP
iptables -A FORWARD -i guest -d 192.168.0.0/16 -j DROP
すべての個人用アドレス空間を提供したので、残りは公開されます。だから許可してください。この言葉は少し怖いです。前の単語がないと問題になります。
iptables -A FORWARD -i guest -o lan -j ACCEPT
もちろん、特定のプロトコルとポートに制限することもできます(例:Web検索のみ)。
ドロップされたパケットなどを記録するルールを追加することもできます。