防火墙策略管理
硬件防火墙
软件防火墙
Firewalld服务基础
RHEL7的防火墙体系 ——软件防火墙
系统服务:firewalld
管理工具firewall-cmd(命令行),firewall-config(图形界面管理)
防火墙应用: 起到隔离作用,保护局域网或主机系统
预设安全区域
根据所在的网络场所区分,预设保护规则集,常用的安全区域:
public:仅允许访问本机的sshd等少数几个服务
trusted:允许任何访问
block:阻塞任何来访请求 //回应请求不通信,实验时常用
drop:丢弃任何来访的数据包 //不回应请求,节省服务器资源,工作中常用
新增防火墙规则的位置:
运行时(runtime):仅当前有效,重载防火墙后失效
永久(permanent):静态配置,需要重载防火墙才能生效
查看防火墙规则列表
firewall-cmd --list-all //查看默认区域策略
firewall-cmd --list-all --zone=区域名 //查看指定区域的策略
firewall-cmd --list-all -zones
firewall-cmd --get-zones
firewall-cmd --get-services
firewall-cmd --get-default-zone //查看当前默认区域
firewall-cmd --set-default-zone=区域名 //设置默认区域
firewall-cmd --zone=block --add-source=网段地址/掩码 //临时阻止一个网段
firewall-cmd --permanent --zone=block --add-source=网段地址/掩码
//永久阻止一个网段
查看防火墙服务是否开启,设置为开机自起
# systemctl status firewalld
# systemctl enable firewalld
######################################################
默认区域修改
虚拟机server0
# firewall-cmd --set-default-zone=public
# firewall-cmd --list-all #查看默认区域信息
public (default, active) //public域,活跃
interfaces: eth0
services: dhcpv6-client ssh //允许服务
虚拟机desktop0 # ping -c 2 172.25.0.11 //可以通信
虚拟机server0 修改默认区域为block
# firewall-cmd --set-default-zone=block
# firewall-cmd --list-all
block (default, active)
interfaces: eth0
虚拟机desktop0 # ping -c 2 172.25.0.11 //不可通信,有回应
虚拟机server0 修改默认区域为drop
# firewall-cmd --set-default-zone=drop
# firewall-cmd --list-all
drop (default, active)
interfaces: eth0
虚拟机desktop0 # ping -c 2 172.25.0.11 //不可通信,没有回应
虚拟机server0 修改默认区域为trusted
# firewall-cmd --set-default-zone=trusted
# firewall-cmd --list-all
trusted (default, active)
interfaces: eth0
虚拟机esktop0 # ping -c 2 172.25.0.11 //可通信,有回应
###############################################################################
firewall典型的应用方式:
严格:将默认区域保持为(block、drop),针对需要放行的IP访问在trused区域添加策略
宽松:将默认区域保持为trusted,针对需要阻止的访问IP在(block、drop)区域添加策略
常见配置方式:
默认区域public,在trusted区域添加信任网段
或者
默认区域trusted,在drop区域添加需要封锁的网段
###############################################################################
默认区域的修改,默认是永久,不需要添加--permanent(永久)选项
添加服务到默认区域
虚拟机server0:# firewall-cmd --set-default-zone=public
# firewall-cmd --list-all
虚拟机desktop0:# firefox http://172.25.0.11 #不可以
等价于命令# elinks -dump http://172.25.0.11
# firefox ftp://172.25.0.11 #不可以
虚拟机server0:
# firewall-cmd --permanent --add-service=http #永久设置
# firewall-cmd --permanent --add-service=ftp #永久设置
# firewall-cmd --reload #重新加载
# firewall-cmd --list-all
虚拟机desktop0:# firefox http://172.25.0.11 #可以
# firefox ftp://172.25.0.11 #可以
###############################################################################
设置server0防护墙规则,默认区域为trusted,最终真机可以访问server0的web服务,desktop0则不能
虚拟机server0:# firewall-cmd --list-all
public (default, active) //public域,活跃
services: dhcpv6-client ssh //允许服务
虚拟机desktop0:#firefox http://172.25.0.11 //不能访问
真机#firefox http:172.25.0.11 //不能访问
虚拟机server0 把172.25.0.10添加到trusted中,永久有效
# firewall-cmd --zone=trusted --add-source=172.25.0.10
# firewall-cmd --list-all --zone=trusted
# firewall-cmd --reload //重新加载配置
# firewall-cmd --list-all --zone=trusted
虚拟机desktop:# firefox http://172.25.0.11 #可以
真机:# firefox http://172.25.0.11 #不可以
#########################################################################
配置防火墙
指定默认的安全区域
使用firewall-cmd --set-default-zone=区域名
默认为public,限制较严格
对于开放环境,建议将默认区域修改为trusted
针对“运行时/永久配置”均有效
封网段,开服务
若针对“永久配置”,需添加 --permanent
使用 --add source=网段地址
使用--add-service=服务名:
# firewall-cmd --permanent --zone=block --add-source=172.34.0.0/24
# firewall-cmd --permanent --zone=public --add-service=http
实现本机的端口映射
本地应用的端口重定向(端口1-->端口2:从客户及访问端口1的请求,自动映射到本机的端口2,2个端口等效,真正的网络应用服务其实在端口2 提供监听)
# firewall-cmd --permanent --zone=默认区域 --add-forward-port=被转发端口设置:协议设置:目标端口设置
# firewall-cmd --permanent --zone=默认区域 --add-forward-port=port=源端口:proto=协议名:toport=目标端口
防火墙配置重载:firewall-cmd --reload
防火墙功能的实现:
Linux内核机制(netfilter) —— 控制数据包是否允许通过
Linux系统是如何运行起来的?(人类繁衍)
kernel --> /usr/sbin/init --> .....
login --> /bin/bash --> /bin/bash --> /bin/bash Web服务
防火墙处理数据包的流程:
先检查其他区域(IP地址、接口……),最后检查默认区域 【匹配及停止】
###############################################################################
# firewall-config //图形工具
.. .. //默认区域改成 trusted,在block区域内添加要阻止的源地址
找到默认trusted区域,配置永久策略--Port Forwarding转发策略
# firewall-cmd --set-default-zone=trusted
###############################################################################
示例:配置firewalld防火墙
为两个虚拟机 server0、desktop0配置防火墙策略:
允许从172.25.0.0/24网段的客户机访问 server0、desktop0 的任何服务
(# firewall-cmd --permanent --zone=block --remove-source=172.25.0.10)
禁止从my133t.org域(172.34.0.0/24网段)的客户机访问 server0、desktop0 的任何服务
在172.25.0.0/24网络中的系统,访问 server0 的本地端口5423将被转发到80
(elinks -dump http://172.25.0.11:5423====>elinks -dump http://172.25.0.11:80)
上述设置必须永久有效
步骤一:采取“默认全允许,仅拒绝个别”的防护策略
1)启用防火墙服务
[root@server0 ~]# systemctl restart firewalld
[root@server0 ~]# systemctl enable firewalld
2)将默认区域设置为trusted
[root@server0 ~]# firewall-cmd --get-default-zone //修改前
[root@server0 ~]# firewall-cmd --set-default-zone=trusted //修改操作
[root@server0 ~]# firewall-cmd --get-default-zone //修改后
步骤二:封锁指定的IP网段
1)添加永久配置“阻塞来自网段172.34.0.0/24的任何访问”
# firewall-cmd --permanent --zone=block --add-source=172.34.0.0/24
2)重载防火墙 # firewall-cmd --reload
3)检查运行时规则
# firewall-cmd --list-all --zone=block
Block …… sources: 172.34.0.0/24
步骤三:实现5423-->80端口转发
1)针对80端口部署测试应用
快速搭建一个测试网站:
[root@server0 ~]# yum -y install httpd //装包
[root@server0 ~]# vim /var/www/html/index.html //部署测试网页
[root@server0 ~]# systemctl restart httpd //起服务
从客户端访问,确认测试网页:
[root@desktop0 ~]# yum -y install elinks
[root@desktop0 ~]# elinks -dump http://server0.example.com/
2)配置5423-->80端口转发策略
# firewall-cmd --permanent --zone=trusted --add-forward-port=port=5423:proto=tcp:toport=80 //添加永久配置
# firewall-cmd --reload //重载服务
# firewall-cmd --list-all //确认运行时规则
trusted (default, active)
interfaces: eth1 eth2 eth0 team0
forward-ports: port=5423:proto=tcp:toport=80:toaddr=
3)验证端口转发策略
从desktop0上访问server0的5423端口,与访问server0的80端口效果一样:
[root@desktop0 ~]# elinks -dump http://server0.example.com:5423/
test site. //等价命令:# elinks -dump http://172.25.0.11:5423
[root@desktop0 ~]# elinks -dump http://server0.example.com/