1. 程式人生 > 實用技巧 >CENTOS 7 firewalld詳解,新增刪除策略

CENTOS 7 firewalld詳解,新增刪除策略

一、CENTOS7中FIREWALL防火牆

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 修改防火牆配置檔案之前,需要對之前防火牆【/etc/firewalld/zones/public.xml】做好備份 重啟防火牆後,需要確認防火牆狀態和防火牆規則是否載入,若重啟失敗或規則載入失敗,則所有請求都會被防火牆。 1.firewall-cmd --state#檢視firewall的狀態 firewall-cmd --list-all#檢視防火牆規則(只顯示/etc/firewalld/zones/public.xml中防火牆策略)
firewall-cmd --list-all-zones#檢視所有的防火牆策略(即顯示/etc/firewalld/zones/下的所有策略) firewall-cmd --reload#重新載入配置檔案 2、關閉firewall: systemctl stop firewalld.service#停止firewall systemctl disable firewalld.service#禁止firewall開機啟動 firewall-cmd --state#檢視預設防火牆狀態(關閉後顯示notrunning,開啟後顯示running) 3、firewalld的基本使用 啟動: systemctl start firewalld
檢視狀態: systemctl status firewalld 停止: systemctl disable firewalld 禁用: systemctl stop firewalld 4.systemctl是CentOS7的服務管理工具中主要的工具,它融合之前service和chkconfig的功能於一體。 啟動一個服務:systemctl start firewalld.service 關閉一個服務:systemctl stop firewalld.service 重啟一個服務:systemctl restart firewalld.service 顯示一個服務的狀態:systemctl status firewalld.service
在開機時啟用一個服務:systemctlenablefirewalld.service 在開機時禁用一個服務:systemctl disable firewalld.service 檢視服務是否開機啟動:systemctl is-enabled firewalld.service 檢視已啟動的服務列表:systemctl list-unit-files|grepenabled 檢視啟動失敗的服務列表:systemctl --failed 5.配置firewalld-cmd 檢視版本: firewall-cmd --version 檢視幫助: firewall-cmd --help 顯示狀態: firewall-cmd --state 檢視所有開啟的埠: firewall-cmd --zone=public --list-ports 更新防火牆規則: firewall-cmd --reload 檢視區域資訊: firewall-cmd --get-active-zones 檢視指定介面所屬區域: firewall-cmd --get-zone-of-interface=eth0 拒絕所有包:firewall-cmd --panic-on 取消拒絕狀態: firewall-cmd --panic-off 檢視是否拒絕: firewall-cmd --query-panic

二、防火牆配置檔案

[root@node ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
INPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0           
INPUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
INPUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
FORWARD_direct  all  --  0.0.0.0/0            0.0.0.0/0           
FORWARD_IN_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
FORWARD_IN_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
FORWARD_OUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
FORWARD_OUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
OUTPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD_IN_ZONES (1 references)
target     prot opt source               destination         
FWDI_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto] 
FWDI_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto] 

Chain FORWARD_IN_ZONES_SOURCE (1 references)
target     prot opt source               destination         

Chain FORWARD_OUT_ZONES (1 references)
target     prot opt source               destination         
FWDO_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto] 
FWDO_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto] 

Chain FORWARD_OUT_ZONES_SOURCE (1 references)
target     prot opt source               destination         

Chain FORWARD_direct (1 references)
target     prot opt source               destination         

Chain FWDI_public (2 references)
target     prot opt source               destination         
FWDI_public_log  all  --  0.0.0.0/0            0.0.0.0/0           
FWDI_public_deny  all  --  0.0.0.0/0            0.0.0.0/0           
FWDI_public_allow  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           

Chain FWDI_public_allow (1 references)
target     prot opt source               destination         

Chain FWDI_public_deny (1 references)
target     prot opt source               destination         

Chain FWDI_public_log (1 references)
target     prot opt source               destination         

Chain FWDO_public (2 references)
target     prot opt source               destination         
FWDO_public_log  all  --  0.0.0.0/0            0.0.0.0/0           
FWDO_public_deny  all  --  0.0.0.0/0            0.0.0.0/0           
FWDO_public_allow  all  --  0.0.0.0/0            0.0.0.0/0           

Chain FWDO_public_allow (1 references)
target     prot opt source               destination         

Chain FWDO_public_deny (1 references)
target     prot opt source               destination         

Chain FWDO_public_log (1 references)
target     prot opt source               destination         

Chain INPUT_ZONES (1 references)
target     prot opt source               destination         
IN_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto] 
IN_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto] 

Chain INPUT_ZONES_SOURCE (1 references)
target     prot opt source               destination         

Chain INPUT_direct (1 references)
target     prot opt source               destination         

Chain IN_public (2 references)
target     prot opt source               destination         
IN_public_log  all  --  0.0.0.0/0            0.0.0.0/0           
IN_public_deny  all  --  0.0.0.0/0            0.0.0.0/0           
IN_public_allow  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           

Chain IN_public_allow (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  172.17.134.13        0.0.0.0/0            tcp dpt:2181 ctstate NEW
ACCEPT     all  --  172.17.134.13        0.0.0.0/0           
ACCEPT     all  --  172.17.172.236       0.0.0.0/0         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22 ctstate NEW
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8715 ctstate NEW
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 ctstate NEW

Chain IN_public_deny (1 references)
target     prot opt source               destination         

Chain IN_public_log (1 references)
target     prot opt source               destination         

Chain OUTPUT_direct (1 references)
target     prot opt source               destination 

[root@node ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <port protocol="tcp" port="8715"/>
  <port protocol="tcp" port="80"/>
  <rule family="ipv4">
    <source address="172.17.134.13"/>
    <port protocol="tcp" port="2181"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="172.17.134.13"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="172.17.172.236"/>
    <accept/>
  </rule>
</zone>

三、CENTOS7的FIREWALLD開啟埠/IP、遮蔽IP

1 2 3 4 5 6 7 8 9 10 11 12 13 14 開啟防火牆:systemctl start firewalld 檢視開放的埠和服務以及遮蔽的IP:firewall-cmd --zone=public --list-all 檢視系統中檢視系統中可用的服務:firewall-cmd --get-services 新增埠:firewall-cmd --zone=public --add-port=8080/tcp--permanent (--permanent永久生效,沒有此引數重啟後失效) 檢視:firewall-cmd --zone= public --query-port=80/tcp 新增埠段:firewall-cmd --zone=public --add-port=5060-5061/udp--permanent 新增IP+埠:firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="0.0.0.0/24" port protocol="tcp" port="10050" accept" 刪除埠:firewall-cmd --permanent --zone=public --remove-port=8080/tcp 刪除IP+埠:firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="10.0.5.0/24" port protocol="tcp" port="10050" accept" 遮蔽IP(reject):firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=43.229.53.61 reject" 遮蔽IP(drop) : firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address='x.x.x.x/24' drop" 熱載入才能生效:firewall-cmd --reload 檢視遮蔽結果:firewall-cmd --list-rich-rules 因為在/usr/lib/firewalld/services/中事先定義了ssh.xml的相應的規則

四、FIREWALLD防火牆 禁止/限制 特定使用者的IP訪問,DROP和REJECT區別

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1.drop禁止特定ip連線ssh/22服務 firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address='x.x.x.x/24' service name='ssh' drop" firewall-cmd --reload##重新載入防火牆配置,不然firewall-cmd --list-all-zones不會顯示剛加上的規則 2.reject禁止特定ip連線ssh/22服務 firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='x.x.x.x/24' service name='ssh' reject" firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='x.x.x.x/24' port port=22 protocol=tcp reject" firewall-cmd --reload 3.accept執行特定ip連線ssh/22服務 firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address='x.x.x.x/24' port port=22 procotol=tcp accept" firewall-cmd --reload 防火牆內的策略動作有DROP和REJECT兩種,區別如下: 1、DROP動作只是簡單的直接丟棄資料,並不反饋任何迴應。需要Client等待超時,Client容易發現自己被防火牆所阻擋。 2、REJECT動作則會更為禮貌的返回一個拒絕(終止)資料包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明確的拒絕對方的連線動作。連線馬上斷開,Client會認為訪問的主機不存在。REJECT在IPTABLES裡面有一些返回引數, 引數如下:ICMP port-unreachable、ICMPecho-reply 或是 tcp-reset(這個封包會要求對方關閉聯機),進行完此處理動作後,將不再比對其它規則,直接中斷過濾程式。 至於使用DROP還是REJECT更合適一直未有定論,因為的確二者都有適用的場合。REJECT是一種更符合規範的處理方式,並且在可控的網路環境中,更易於診斷和除錯網路/防火牆所產生的問題;而DROP則提供了更高 的防火牆安全性和稍許的效率提高,但是由於DROP不很規範(不很符合TCP連線規範)的處理方式,可能會對你的網路造成一些不可預期或難以診斷的問題。因為DROP雖然單方面的中斷了連線,但是並不返回任何拒絕資訊,因 此連線客戶端將被動的等到tcp session超時才能判斷連線是否成功,這樣早企業內部網路中會有一些問題,例如某些客戶端程式或應用需要IDENT協議支援(TCP Port 113, RFC 1413),如果防火牆未經通知的應用了DROP規則 的話,所有的同類連線都會失敗,並且由於超時時間,將導致難以判斷是由於防火牆引起的問題還是網路裝置/線路 故障。 一點個人經驗,在部署防火牆時,如果是面向企業內部(或部分可信任網路),那麼最好使用更紳士REJECT方法,對於需要經常變更或除錯規則的網路也是如此;而對於面向危險的Internet/Extranet的防火牆,則有必 要使用更為粗暴但是安全的DROP方法,可以在一定程度上延緩******的進度(