5案例5:配置firewalld防火墙
5.1 问题
本例要求为两个虚拟机server0、desktop0配置防火墙策略:
- 允许从172.25.0.0/24网段的客户机访问server0、desktop0的任何服务
- 禁止从my133.org域(172.34.0.0/24网段)的客户机访问server0、desktop0的任何服务
- 在172.25.0.0/24网络中的系统,访问server0的本地端口5423将被转发到80
- 上述设置必须永久有效
5.2方案
RHEL7的防火墙体系根据所在的网络场所区分,提供了预设的安全区域:
- public:仅允许访问本机的sshd等少数几个服务
- trusted:允许任何访问
- block:阻塞任何来访请求
- drop:丢弃任何来访的数据
- …
新增防火墙规则的位置包括: - 运行时(runtime):仅当前有效,重载防火墙后失效
- 永久(permanent):静态配置,需要重载防火墙才能生效
本地端口转发(端口1–>端口2): - 从客户机访问防火墙主机的端口1时,与访问防火墙的端口2时等效
- 真正的网络应用服务其实在端口2提供监听
5.3步骤
实现此案例需要按照如下步骤进行。
步骤一:采取“默认全允许,仅拒绝个别”的防火策略
1)启用防火墙服务
[root@server0 ~]# systemctl restart firewalld
[root@server0 ~]# systemctl enable firewalld
2)将默认区域设置为trusted
[root@server0 ~]# firewall-cmd --get-default-zone //修改前
public
[root@server0 ~]# firewall-cmd --set-default-zone=trusted //修改操作
success
[root@server0 ~]# firewall-cmd --get-default-zone //修改后
trusted
步骤二:封锁指定的IP网段
1)添加永久配置“阻塞来自网段172.34.0.0/24的任何访问”
[root@server0 ~]# firewall-cmd --permanent --zone=block --add-source=172.34.0.0/24
success
2)重载防火墙
[root@server0 ~]# firewall-cmd --reload
success
3)检查允许规则
[root@server0 ~]# firewall-cmd --list-all --zone=block
block
interfaces:
sources: 172.34.0.0/24
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
步骤三:实现5423–>80端口转发
1)针对80端口部署测试应用
快速搭建一个测试网站:
[root@server0 ~]# yum -y install httpd //装包
.. ..
[root@server0 ~]# vim /var/www/html/index.html //部署测试网页
test site.
[root@server0 ~]# systemctl restart httpd //起服务
从客户端访问,确认测试页面;
[root@desktop0 ~]# yum -y install elinks
.. ..
[root@desktop0 ~]# elinks -dump http://server0.example.com/
test site.
2)配置5423–>80端口转发策略
[root@server0 ~]# firewall-cmd --permanent --zone=trusted --add-forward-port=port=5423:proto=tcp:toport=80 //添加永久配置
success
[root@server0 ~]# firewall-cmd --reload //重载服务
Success
[root@server0 ~]# firewall-cmd --list-all //确认运行时规则
trusted (default, active)
interfaces: eth1 eth2 eth0 team0
sources:
services:
ports:
masquerade: no
forward-ports: port=5423:proto=tcp:toport=80:toaddr=
icmp-blocks:
rich rules:
3)验证端口转发策略
从desktop0上访问server0的5423端口,与访问server0的80端口效果一样:
[root@desktop0 ~]# elinks -dump http://server0.example.com:5423/
test site.
[root@desktop0 ~]# elinks -dump http://server0.example.com/
test site.