其它規則網絡
- 當基本firewalld語法規則不能知足要求時,能夠使用如下更復雜的規則
- rich-rules 富規則,功能強,表達性語言
- Direct configuration rules 直接規則,靈活性差
- 幫助:man 5 firewalld.direct
管理rich規則ssh
- rich規則比基本的firewalld語法實現更強的功能,不只實現容許/拒絕,還能夠實現日誌syslog和auditd,也能夠實現端口轉發,假裝和限制速率
- rich語法:
rulecurl
[source]
[destination]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
[accept|reject|drop]
man 5 firewalld.richlanguagetcp
- man 5 firewalld.richlanguage
規則url
- 規則實施順序:
- 該區域的端口轉發,假裝規則
- 該區域的日誌規則
- 該區域的容許規則
- 該區域的拒絕規則
- 每一個匹配的規則生效,全部規則都不匹配,該區域默認規則生效
rich規則選項spa
rich規則示例ssr
- 拒絕從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‘debug
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'server
- 接受全部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