IPTABLES と VBox によるポート転送

IPTABLES と VBox によるポート転送

Ubuntu で iptables を適切に構成するのに少し問題があります。しかし、その前にネットワーク構成について説明させてください。

私は、192.168.1.0/24 サブネットを提供するモデム + ルーター + DHCP で終端された xDSL 回線を使用しています。私のラップトップと PC はこのネットワークに接続されており、それぞれ 192.168.1.6 と 192.168.1.3 のアドレスを取得しています。PC では、VBox と 2 つの仮想マシン (両方とも Ubuntu) で Ubuntu を実行しています。PC の vboxnet0 インターフェイスには IP 10.10.10.1 が割り当てられ、個々の仮想マシンには 10.10.10.10 と 10.10.10.11 が割り当てられています。VM1 はテスト目的で Apache Web サーバーを実行しています。

これで、私の PC (192.168.1.3) から、ブラウザにアドレスを入力して、10.10.10.10 にある VM1 Apache ホスト Web サイトにアクセスできます。問題はありません。

しかし、ブラウザのアドレス バーに同じ 10.10.10.10 と入力して、ラップトップ (192.168.1.6) から同じ Web サイトにアクセスできるようにしたいのですが、うまくいきません。何らかの理由でネットワークを通過できません。192.168.1.x ネットワークでは IP アドレスが不明なようです。iptables 経由で簡単に設定できる方法があれば、素晴らしいスタートになるでしょう。

さて、その手順が可能な場合は、さらに複雑な設定を構成できるようにしたいと思います。192.168.1.3 アドレスと適切なポート アドレスを使用して、特定のサービス要求を適切な VM インスタンスに転送できるようにしたいと思います。たとえば、192.168.1.3:80 は VM1 に移動し、Apache でホストされている Web サイトを取得します。192.168.1.3:4000 (例) は VM2 に移動し、そこでホストされている SFTP サービスを取得します。つまり、PC 上で宛先ポート固有のルーティングを実行して、192.168.1.x ネットワークに接続されているコンピューターと 10.10.10.x ネットワークで実行されている VM 間の双方向通信を可能にしたいと思います。iptables を使用して、これを簡単に解決できる方法はありますか?

これは私がこれまでに作り上げた例ですが、転送を正しく機能させることがまだできていません。ここにはたくさんのエラーがあると思います。iptables を使い始めたのは今日が初めてです。

clear
# cleaning Firewall Rules , change ACCEPT to DROP if you want to shield
# the server, then you open ports as you need
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Accepts all established inbound connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# opening INPUT ports (22,80,8080)
iptables -A INPUT --protocol tcp --dport 22 -j ACCEPT && echo "rule input 22 ok"
iptables -A INPUT --protocol tcp --dport 80 -j ACCEPT && echo "rule input 80 ok"
iptables -A INPUT --protocol tcp --dport 443 -j ACCEPT && echo "rule input 443 ok"
iptables -A INPUT --protocol tcp --dport 8080 -j ACCEPT && echo "rule input 8080 ok"

#allow Loopback and networks
iptables -A INPUT -i lo -j ACCEPT  && echo "rule 7 ok"
#Accept any input from 10.10.10.0 network in vboxnet0 interface
iptables -A INPUT -s 10.10.10.0/24  -i vboxnet0 -j ACCEPT  && echo "rule 8 ok"

#enable Port forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# Opening PREROUTING - Filtering : this make the port forwarding trick.
# Forward as many ports you want to certain machines of the network to provide services such web server, ftp server, etc...
iptables -t nat -A PREROUTING -p tcp -i eth1 -d 192.168.1.0/24 --dport 8080 -j DNAT --to 10.10.10.10:80  && echo "rule 9 ok"
#iptables -t nat -A PREROUTING -p tcp -i eth1 -d xxx.xxx.xxx.xxx --dport 53 -j DNAT --to 10.10.10.14:53  && echo "rule 10 ok"
#iptables -t nat -A PREROUTING -p udp -i eth1 -d xxx.xxx.xxx.xxx --dport 53 -j DNAT --to 10.10.10.14:53  && echo "rule 11 ok"
#iptables -t nat -A PREROUTING -p udp -i eth1 -d xxx.xxx.xxx.xxx --dport 21 -j DNAT --to 10.10.10.16:21  && echo "rule 12 ok"

#Opening FORWARD ports for network services on vlan
iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 80 -j ACCEPT && echo "rule 13 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 21 -j ACCEPT  && echo "rule 14 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 68 -j ACCEPT  && echo "rule 15 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 22 -j ACCEPT  && echo "rule 16 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 53 -j ACCEPT && echo "Rule 17 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p udp --dport 53 -j ACCEPT && echo "Rule 18 ok"

# Opening POSTROUTING PROCESSES
# Netmasking is absolutelly necesary to protect vlan from attacks, only it hides their ip....
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE  && echo "rule 19 ok"

# Reject all other inbound - default deny unless explicitly allowed policy
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

# test and display the rules if runs properly
iptables -L

ご協力ありがとうございます

マレク

答え1

まず、VirtualBox でブリッジ ネットワークを使用するより簡単なセットアップを検討する必要があります。これにより、VM が LAN に直接配置されるため、VM は 192.168.1.0/24 アドレスを取得し、LAN 上の他のマシンから直接アクセスできるようになります。

DNAT ルールは正しいように見えますが、FORWARD チェーンでブロックされているのではないかと思います。NAT されたパケットは依然として FORWARD チェーンを通過する必要があるため、次のような方法でそこで受け入れられる必要があります。

iptables --append FORWARD --in-interface eth1 --out-interface vboxnet0 --destination 10.10.10.10 --protocol tcp --dport 80 --jump ACCEPT

ただし、NAT ルールが機能している間は、FORWARD チェーンをデフォルトで ACCEPT に設定することをお勧めします。NAT が機能したら、FORWARD チェーンの制限を開始します。

関連情報