firewalld
CentOS-7
CentOS 7 default to firewalld.
It's not recommended to install iptables, please use firewalld
yum install iptables system-config-firewall-tui setuptool
firewalld default XML directory /usr/lib/firewalld and /etc/firewalld
=====================================================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:
因為eth0是內網, 所以我想把eth0改到trusted(信任區域):
[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
public
interfaces: eth1
trusted
interfaces: eth0
最後, 開啟NAT功能:)
[root@c7 ~]# firewall-cmd --zone=public --add-masquerade
success
firewalld也支援"rich-rules", 也就是更詳細的規則設定
這個後面另外再寫一篇來介紹.
這些設定都是runtime的, 也就是說只在下了指令後生效, 並不會被儲存.
如果要儲存的話, 需要在指令後面加上 --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名稱, 而必須是網路介面的裝置名稱.
在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名稱, 而必須是網路介面的裝置名稱.
留言