一、firewalld 高级配置
firewall的支持两种类型的NAT:IP地址伪装和端口转发
1.IP地址伪装
含义:NAT设备将经过的包转发到指定接收方,同时将数据包的源地址改为自己接口的地址。当数据包返回时,将目的地址修改为原始主机地址并做路由。
作用:
- 可以实现局域网多个主机地址共享单一的公网地址
- IP地址伪装支持ipv4,不支持ipv6
2.端口转发
含义:将IP地址及端口的流量转发到相同计算机上的不同端口,或不同计算机的相同端口
3.firewalld直接规则
- 它允许管理员手动编写的iptables ip6tables ebtableds规则插入到firewalld管理区域中
- 适用于应用程序,而不是用户
- 直接通过firewall-cmd命令中的–driect选项实现
- 除非直接规则差入到firewalld管理区域中,否则首先解析直接规则
4.富语言
- 提供了一种不需要了解iptables语法的通过高级语言配置复杂ipv4和ipv6防火墙规则机制
- 富规则可用于基本的允许/拒绝规则,也可以用于配置记录(面向syslog和auditd)
- 可以配置端口转发、伪装和速率限制
- 富规则的常用选项(所有选项可以同常规的–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-zones 输出中,语法解释如下
source :限制源地址
destination:限制目的地址
element:要素包括:service port protocol icmp-block(阻断的icmp类型) masquerade(IP地址伪装) forward-port(指定的TCP或UDP协议数据包转发到本机的其他端口)
log:日志
audit:审核,审核会自动从规则中收集
accept|reject|drop:accept允许,reject拒绝drop为丢弃,命令格式为accept|reject[type=reject type]|drop -
富规则的基本语法RULE
rule [family="< rule family>"] //如rule family=“ipv4”
[source address="< address>" [invert=“True”]] // 如source address=“192.168.10.0/24”
[destination address="< address>" [invert=“True”]]
[< element>]
[log [prefix="< prefix text>"]] [level="< log level>"] [limit value=“rate/duration”]
[audit]
[accept|reject|drop]
如:firewall-cmd --zone=public --add-rich=‘rule family=“ipv4” source address=“192.168.10.0/24” service name=“tftp” log prefix=“tftp” level=“info” limit value=“1/m” accept’
5.实验配置firewalld地址伪装和端口转发
实验环境(操作中的ip与与图片不同)
实验要求
实验配置
网关服务器上的配置如下
- 添加三块网卡,配置IP
- vim /etc/sysctl.conf //开启路由转发
sysctl -p - firewall-cmd --set-default-zone=external //设置默认区域外部
- firewall-cmd --change-interface=ens37 --zone=trusted
- firewall-cmd --change-interface=ens38 --zone=dmz
- firewall-cmd --get-active-zones //查看活动区域
- vi /etc/ssh/sshd_config
Port 1234 - setenforce 0
- systemctl restart sshd
- firewall-cmd --zone=external --add-port=1234/tcp --permanent
- firewall-cmd --zone=dmz --remove-service=ssh --permanent // 添加端口后须将ssh预定以服务删除
- firewall-cmd --reload
- 测试
- firewall-cmd –remove-masquerade –zone=external //移除外部区域的地址伪装
- firewall-cmd –zone=external –add-rich-rule=’rule family=ipv4 source address=192.168.1.0/24 masquerade’ //为192.168.1.0/24网段的添加伪装
Dmz上测试无法访问外网 - Firewall-cmd –zone=external –add-forward-port=port=443:proto=tcp:toaddr=192.168.2.10
- Firewall-cmd –zone=external –add-forward-port=port=80:proto=tcp:toaddr=192.168.2.10
添加新网卡
Vim /etc/sysconfig/network-scripts/ifcfg-ens33
- Systemctl restart NetworkManager
- firewall-cmd --zone=external --add-rich-rule=‘rule family=ipv4 destination address=192.168.168.133/24 forward-port port=443 protocol=tcp to-addr=192.168.114.128’ –permanent
20.firewall-cmd --zone=external --add-rich-rule=‘rule family=ipv4 destination address=192.168.168.133/24 forward-port port=80 protocol=tcp to-addr=192.168.114.128’ --permanent
内网测试机配置如下
网站服务器配置如下
- yum -y install httpd mod_ssl
- systemctl start httpd
- systemctl enable httpd
- echo “< h1>www.bdqn.com< /h1>” > /var/www/html/index.html
- vi /etc/ssh/sshd_config (更改端口号后需关闭selinux)
Port 1234 - systemctl restart sshd
- firewall-cmd --set-default-zone=dmz //添加默认区域为dmz
- firewall-cmd --zone=dmz --add-service=https --permanent //添加https服务
- firewall-cmd --zone=dmz --add-port=1234/tcp --permanent //开启1234端口
- firewall-cmd --zone=dmz --remove-service=ssh --permanent // 添加端口后须将ssh预定以服务
- firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent //禁止ping命令
- firewall-cmd --reload //重载
- firewall-cmd --zone=dmz --add-port=80/tcp --permanent
- firewall-cmd --zone=dmz --add-port=443/tcp --permanent
- firewall-cmd --reload
Internet测试机配置如下
- yum -y install httpd mod_ssl
- systemctl start httpd
- systemctl enable httpd
- echo “< h1>www.accp.com< /h1>” > /var/www/html/index.html
- firewall-cmd