私は特定のコンピュータに3つの別々のインターフェイスがある状況にあります。接続されている各ネットワークは、サーバーが(ネットワークベースのルーティング/ファイアウォールを介して)特定のサービスのみを提供できるようにします。明らかに、クライアントはさまざまなサブネットから接続でき、ネットワークファイアウォールを使用してクライアントへのアクセスを制御します。
管理インターフェイスはSSHトラフィックを許可しますが、クライアントが接続するには、デフォルトルートを管理ネットワークのゲートウェイに設定する必要があります。これは SSH を中心に機能しますが、本番インターフェイスを介してのみ許可される HTTP サービスを中断します。 3番目のインターフェイスはバックアップインターフェイスですが、そのインターフェイスへのすべてのトラフィックは同じサブネットにあります。
ルーティングテーブルは次のとおりです。
[root@xxxcpr2 ~]# ip route
10.19.1.0/24 dev eth0 proto kernel scope link src 10.19.1.10
10.18.29.0/24 dev eth1 proto kernel scope link src 10.18.29.25
192.168.5.0/24 dev eth2 proto kernel scope link src 192.168.5.35
default via 10.18.29.1 dev eth1
その中で、eth0は管理インターフェイス、eth1は本番インターフェイス、eth2はバックアップインターフェイスです。
基本的に私が達成したいのは、すべてのポート22トラフィックのデフォルトゲートウェイが管理インターフェイスの外部にルーティングされていることですが、直接接続されているサブネット以外の他のすべてのトラフィックは本番インターフェイスの外部にルーティングする必要があることです。基本的に欲しいものの90%を達成しました。 SSHトラフィックの例外を追加したいです。
私が見つけたこれしかし、私はそれを動作させることはできません。おそらく私の理解が欠けているか、RHELとUbuntuの間にいくつかの違いがあるかもしれません。main
テーブルのデフォルトゲートウェイはすでに本番インターフェイスから出るように設定されているので、私がしたことは次のとおりです。
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ip route add table 22 default via 10.19.1.1
# iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22
# ip rule add fwmark 22 table 22
# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 10.18.29.25
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.19.1.10
私の考えでは、(誰かがこれが間違っていると指摘するかもしれません)、パケットにタグを付けて表22を使用してルールを作成することはうまくいくでしょう(元の投稿がなぜ言及されたのかわかりませんが、SNAT
完全性のためにできるだけ複製するしようとしました)。ただし、main
テーブルのデフォルトパスを変更しない場合は、接続時間が継続します。
基本的に、この時点では私が理解していないか見落としていることを指摘してくれる人が必要です。
答え1
着信SSH接続の場合(接続追跡なし)
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark 22
発信SSH接続の場合(接続追跡なし)
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 22
--port
代わりに、--dport
次のように組み合わせることができます。--sport
接続追跡を使用する方が良い方法かもしれませんが、上記のルールは始めるのに役立ちます。
答え2
着信SSHトラフィックに対して持っている同様の設定に基づくより完全なファイアウォールルールセット。
テストする前に、既存のiptablesルールを更新してください。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp -m multiport --ports 22 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -m multiport --ports 22 -m state --state NEW -j ACCEPT
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
iptables -N MarkThem -t mangle
iptables -t mangle -A OUTPUT -p tcp -m tcp -m multiport --ports 22 -j MarkThem
iptables -t mangle -A PREROUTING -p tcp -m tcp -m multiport --ports 22 -j MarkThem
# May need to filter out local LAN connections here.
# But try without filtering first.
# iptables -t mangle -A MarkThem -s 10.18.29.0/24 -j RETURN
# iptables -t mangle -A MarkThem -s 10.19.1.0/24 -j RETURN
# iptables -t mangle -A MarkThem -s 192.168.5.0/24 -j RETURN
iptables -t mangle -A MarkThem -j MARK --set-mark 22
iptables -t mangle -A MarkThem -j CONNMARK --save-mark
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 10.18.29.25
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.19.1.10
ポート22の送信元または宛先と一致するようにルールを明示的に設定しました。特定の機能が正しく機能すると、ファイアウォールルールを強化できます。
-b
発信SSH接続をテストするときは、バインドアドレスを指定し、オプションで管理アドレスからのトラフィックに対して機能していることを確認することをお勧めします。
SSH -b 10.19.1.10[Eメール保護]