一文了解firewalld的Rich ruels,拒绝做小白

前言

Firewalld中除提供的基础参数实现防火墙规则的管理工作,也提供了一种可以配置更详细IPv4和IPv6规则的丰富语言规则(rich language rules)。丰富语言规则为系统管理员提供了一种表达性语言,通过丰富语言规则可以覆盖firewalld的基本语法中未涵盖的自定义防火墙规则。

Firewalld中丰富语言规则可用于表达防火墙的基础规则,也可以用于配置记录(面向syslog、auditd),同时也可以实现端口转发、伪装和速率限制等多种自定义规则。

基础选项

Firewalld针对丰富语言规则提供的选项较少,作为firewalld基本语法的扩充可以结合firewalld基础参数轻松定义防火墙规则。firewalld的丰富语言规则基础选项分析如下:

[root@freeops ~]# firewall-cmd --help | grep rich  --list-rich-rules     List rich language rules added for a zone [P] [Z]     # 输出指定区域内已存在的丰富语言规则,若不指定zone,则为默认  --add-rich-rule=     Add rich language rule 'rule' for a zone [P] [Z] [T]     # 向指定区域内添加,若不指定zone,则为默认  --remove-rich-rule=       Remove rich language rule 'rule' from a zone [P] [Z]     # 在指定区域内移除,若不指定zone,则为默认  --query-rich-rule=      Return whether a rich language rule 'rule' has been     # 查询是否存在,若不指定zone,则为默认

基础语法

Firewalld为丰富语言规则选项中的rule提供了丰富且复杂的语法规则。用户通过不通rule的组合可以实现firewalld的丰富语言规则带来的自定义规则。firewalld中丰富语言规则选择中rule基础语法分析如下:

rule   [family="ipv4|ipv6"]# 定义rich rules中IP地址类型,可选择IPv4和IPv6   [source]                           source [not] address="address[/mask]"|mac="mac-address"|ipset="ipset"# 定义rich rules中源地址,可选择address、mac、ipset等,同时支持not取反   [destination]        destination [not] address="address[/mask]"# 定义rich rules中目的地址,可选择address,同时支持not取反   [port]        port port="port value" protocol="tcp|udp"# 定义rich rules中端口信息,同时指定端口协议类型   [protocol]        protocol value="protocol value"# 定义rich rules中协议类型,可通过/etc/protocols查询系统可用协议类型   [service]        service name="service name" # 定义rich rules中服务信息   [log]        log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"]# 定义richrules中日志输出标准。开启后,日志将以prefix值为前缀写入系统日志/自定义日志中。# 日志等级可以选择emerg、alert、crit、error、warning、notice、info、debug等。# 日志持续时间可以选择秒(s)、分钟(m)、小时(h)、天(d),最大限定值1/d(每天最多一条日志进入)   [audit]        audit [limit value="rate/duration"]# 定义rich rules中audit信息   [targe]        accept|reject|drop# 定义rich rules中日志信息

操作实例

  • 例1:允许192.168.241.1/24的IPv4流量访问服务器资源
[root@freeops ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.241.1/24" accept'success[root@freeops ~]# firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.241.1/24" accept'success
  • 例2:允许192.168.241.1/24访问MySQL服务
[root@freeops ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.241.1/24" service name=mysql accept'success[root@freeops ~]# firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.241.1/24" service name=mysql accept'success
  • 例3:允许192.168.241.1/24访问服务器22/tcp端口
[root@freeops ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.241.1/24" port port=22 protocol=tcp accept'success[root@freeops ~]# firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.241.1/24" port port=22 protocol=tcp accept'success
  • 例4:禁止黑名单中IP地址访问服务器资源,并记录日志
[root@freeops ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset=blockIP log prefix="blockIP" level=info drop'success[root@freeops ~]# firewall-cmd --permanent --zone=public --remove-rich-rule='rule source ipset=blockIP log prefix="blockIP" level=info drop'success
  • 例5:允许白名单中IP地址访问服务器3306/tcp端口
[root@freeops ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="whitelist" port port="3306" protocol="tcp" accept'success[root@freeops ~]# firewall-cmd --permanent --zone=public --remove-rich-rule='rule source ipset="whitelist" port port="3306" protocol="tcp" accept'success
  • 例6:端口转发
[root@freeops ~]# firewall-cmd --add-masqueradesuccess[root@freeops ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.241.1 forward-port port=50000 protocol=tcp to-port=2222 to-addr=192.168.241.90'success[root@freeops ~]# firewall-cmd --permanent --zone=public --remove-rich-rule='rule family=ipv4 source address=192.168.241.1 forward-port port=50000 protocol=tcp to-port=2222 to-addr=192.168.241.90'success
  • 例7:查看当前系统内存在的rich rules
[root@freeops ~]# firewall-cmd --zone=public --list-rich-rules rule source ipset="blockIP" log prefix="blockIP" level="info" droprule source ipset="whitelist" service name="airissue" acceptrule source ipset="whitelist" port port="3306" protocol="tcp" acceptrule family="ipv4" source address="192.168.241.1/24" service name="mysql" acceptrule family="ipv4" source address="192.168.241.1/24" port port="22" protocol="tcp" acceptrule family="ipv4" source address="192.168.241.1" forward-port port="50000" protocol="tcp" to-port="2222" to-addr="192.168.241.90"



作者:FreeOps

来源:FreeOps

投稿地址:freeops@sina.com


----- THE END -----

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章