其它規則
- 當基本firewalld語法規則不能滿足要求時,可以使用以下更復雜的規則
- rich-rules 富規則,功能強,表達性語言
- Direct configuration rules 直接規則,靈活性差
- 幫助:man 5 firewalld.direct
管理rich規則
- rich規則比基本的firewalld語法實現更強的功能,不僅實現允許/拒絕,還可以實現日志syslog和auditd,也可以實現端口轉發,偽裝和限制速率
- rich語法:
rule
[source]
[destination]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
[accept|reject|drop]
man 5 firewalld.richlanguage
- man 5 firewalld.richlanguage
規則
- 規則實施順序:
- 該區域的端口轉發,偽裝規則
- 該區域的日志規則
- 該區域的允許規則
- 該區域的拒絕規則
- 每個匹配的規則生效,所有規則都不匹配,該區域默認規則生效
rich規則選項
rich規則示例
- 拒絕從192.168.0.11的所有流量,當address 選項使用source 或 destination時,必須用family= ipv4 |ipv6
firewall-cmd --permanent --zone=classroom --add-rich-rule='rule
family=ipv4 source address=192.168.0.11/32 reject‘
- 限制每分鍾只有兩個連接到ftp服務
firewall-cmd --add-rich-rule=‘rule service name=ftp limit value=2/m accept’
- 拋棄esp( IPsec 體系中的一種主要協議)協議的所有數據包
firewall-cmd --permanent --add-rich-rule='rule protocol value=esp drop'
- 接受所有192.168.1.0/24子網端口5900-5905范圍的TCP流量
firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4
source address=192.168.1.0/24 port port=5900-5905 protocol=tcp accept'
rich日志規則
- log [prefix="<PREFIX TEXT>" [level=<LOGLEVEL>] [limit value="<RATE/DURATION>"]
- <LOGLEVEL> 可以是emerg,alert, crit, error, warning, notice, info, debug.
- <DURATION> s:秒, m:分鍾, h:小時, d:天
- audit [limit value="<RATE/DURATION>"]
rich日志規則實例
- 接受ssh新連接,記錄日志到syslog的notice級別,每分鍾最多三條信息
firewall-cmd --permanent --zone=work --add-rich-rule='rule service
name="ssh" log prefix="ssh " level="notice" limit value="3/m" accept
- 從2001:db8::/64子網的DNS連接在5分鍾內被拒絕,並記錄到日志到audit,每小時最大記錄一條信息
firewall-cmd --add-rich-rule='rule family=ipv6 source
address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300
規則示例
- firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.25.X.10/32 service name="http" log level=notice prefix="NEW HTTP " limit value="3/s" accept'
- firewall-cmd --reload
- tail -f /var/log/messages
- curl http://serverX.example.com
偽裝和端口轉發
- NAT網絡地址轉換,firewalld支持偽裝和端口轉發兩種NAT方式
- 偽裝NAT
- firewall-cmd --permanent --zone=<ZONE>
- firewall-cmd --query-masquerade 檢查是否允許偽裝
- firewall-cmd --add-masquerade 允許防火牆偽裝IP
- firewall-cmd --remove-masquerade 禁止防火牆偽裝IP
- 示例:
- firewall-cmd --add-rich-rule='rule family=ipv4 address=192.168.0.0/24 masquerade'
端口轉發
- 端口轉發:將發往本機的特定端口的流量轉發到本機或不同機器的另一個端口。通常要配合地址偽裝才能實現
- firewall-cmd --permanent --zone=<ZONE> --add-forward-port=port=<PORTNUMBER>:proto=<PROTOCOL>[:toport=<PORTNUMBER>][:toaddr=<IPADDR>] 說明:toport= 和toaddr= 至少要指定一個
- 示例:
- 轉發傳入的連接9527/TCP,到防火牆的80/TCP到public zone 的192.168.0.254
- firewall-cmd --add-masquerade 啟用偽裝
- firewall-cmd --zone=public --add-forward-
- port=port=9527:proto=tcp:toport=80:toaddr=192.168.0.254
rich規則
- rich規則語法:
- forward-port port=<PORTNUM> protocol=tcp|udp [to-port=<PORTNUM>] [to-addr=<ADDRESS>]
- 示例:
- 轉發從192.168.0.0/24來的,發往80/TCP的流量到防火牆的端口8080/TCP
firewall-cmd --zone=work --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 forward-port port=80 protocol=tcp to-port=8080'
rich規則示例
- firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.25.X.10/32 forward-port port=443 protocol=tcp to-port=22'
- firewall-cmd --reload
- ssh -p 443 serverX.example.com