因此設定的方式已經整個不同.
不過iptables還是可以用yum裝回來, 使用方式就跟之前一樣了:
yum install iptables system-config-firewall-tui setuptool
那麼採用新的firewalld, 好處在哪裡?
iptables是直接把rule餵給kernel, 所以有變動都意味著要清除舊有的rule, 再載入新的rule. 這可能會中斷已開啟的連線.
但是firewalld只會送出有變動的部分, 所以通常來說, 已開啟的連線不會被影響.
firewalld的設定檔現在是儲存在 /usr/lib/firewalld 與 /etc/firewalld 裡面的XML檔案, 所以需要設定工具.
firewalld有圖形介面的設定工具, 叫firewall-config
但是原則上我們還是介紹文字介面工具, firewall-cmd
在firewalld裡面, 是把網路分成幾個區域 (zone).
然後針對zone去設定過濾規則.
我們先看預設設定:
[root@c7 ~]# firewall-cmd --get-active-zones
public
interfaces: eth0 eth1
所以目前兩個網卡都是被指定在public(對外區域).
然後看看預設public區域的規則:
[root@c7 ~]# firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
所以public zone開了DHCP跟SSH服務, 沒有指定port, 沒有限制連線來源, 也沒有開啟NAT功能.
DHCP我沒有在用, 所以移掉:
[root@c7 ~]# firewall-cmd --zone=public --remove-service dhcpv6-client
success
[root@c7 ~]# firewall-cmd --zone=trusted --add-interface=eth0
Error: ZONE_CONFLICT
這是因為eth0已經在public zone, 所以要先把eth0從public zone移除, 再加到trsuted zone:
[root@c7 ~]# firewall-cmd --zone=public --remove-interface=eth0
success
[root@c7 ~]# firewall-cmd --zone=trusted --add-interface=eth0
success
或是用change-interface, firewalld會幫你做好:
[root@c7 ~]# firewall-cmd --zone=public --change-interface=eth0
success
檢查一下設定是不是正確:
[root@c7 ~]# firewall-cmd --get-active-zonespublic
interfaces: eth1
trusted
interfaces: eth0
[root@c7 ~]# firewall-cmd --zone=public --add-masquerade
success
firewalld也支援"rich-rules", 也就是更詳細的規則設定
這個後面另外再寫一篇來介紹.
如果要儲存的話, 需要在指令後面加上 --permanent, 才會儲存.
儲存後的rule, 可以reload service來載入:
systemctl reload firewalld
注意: 這裡有一個點, 文件也只有輕輕帶過, 那就是firewall-cmd的zone interface設定, 即使下了--permanent 也不會被儲存, 需要管理者自己去編輯
/etc/sysconfig/network-scripts/ifcfg-(NetworkManager Profile Name)
在裡面加上:
ZONE=(firewalld zone name)
目前看來應該只有文字介面的firewalld有這個問題, GUI介面的firewall-config不會.
(CentOS Bug Tracker: 0007407)
另外, firewalld的介面名稱, 不能是NetworkManager的Profile名稱, 而必須是網路介面的裝置名稱.
最後, 如果你在架設service時發現連到localhost daemon都會有問題的時候, 可以試著把default zone設成trusted看看.
firewall-cmd --set-default-zone=trusted
這個指令一定是permanent的, 所以不用另外寫.
當然要記得把外部的interface設在public喔, 不然這樣一搞變成不設防XD
No comments:
Post a Comment