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