IP地址伪装和端口转发都属于NAT(网络地址转换)。
地址伪装和端口转发的区别如下:
IP地址伪装:
1、通过地址伪装,NAT设备将经过设备的包转发到指定的接收方,同时将通过的数据包
2、源地址更改为其NAT设备自己的接口地址。当返回的数据包到达时,会将目的地址修改
3、为原始主机的地址并做路由。地址伪装可以实现局域网多个地址共享单一公网地址上网。
4、类似于NAT技术中的端口多路复用(PAT)。IP地址伪装仅支持ipv4,不支持ipv6。
端口转发:
也可以称之为目的地址转换或端口映射。通过端口转发,将指定IP地址及端口的流量转发到相同计算机上的不同端口,或不同计算机上的端口。一般公司内网的服务器都采用私网地址,然后通过端口转发将使用私网地址的服务器发布到公网上。
在firewalld中,有一个富语言的概念,firewalld的富语言提供了一种不需要了解iptables语法的通过高级语言配置复杂的防火墙规则的机制,通过这种语言,可以表达firewalld的基本语法中不能实现的自定义防火墙规则。
富规则可用于表达基本的允许/拒绝规则,也可以用于配置记录(面向syslog和auditd),以及端口转发、伪装和速率限制。
在firewalld防火墙配置中有一个超时的工具,当包含超时的规则添加到防火墙时,计时器便针对该规则开始倒计时,一旦倒计时达到0秒,便从运行时配置中删除该规则。
在测试更复杂的规则集时,如果规则有效,那么我们可以再次添加该规则,如果规则没有实现我们预期的效果,甚至可能将我们管理员锁定而使其无法进入系统,那么规则将被自动删除,以便我们运维人员继续进行测试工作。
在使用firewall-cmd进行配置规则时,在命令的结尾追加选项--timeout=<timeval> 即可,--help中关于该选项的参考如下(单位可以是秒、分、时):
代码语言:javascript复制 Enable an option for timeval time, where timeval is
a number followed by one of letters 's' or 'm' or 'h'
Usable for options marked with [T]
firewall-cmd有四个选项可以用于处理富规则,所有这些选项都可以和常规的--permanent或--zone=<ZONE>选项组合使用,具体如下:
在任何已配置的富规则都会显示在firewall-cmd --list-all 和 firewall-cmd --list-all-zone的输出结果中。具有语法解释如下所示:
富规则配置举例:
代码语言:javascript复制 为认证报头协议AH使用新的ipv4和ipv6连接
[root@localhost /]# firewall-cmd --add-rich-rule='rule protocol value=ah accept'
代码语言:javascript复制允许新的ipv4和ipv6连接ftp,并使用审核每分钟记录一次
[root@localhost /]# firewall-cmd --add-rich-rule='rule service name=ftp log limit value=1/m audit accept'
代码语言:javascript复制允许来自192.168.1.0/24地址的TFTP协议的ipv4连接,并且使用系统日志每分钟记录一次
[root@localhost /]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept'
代码语言:javascript复制为RADIUS协议拒绝所有来自1:2:3:4:6::的新ipv6连接,日志前缀为“dns”,级别为“info”,并每分钟最多记录3次。接受来自其他发起端新的ipv6连接:
[root@localhost /]# 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'
[root@localhost /]# firewall-cmd --add-rich-rule='rule family="ipv6" service name="radius" accept'
代码语言:javascript复制将源192.168.2.2地址加入白名单,以允许来自这个源地址的所有连接:
[root@localhost /]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept'
代码语言:javascript复制拒绝来自public区域中IP地址192.168.0.11的所有流量:
[root@localhost /]# firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'
代码语言:javascript复制丢弃来自默认区域中任何位置的所有传入的ipsec esp协议包:
[root@localhost /]# firewall-cmd --add-rich-rule='rule protocol value="esp" drop'
代码语言:javascript复制在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-1905 protocol=tcp accept'
代码语言:javascript复制接收从work区域到SSH的新连接,以notice级别且每分钟最多三条消息的方式将新连接记录到syslog:
[root@localhost /]# firewall-cmd --zone=work --add-rich-rule='rule service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept'
代码语言:javascript复制在接下来的5min内(通过--timeout=300配置项实现),拒绝从默认区域中的子网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
配置firewall防火墙的地址伪装和端口转发的配置实例:https://cloud.tencent.com/developer/article/1501200