1. Firewall直接規則
Firewall提供了“direct interface(直接接口)”,它允許管理員手動編寫的iptables、ip6tables、ebtables規則直接插入到firewall的管理區域中,適用於應用程序,而不是應用程序;直接端口使用firewall-cmd命令中的 --direct選項實現
1)例:卡其黑名單,添加一些規則將某個IP範圍列入黑名單
firewall-cmd --direct --permanent -add-chain ipv4 raw blacklist
\# 使用firewall-cmd命令調用iptables規則參數,在raw表中創建規則鏈“blacklist”。 ipv4 指的是iptables
firewall-cmd --direct --permanent --add-rule Ipv4 raw PREROUTING 0 -s 192.168.1.0/24 -j blacklist
\# 在路由之前檢測到192.168.1.0/24網段的IP地址的數據包,加入到blocklist規則鏈中。
firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix blacklisted
\# 每分鐘生成以下日誌文件
firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP
\# 將來自規則鏈“blacklist”中的數據包丟棄
2)firewall執行優先級
直接規則 > 富規則 > 區域規則
2. firewall-cmd命令之富規則(RULE)
firewall-cmd有四個選項可以用於處理富規則,所有這些選項都可以使用
`--add-rich-rule 向指定的區域中添加RULE,如沒有指定區域,則是默認區域`
`--remove-rich-rule 在指定的區域中刪除RULE,如沒有指定區域,則是默認區域`
`--query-rich-rule 查看RULE是否已添加到指定的區域,存在返回0,否則1`
`--list-rich-rules 輸出指定區域的所有富規則,如果位置區域,爲默認區域`
3. 富語言
富語言提供了一種不需要了解iptables語法通過語言配置複雜ipv4和ipv6防火牆規則的機制。
富語言規則可用於表達基本的允許/拒絕規則,也可用與配置記錄(syslog、auditd)、端口轉發、端口僞裝、速率限制
1)富語言格式
rule [ family= ipv4|ipv6 ] [ source address=ip/mask] [ destination address=ip/mask ] [要素/對象] [ audit ] [ accept|reject|drop ]
- 可選項:
family= :如果對某個網段或IP進行規則時,需要指定ipv4還是ipv6
source address : 限制的源IP地址,可以是ipv4、ipv6,也可以是一個地址段,例: 192.168.1.0/24
destination address :要素,限制的對象,以下是要素的類型
service :指定服務名稱,格式爲: service name=服務名稱
port:指定端口號,可以是一個獨立的端口號或一個範圍,TCP/UDP 命令格式: port port=5000-5050 protocol=TCP/UDP
或者 port port=8888/tcp
protocol:協議,可以是一個協議號或者協議名稱,命令格式: 如果有端口號 : port port=port protocol=TCP/UDP
如果沒有端口號: protocol value=協議名
icmp-block:阻斷一個或多個ICMP類型,命令格式:icmp-block name=icmp type_name
masquerade:規則裏的IP僞裝,啓用IP僞裝
forward-port:將指定TCP或UDP協議的數據包轉發到本機的其他端 口,命令格式forward-port port=端口號 protocol=TCP/UDP to-port=端口號 to-addr=address
log:註冊有內核日誌的連接請求到規則中,日誌級別:emerg、alert、crit、error、warning、notice、info、debug ; 命令格式:log[perfix=perfix text] [level=log level] limit values=時間/單位 ;單位: s(秒)、m(鍾)、h(時)、d(天)
audit:審覈,
accept|reject|drop:
4. 富語言–實例
1)例:爲認證包頭協議AH使用新的ipv4和ipv6連接
[root@localhost ~]# firewall-cmd --add-rich-rule='rule protocol value=ah accept'
Success
2)例:允許新的ipv4和ipv6連接FTP,並使用審覈每分鐘記錄一次
[root@localhost ~]# firewall-cmd --add-rich-rule='rule service name=ftp log limit value=1/m audit accept'
3)允許來自1.0.0.0/8網段的TFTP協議的ipv4連接,並使用系統日誌每分鐘記錄一次
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="1.0.0.0/8" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept'
4)將源192.168.1.2地址加入到白名單,並允許來自這個地址的所有鏈接
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.2" accept'
5)拒絕來自public區域中的IP地址192.168.1.1的所有流量
[root@localhost ~]# firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.1.1/24 reject'
6)丟棄來自默認區域中任何位置的所有傳入的ipsec esp協議包
[root@localhost ~]# firewall-cmd --add-rich-rule='rule protocol value="esp" drop'
Success
7)子192.168.1.0/24子網的dmz區域中,接受端口7900-7905的所有的TCP
[root@localhost ~]# firewall-cmd --zone=dmz --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'
Success
8)接受從work區域中到ssh的新連接,以notice級別且每分鐘最多三條消息的方式將新連接記錄到syslog
[root@localhost ~]# firewall-cmd --zone=dmz --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'
Success
9)在接下來的5分鐘內,拒絕從默認區域中的子網192.168.2.0/24到DNS的新連接,並把拒絕的連接記錄到audit系統,且每小時最多一條
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.2.0/24 service name=dns audit limit value=1/h reject' --timeout=300
success