博文目录:
一、firewalld高级配置
1、firewalld支持的NAT
2、IP地址伪装
3、端口转发
二、firewalld-cmd高级配置
1、firewalld中理解直接规则
2、使用富语言
3、富规则命令
4、富规则配置举例:

一、firewalld高级配置

1、firewalld支持的NAT

firewalld支持两种类型的NAT:

  • IP地址伪装;

  • 端口转发;

2、IP地址伪装

地址伪装:通过地址伪装,NAT设备将经过设备的包转发到指定的接收方,同时将通过的数据包的源地址更改为其自己的接口地址。当返回的数据包到达时,会将目的地址修改为原始主机的地址并做路由。地址伪装可以实现局域网多个地址共享单一公网地址上网。类似于NAT技术中的端口多路复用(PAT)。IP地址伪装仅支持ipv4,不支持ipv6。

3、端口转发

端口转发:也可以称之为目的地址转换或端口映射。通过端口转发,将指定IP地址及端口的流量转发到相同计算机上的不同端口,或不同计算机上的端口。一般公司内网的服务器都采用私网地址,然后通过端口转发将使用私网地址的服务器发布到公网上,以便让互联网用户访问。(例如,当接收互联网用户的HTTP请求时,网关服务器判断数据包的目标地址与目标端口,一旦匹配指定规则,则将其目标地址修改为内网真正的服务器地址,从而建立有效连接)。

二、firewalld-cmd高级配置

1、firewalld中理解直接规则

firewalld提供了“direct interface”(直接端口),它允许管理员手动编写的iptables、ip6tables和ebtables规则插入firewalld管理的区域中,适用于应用程序,而不是用户。如果对iptables不太熟,不建议使用直接接口,可能会无意中导致防火墙被***。firewalld保持对所增加项目的追踪,所以他还能质询firewalld和发现使用直接端口模式的程序造成的更改。直接端口通过firewalld-cmd命令中的--direct选项实现。除非将直接规则显式插入firewalld管理的区域,否则将首先解析直接规则,然后再解析其他firewalld规则。
执行以下命令即可添加一些直接规则以将某个IP范围列入黑名单:

[root@centos01 ~]# firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist
success
[root@centos01 ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.10.0/24 -j blacklist
success
[root@centos01 ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted"
success
[root@centos01 ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP
success

2、使用富语言

firewalld的富语言提供了一种不需要了解iptables语法的通过高级语言配置复杂的IPv4和IPv6防火墙规则的机制,为管理员提供了一种表达性语言,通过这种语言,可以表达firewalld的基本语法中未涵盖的自定义防火墙规则。(例如,仅允许从单个IP地址而非通过某个区域路由的所以IP地址连接到服务)。

富规则可用于表达基本的允许/拒绝规则,也可以用于配置记录(面向syslog和auditd),以及端口转发、伪装和速率限制。下面简单看一下表达富规则的基本语法:
Centos 7的firewalld防火墙地址伪装和端口转发原理
规则的每个单一元素都能够以option=value的形式来采用附加参数。

1)规则排序

一旦向某个区域(一般是指防火墙)中添加了多个规则,规则的排序会在很大程度上影响防火墙的行为。对于所有的区域,区域内的规则的基本排序是相同的。如果区域中的任何规则与包均不匹配,通常会拒绝此包,但是区域可能具有不同的默认值。(例如,可信区域将接收任何不匹配的包。此外,在匹配某个记录规则后,将继续正常处理包)。
直接规则是个例外。大部分直接规则将首先进行解析,然后由firewalld进行其他处理,但是直接规则语法允许管理员在任何区域中的任何位置插入任何规则。

2)测试和调试

为了便于测试和调试,几乎所有规则都可以与超时一起添加到运行时配置。当包含超时的规则添加到防火墙时,计时器便针对该规则开始倒计时,一旦规则的计时器到达0秒,便从运行时配置中删除该规则。
在使用远程防火墙时,使用超时会是一种极其有用的工具,特别是在测试更复制的规则集时。如果规则有效,则管理员可以再次添加该规则;如果规则没有按照预期运行,甚至可能将管理员锁定而使其无法进入系统,那么规则将被自动删除,以允许管理员可以继续工作。通过在启用规则的firewalld-cmd命令的结尾追加选项--timeout<TIMEINSECONDS>可向运行时规则中添加超时。

3、富规则命令

firewalld-cmd有四个选项可以用于处理富规则,所有这些选项都可以同常规的--permanent或--zone=<ZONE>选项组合使用,如下所示:

  • --add-rich-rule='RULE' #向指定区域添加RULE,如果没有指定区域,则为默认区域;

  • --remove-rich-rule='RULE' #从指定区域中删除RULE,如果没有指定区域,则为默认区域;

  • --query-rich-rule='RULE' #查询RULE是否已添加到指定区域,如果未指定区域,则为默认区域。规则存在,则返回0,否则返回1;

  • --list-rich-rules #输出指定区域的所有富规则,如果未指定区域,则为默认区域;

任何已配置的富规则都会显示在firewall-cmd --list-all 和 firewall-cmd --list-all-zone的输出结果中。具有语法解释如下所示:

  • source:限制源IP地址,源地址可以是一个IPv4、IPv6地址或者一个网络地址段;

  • destination:限制目标地址,目标地址使用跟源地址相同的语法;

  • element:要素,该项只能是以下几种要素类型之一:service、port、protocol、icmp-block、masquerade和forward-port;

①service:服务名称是firewalld提供的其中一种服务。要获得支持的服务列表,输入以下命令:firewalld-cmd--get-services。如果一个服务提供了一个目标地址,它和规则中的目标地址冲突,则会导致一个错误。命令格式为:service name=service_name;

②port:端口可以是一个独立端口数字,或者是端口范围,如5060~5062.协议为TCP或UDP。命令格式为:port port=number_or_range protocol=protocol;

③protocol:协议,可以是一个协议ID号,或者一个协议名。查询可用协议,请查看/etc/protocols。命令格式为:protocol value=protocol_name_or_ID;

④icmp-block:阻断一盒或多个ICMP类型。要获得支持的ICMP类型列表,输入firewalld-cmd--get-icmptypes命令即可查看。命令格式为:icmp-blick name=icmptype_name;

⑤masquerade:规则里的IP伪装。用源地址而部署目的地址来把伪装限制在一个范围内;

⑥forward-port:将指定的TCP或UDP协议的数据包转发到本机的其他端口,或另一台机器,或另一台机器上的其他端口。port和to-port可以是一个单独的端口数字,或一个端口范围。而目的地址是一个简单的IP地址。命令格式为:forward-port port=number_or_range protocol=protocol to-port=number_or_range to-addr=address;

  • log:注册有内核日志的连接请求到规则中,如系统日志。可以定义一个前缀文本把日志信息作为前缀加入。日志等级可以是emerg、alert、crit、error、warning、notice、info或者debug中的一个。可以选择日志的用法,按以下方式限制日志:log [prefix text] [level=log level] limint value=rate/duration。持续时间的单位为s、m、h、d。s表示秒,m表示分钟,h表示小时,d表示天。最大限定值是1/d(每天最多有一条日志进入);

  • audit:审核,审核类型可以是accept、reject或drop中的一种,但不能再audit命令后指定,因为审核类型将会从规则动作中自动收集。审核不包含自身参数,但可以选择性地增加限制。审核的使用是可选择的;

  • accept|reject|drop:可以是accept、reject或drop中的一个行为。命令格式为:accept | reject连接将被拒绝,发起端将接到一个拒绝信息。指定drop时,所有数据包会被丢弃,并且不会向发起端发送任何信息;

4、富规则配置举例:

1)为认证报头协议AH使用新的IPv4和IPv6连接:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule protocolvalue=ah accept'
success

2)允许新的IPv4和IPv6连接FTP,并使用审核每分钟记录一次:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule service name=ftp log limit value=1/m audit accept'
success

3)允许来自192.168.0.0/24地址的TFTP协议的IPv4连接,并且使用系统日志每分钟记录一次:

[root@centos01 ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name= "tftp" log prefix="tftp" level="info" limit value="1/m" accept'
success

4)为RADIUS协议拒绝所有来自1:2:3:4:6::的新IPv6连接,日志前缀为“dns”,级别为“info”,并每分钟最多记录3次。接受来自其他发起端新的IPv6连接:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" reject'
success
[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule family="ipv6" service name="radius" accept'
success

5)将源192.168.2.2地址加入白名单,以允许来自这个源地址的所有连接:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule family="ipv4" source address="192.168.2.2" accept'
success

6)拒绝来自piblic区域中IP地址192.168.0.11的所有流量:

[root@centos01 ~]# firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'
success

7)丢弃来自默认区域中任何位置的所有传入的ipsec esp协议包:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule protocol value="esp" drop'
success

8)在192.168.1.0/24子网的dmz区域中,接收端口7900~7905的所有TCP包:

[root@centos01 ~]# 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)接收从work区域到SSH的新连接,以notice级别且每分钟最多三条消息的方式将新连接记录到syslog:

[root@centos01 ~]# firewall-cmd --zone=work --add-rich-rule='rule service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept'
success

10)在接下来的5min内,拒绝从默认区域中的子网192.168.2.0/24到DNS的新连接,并且拒绝的连接将记录到audit系统,且每小时最多一条消息:

[root@centos01 ~]# 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

下一篇博客再配置firewalld防火墙的地址伪装和端口转发案例。

—————— 本文至此结束,感谢阅读 ——————