跳至主要內容

防火墙


防火墙

防火墙简介

CentOS7/RHCE7是一个集合多款防火墙管理工具并存的系统。

Firewalld动态防火墙管理器服务是目前默认的防火墙管理工具,同时拥有命令行终端(CLI)和图形化界面(GUI)的配置工具。想要学习掌握firewalld防火墙应用服务,首先需要弄明白的第一个问题是到底什么是动态防火墙?

为了解答这个问题,先来回忆一下iptables service管理防火墙规则的模式:

  • 用户将新的防火墙规则添加进 /etc/sysconfig/iptables配置文件当中,再执行命令service iptables reload使变更的规则生效;
  • 在这整个过程的背后,iptables service首先对旧的防火墙规则进行了清空,然后重新完整地加载所有新的防火墙规则;
  • 而如果配置了需要reload内核模块的话,过程背后还会包含卸载和重新加载内核模块的动作;
  • 而不幸的是,这个动作很可能对运行中的系统产生额外的不良影响,特别是在网络非常繁忙的系统中。
  • 如果我们把这种哪怕只修改一条规则也要进行所有规则的重新载入的模式称为静态防火墙的话,那么firewalld所提供的模式就可以叫做动态防火墙,它的出现就是为了解决这一问题;
  • 任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新到运行中的 iptables即可。

Firewalld防火墙特点

  • Firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样。
  • 它们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
  • 对于接触Linux较早的人员对iptables比较的熟悉,但由于iptables的规则比较的麻烦,所以学习成本较高;
  • 但firewalld的学习对网络并没有那么高的要求,相对iptables来说要简单不少。
  • 就好比如手动挡汽车vs自动挡汽车,所以建议刚接触CentOS7系统的人员直接学习firewalld。

img.png

如果开启Firewalld防火墙,默认情况会阻止流量流入,但允许流量流出。

img_1.png

Firewalld防火墙区域概念

相比于传统的防火墙管理工具还支持了动态更新技术并加入了“zone区域”的概念。简单来说就是为用户预先准备了几套防火墙策略集合(策略模板),然后可以根据生产场景的不同而选择合适的策略集合,实现了防火墙策略之间的快速切换。

img_2.png

firewalld将所有网络流量划分为多个区域,从而简化防火墙管理。根据数据包源IP地址或传入网络接口等条件,流量将转入相应区域的防火墙规则。每个区域都可以具有自己要打开或者关闭的端口和服务列表。

img_3.png

Firewalld防火墙命令参数

img_4.png

Firewalld防火墙配置策略

防火墙运行方式

为了能正常使用firewalld服务和相关工具去管理防火墙,必须启动firewalld服务,同时关闭以前旧防火墙相关服务。需要注意firewalld的规则分两种状态:

  • runtime:运行时修改规则马上生效,但如果重启服务则马上失败,测试建议;
  • permanent:持久配置修改规则后需要reload重载服务才会生效,生产建议。
# 禁用旧版防火墙服务
systemctl mask iptables
systemctl mask ip6tables

# 启动firewalld防火墙,并加入开机自启动服务
systemctl start firewalld.service
systemctl enable firewalld.service

防火墙基础配置

firewalld启动后,我们需要知道使用的是什么区域,区域的规则明细又有哪些?

# 查看系统中目前已有的所有区域
[root@firewalld ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

# 通过--get-default-zone获取当前默认使用的区域
[root@firewalld ~]# firewall-cmd --get-default-zone
public

使用firewalld各个区域规则结合配置,调整默认public区域拒绝所有流量,但如果来源IP是10.0.0.0/24网段则允许。

# 临时移除默认区域的规则策略
[root@firewalld ~]# firewall-cmd --remove-service=ssh --remove-service=dhcpv6-client
success

# 添加来源是10.0.0.0/24网段,将其加入白名单(更精细化控制使用富规则)
[root@firewalld ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted

# 检查当前活动的区域配置信息
[root@firewalld ~]# firewall-cmd --get-active-zone
public
interfaces: eth0 eth1
trusted
sources: 10.0.0.0/24

防火墙端口配置

使用firewalld允许客户请求的服务器的80/tcp端口,仅临时生效,如添加--permanent重启后则永久生效。

01. 添加允许访问单个端口

# 临时添加规则策略信息
[root@firewalld ~]# firewall-cmd --add-port=8080/tcp

# 永久添加规则策略信息
[root@firewalld ~]# firewall-cmd --add-port=8080/tcp --permanent
[root@firewalld ~]# firewall-cmd --reload
说明:永久添加的配置需要重载识别

02. 添加允许访问多个端口

# 临时添加多个端口信息
[root@firewalld ~]# firewall-cmd --add-port={80/tcp,8080/tcp}

# 永久添加多个端口信息
[root@firewalld ~]# firewall-cmd --add-port={80,8080}/tcp  --permanent
[root@firewalld ~]# firewall-cmd --reload
说明:永久添加的配置需要重载识别

03. 查看检查端口放行情况

[root@firewalld ~]# firewall-cmd --list-ports
80/tcp 8080/tcp

04. 移除临时添加的端口规则

# 移除指定端口信息
[root@firewalld ~]# firewall-cmd --remove-port={80/tcp,8080/tcp}

防火墙访问策略

使用firewalld允许客户请求服务器的http https协议,仅临时生效,如添加--permanent重启则永久生效。

01. 添加允许访问单个服务信息

# 临时添加规则策略信息
[root@firewalld ~]# firewall-cmd --add-service=http

# 永久添加规则策略信息
[root@firewalld ~]# firewall-cmd --add-service=https --permanent
[root@firewalld ~]# firewall-cmd --reload
说明:永久添加的配置需要重载识别

02. 添加允许访问多个服务信息

# 临时添加多个端口信息
[root@firewalld ~]# firewall-cmd --add-service={http,https}

# 永久添加多个端口信息
[root@firewalld ~]# firewall-cmd --add-service={http,https} --permanent
[root@firewalld ~]# firewall-cmd --reload
说明:永久添加的配置需要重载识别

03. 查看检查服务放行情况

[root@firewalld ~]# firewall-cmd --list-services
http https

04. 移除临时添加的端口规则

# 移除端口信息
[root@firewalld ~]# firewall-cmd --remove-port={http,https}

防火墙端口转发

端口转发是指传统的目标地址映射,实现外网访问内网资源,流量转发命令格式:

firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

如果需要将当前的10.0.0.61:5555端口转发至后端172.16.1.9:22端口

img_5.png

01. 开启masquerade,实现地址转换功能

# firewall-cmd --add-masquerade --permanent

02. 配置转发规则信息

# firewall-cmd --permanent --zone=public --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=172.16.1.9
# firewall-cmd --reload

img_6.png