CENTOS 7 firewalld詳解,新增刪除策略
阿新 • • 發佈:2020-12-22
一、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
在開機時啟用一個服務:systemctl enable firewalld.service
在開機時禁用一個服務:systemctl disable firewalld.service
檢視服務是否開機啟動:systemctl is-enabled firewalld.service
檢視已啟動的服務列表:systemctl list-unit-files| grep enabled
檢視啟動失敗的服務列表: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、ICMP echo -reply 或是 tcp-reset(這個封包會要求對方關閉聯機),進行完此處理動作後,將不再比對其它規則,直接中斷過濾程式。
至於使用DROP還是REJECT更合適一直未有定論,因為的確二者都有適用的場合。REJECT是一種更符合規範的處理方式,並且在可控的網路環境中,更易於診斷和除錯網路/防火牆所產生的問題;而DROP則提供了更高
的防火牆安全性和稍許的效率提高,但是由於DROP不很規範(不很符合TCP連線規範)的處理方式,可能會對你的網路造成一些不可預期或難以診斷的問題。因為DROP雖然單方面的中斷了連線,但是並不返回任何拒絕資訊,因
此連線客戶端將被動的等到tcp session超時才能判斷連線是否成功,這樣早企業內部網路中會有一些問題,例如某些客戶端程式或應用需要IDENT協議支援(TCP Port 113, RFC 1413),如果防火牆未經通知的應用了DROP規則
的話,所有的同類連線都會失敗,並且由於超時時間,將導致難以判斷是由於防火牆引起的問題還是網路裝置/線路 故障。
一點個人經驗,在部署防火牆時,如果是面向企業內部(或部分可信任網路),那麼最好使用更紳士REJECT方法,對於需要經常變更或除錯規則的網路也是如此;而對於面向危險的Internet /Extranet 的防火牆,則有必
要使用更為粗暴但是安全的DROP方法,可以在一定程度上延緩******的進度(
|