web-dev-qa-db-ja.com

特定のポートのIptables例外

私はiptablesを初めて使用しますが、今日はラスピアンで簡単なナッティングを構成しました。

# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i eth2 -o tun0 -j ACCEPT

# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

# Don't forward from the outside to the inside.
/sbin/iptables -A FORWARD -i tun0 -o tun0 -j REJECT

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

ご覧のとおり、openvpnを使用して、トラフィックをトンネルインターフェースにリダイレクトします。たとえば、ポート範囲900〜999とソース192.168.1.5を除外して、インターフェイスeth1に直接送信し、VPN暗号化を回避するための例外を作成したいと思います。

どうすればそのようなルールを作成できますか?

ご意見ありがとうございます。

編集:私は次のようなものを試しました

iptables -t nat -A POSTROUTING -p tcp --dport 900:999 --out-interface eth1 -j MASQUERADE

しかし、それは期待された効果を持っていないようです...

2
Nenzo

特定のトラフィックごとにルーティングテーブルを設定するには、ポリシールーティングが必要になります。 Linux Advanced Routing Mini HOWTO で簡潔で良い例を見つけました。

/etc/iproute2/rt_tablesに次の行を入力します。

1 DIRECT

次に、次のようにすることができます。

iptables -t mangle -A PREROUTING -p tcp --dport 900:999 -j MARK --set-mark 1
ip route add default via <gateway address> dev eth1 table DIRECT
ip rule add from all fwmark 1 table DIRECT
ip rule add from 192.168.1.5/32 table DIRECT
2
yaegashi