ファイアウォールでPOSTROUTING / SNATを使用する方法は?

ファイアウォールでPOSTROUTING / SNATを使用する方法は?

以下の説明に従って、CentOS-7-Routerでファイアウォールを使用してSNATを設定しようとしました。ここ、で補足カールルーパーズは説明したしかし、私は結局好きになりました。エリック。他のドキュメントも読みましたが、うまく機能しなかったため、クライアントIPが別のソースIPに変換されました。

両方

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -p tcp -o enp1s0 -d 192.168.15.105 -j SNAT --to-source 192.168.25.121

または

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -p tcp -s 192.168.15.105/32 -j SNAT --to-source 192.168.25.121

「成功」を提供します。firewall-cmd --reload後で一つ作りましょう。ところで、表を確認してみるとiptables -t nat -nvL POSTROUTINGルールが出ていません。

ただし、上記のルールのいずれかを再適用すると、ファイアウォールが警告します。たとえば、Warning: ALREADY_ENABLED: rule '['-p', 'tcp', '-o', 'enp1s0', '-d', '192.168.15.105', '-j', 'SNAT', '--to-source', '192.168.25.121']' already is in 'ipv4:nat:POSTROUTING'送信元 IP 192.168.15.105 を 192.168.45.121 に偽装する SNAT 機能は機能しません。

誰かが私が間違っていることを説明してもらえますか?


数時間苦労しても、まだDNAT / SNATに閉じ込められています。今はiptablesだけを使います。

1.) iptables -t nat -A PREROUTING -p tcp --dport 1433 -i enp1s0 -d 192.168.25.121 -j DNAT --to-destination 192.168.15.105

そして

2.) iptables -t nat -A POSTROUTING -p tcp --sport 1433 -o enp1s0 -s 192.168.15.105/32 -j SNAT --to-source 192.168.25.121

したがって、次のようにiptables -t nat -nvL PREROUTING表示されます。

pkts bytes target     prot opt in     out     source               destination         
129 12089 PREROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
129 12089 PREROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
129 12089 PREROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
0     0 DNAT       tcp  --  enp1s0 *       0.0.0.0/0            192.168.25.121       tcp dpt:1433 to:192.168.15.105

そして

iptables -t nat -nvL POSTROUTING示す:

 pkts bytes target     prot opt in     out     source               destination         
   97  7442 POSTROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   97  7442 POSTROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   97  7442 POSTROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 SNAT       tcp  --  *      enp1s0  192.168.15.105       0.0.0.0/0            tcp spt:1433 to:192.168.25.121

すべて完了しました。より良い説明は次のとおりです。
-https://wiki.ubuntuusers.de/iptables2
-https://netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html
-https://serverfault.com/questions/667731/centos-7-firewalld-remove-direct-rule

しかし、まだiptraf-ngリストされています。 ここに画像の説明を入力してください。

内部インタフェースから外部インタフェースへのip_forwardingの前(または後)にPREROUTING(またはPOSTROUTING)は行われませんか?

答え1

#!/bin/bash
# Assuming that your Linux box has two NICs; eth0 attached to WAN and eth1 attached to LAN
# eth0 = outside
# eth1 = inside
# [LAN]----> eth1[GATEWAY]eth0 ---->WAN
# Run the following commands on LINUX box that will act as a firewall or NAT gateway
firewall-cmd --query-interface=eth0
firewall-cmd --query-interface=eth1
firewall-cmd --get-active-zone 
firewall-cmd --add-interface=eth0 --zone=external
firewall-cmd --add-interface=eth1 --zone=internal
firewall-cmd --zone=external --add-masquerade --permanent 
firewall-cmd --reload 
firewall-cmd --zone=external --query-masquerade 
# ip_forward is activated automatically if masquerading is enabled.
# To verify:
cat /proc/sys/net/ipv4/ip_forward 
# set masquerading to internal zone
firewall-cmd --zone=internal --add-masquerade --permanent
firewall-cmd --reload 
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --reload

答え2

ここにも同様の答えがあります。

https://www.server-world.info/en/note?os=CentOS_7&p=firewalld&f=2

nmcliを使用した内部/外部設定:

nmcli c mod ens224 connection.zone internal
nmcli c mod ens192 connection.zone external

しかし、おめでとう答えはより有益です。まだファイアウォールに慣れていないので、デフォルト/ iptables提案を使い始めました。Linuxをゲートウェイとして使用するには? Firewalld のデフォルト設定は IP チェーンの使用方法が異なるため、常に Firewalld を使用するのが最善です。

プレビューを提供してくれたitraf-ngに感謝します。@jochen-gebsattelこれは非常に小さなプログラムです。

関連情報