TShopping

 找回密碼
 註冊
搜索
查看: 1258|回復: 0
打印 上一主題 下一主題

[CentOS] 在 CentOS 8 使用 firewalld 架設 NAT

[複製鏈接]
跳轉到指定樓層
1#
發表於 2022-4-21 16:32:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook
第一篇
https://becoder.org/centos7-firewalld-nat-server/
架設 NAT 需要有兩個網路孔,一個負責 WAN,一個負責 LAN,先修改網卡的 zone 分別為   External (WAN) 跟 Internal (LAN),我的 ens33 負責 WAN,ens34 負責 LAN。

  1. # nmcli c mod ens34 connection.zone internal
  2. # nmcli c mod ens33 connection.zone external
複製代碼



然後確認一下有沒有成功
  1. # firewall-cmd --get-active-zone
複製代碼

WAN 設定 IP masquerad是 IP 偽裝。

  1. # firewall-cmd --zone=external --add-masquerade --permanent
  2. # firewall-cmd --zone=internal --add-masquerade --permanent
  3. # firewall-cmd --reload
複製代碼


檢查一下 ip fordwarding 是否啟用,如果啟用的話結果為 1

  1. # cat /proc/sys/net/ipv4/ip_forward
複製代碼

通過 WAN 的 port 22/tcp 轉發到 WAN 本身的  port 9487/tcp

  1. # firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=9487
  2. # firewall-cmd --list-all --zone=external
複製代碼



通過 WAN 的 port 22/tcp 轉發到 192.168.0.31

  1. # firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=22:toaddr=192.168.0.31
  2. # firewall-cmd --list-all --zone=external
複製代碼


允許封包轉送

  1. # firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o ens33 -j MASQUERADE
  2. # firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens34 -o ens33 -j ACCEPT
  3. # firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens33 -o ens34 -m state --state RELATED,ESTABLISHED -j ACCEPT
  4. # firewall-cmd --reload
複製代碼


重新讀取防火牆設定後,NAT 就完成了。
這一篇沒說明和public的關係

第二篇 http://mikescchen.blogspot.com/2014/09/centos-7_15.html
那麼採用新的firewalld, 好處在哪裡?
iptables是直接把rule餵給kernel, 所以有變動都意味著要清除舊有的rule, 再載入新的rule. 這可能會中斷已開啟的連線.
但是firewalld只會送出有變動的部分, 所以通常來說, 已開啟的連線不會被影響

firewalld的設定檔現在是儲存在 /usr/lib/firewalld 與 /etc/firewalld 裡面的XML檔案, 所以需要設定工具.
firewalld有圖形介面的設定工具, 叫firewall-config
但是原則上我們還是介紹文字介面工具, firewall-cmd

在firewalld裡面, 是把網路分成幾個區域 (zone).
然後針對zone去設定過濾規則.

因為eth0是內網, 所以我想把eth0改到trusted(信任區域):
  1. # firewall-cmd --zone=trusted --add-interface=eth0
複製代碼

Error: ZONE_CONFLICT

這是因為eth0已經在public zone, 所以要先把eth0從public zone移除, 再加到trsuted zone:
#firewall-cmd --zone=public --remove-interface=eth0
success
#firewall-cmd --zone=trusted --add-interface=eth0
success


或是用change-interface, firewalld會幫你做好:
# firewall-cmd --zone=public --change-interface=eth0
success



檢查一下設定是不是正確:
# firewall-cmd --get-active-zones
public
  interfaces: eth1
trusted
  interfaces: eth0


最後, 開啟NAT功能:)
# firewall-cmd --zone=public --add-masquerade
success


這些設定都是runtime的, 也就是說只在下了指令後生效, 並不會被儲存.
如果要儲存的話, 需要在指令後面加上 --permanent, 才會儲存.
儲存後的rule, 可以reload service來載入:
  1. systemctl reload firewalld
複製代碼


注意: 這裡有一個點, 文件也只有輕輕帶過, 那就是firewall-cmd的zone interface設定, 即使下了--permanent 也不會被儲存, 需要管理者自己去編輯
/etc/sysconfig/network-scripts/ifcfg-(NetworkManager Profile Name)
在裡面加上:
ZONE=(firewalld zone name)
目前看來應該只有文字介面的firewalld有這個問題, GUI介面的firewall-config不會.

另外, firewalld的介面名稱, 不能是NetworkManager的Profile名稱, 而必須是網路介面的裝置名稱.

最後, 如果你在架設service時發現連到localhost daemon都會有問題的時候, 可以試著把default zone設成trusted看看.
firewall-cmd --set-default-zone=trusted
這個指令一定是permanent的, 所以不用另外寫.
當然要記得把外部的interface設在public喔, 不然這樣一搞變成不設防XD

第三篇 https://blog.gtwang.org/linux/centos-7-firewalld-command-setup-tutorial/2/
這裡有更完整的介紹

補充
預設情況下 centos並不允許IP轉送
所以要修改 /etc/sysctl.conf 中的
  1. net.ipv4.ip_forward = 0
複製代碼

把0改成1
然後執行
  1. sysctl -p /etc/sysctl.conf
複製代碼

讓此設定生效
文章出處


 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-4-24 12:04 , Processed in 0.046181 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表