Firewalld详解

1.简介

在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。——iptables的具体配置在下一章博客中会详细介绍,本章主要介绍Firewalld

Firewalld与iptables对比

firewalld 是 iptables 的前端控制器
iptables 静态防火墙 任一策略变更需要reload所有策略,丢失现有链接
firewalld 动态防火墙 任一策略变更不需要reload所有策略 将变更部分保存到iptables,不丢失现有链接
firewalld 提供一个daemon和service 底层使用iptables
基于内核的Netfilter

firewalld跟iptables比起来至少有两大好处:

1)irewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;

2)firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。

一个重要的概念:区域管理

通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。例如,互联网是不可信任的区域,而内部网络是高度信任的区域。网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化。该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。有如下几种不同的初始化区域:

网络区名称 默认配置
阻塞区域(block) 任何传入的网络数据包都将被阻止。拒绝所有的网络连接
工作区域(work) 相信网络上的其他计算机,不会损害你的计算机。仅接受ssh、ipp-client或dhcpv6-client服务连接
家庭区域(home) 相信网络上的其他计算机,不会损害你的计算机。用于家庭网络,仅接受ssh、mdns、ipp-client或dhcpv6-client服务连接
公共区域(public) 在公共区域内使用。仅接受ssh或dhcpv6-client服务连接
隔离区域(DMZ) 隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。仅接受ssh服务连接
信任区域(trusted) 所有的网络连接都可以接受。
丢弃区域(drop) 任何传入的网络连接都被拒绝。接受的数据包都被抛弃,且没有任何回复
内部区域(internal) 信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。仅接受ssh、mdns、ipp-client或dhcpv6-client服务连接
外部区域(external) 不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。仅接受ssh服务连接

注:FirewallD的默认区域是public。

firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在“/usr/lib /firewalld/zones/”目录下。

2.Firewalld策略管理

1)安装软件

yum install firewalld firewall-config -y

2)基本命令

Firewalld详解_第1张图片

操作演示

Firewalld详解_第2张图片

Firewalld详解_第3张图片

3)火墙策略修改——图形化界面方式

Firewalld详解_第4张图片

firewall-config 
runtime     ##临时生效,立即生效
permanent   ##更改配置文件,永久的,重新加载生效

Firewalld详解_第5张图片

firewall-cmd --reload

Firewalld详解_第6张图片

4)火墙策略修改——修改火墙配置文件

vim /etc/firewalld/zones/public.xml

Firewalld详解_第7张图片

演示:我把允许的服务删掉一些,只剩下ssh和3260端口,然后重启火墙,查看策略
Firewalld详解_第8张图片
Firewalld详解_第9张图片

3.火墙中端口的相关设置

1)基本命令

Firewalld详解_第10张图片

2)下面我们利用上面命令完成下面两个实验

实验一:通过火墙接口的设置,来实现ssh的访问控制

<1>在火墙策略中去掉ssh服务

Firewalld详解_第11张图片
连接失败
Firewalld详解_第12张图片

<2>添加火墙策略

firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.6.250 -j ACCEPT		
##允许172.25.6.250主机通过22端口(ssh默认端口)访问
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22  ! -s 172.25.6.250 -j ACCEPT
##允许除了172.25.6.250主机通过22端口(ssh默认端口)访问

Firewalld详解_第13张图片
连接成功!

firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.21 -j ACCEPT
##移除策略

实验二:利用火墙策略实现路由功能

<1>准备一台双网卡主机,并配置IP分别为172.25.6.106、1.1.1.106;一台单网卡主机,IP为1.1.1.206

双网卡主机配置
Firewalld详解_第14张图片
开启火墙地址伪装功能
Firewalld详解_第15张图片

单网卡主机配置

Firewalld详解_第16张图片

2)单网卡主机通过双网卡主机的路由功能,连接172.25.6.250(通过上面的配置可以实现)

Firewalld详解_第17张图片
那么问题来了:我明明使用1.1.1.206主机连接172.25.6.250,由于路由端开启了火墙地址伪装功能,在172.25.6.250端查询是路由端连接的;所以我怎么做才能知道访问者的IP呢?

解决方案:路由端转接

服务端:添加火墙的转接策略

firewall-cmd --permanent --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.206
##当用户连接路由端时,转接到1.1.1.106上

Firewalld详解_第18张图片

测试:

我们在172.25.6.250上连接刚刚查询到的IP:172.25.6.106——查询IP后发现,IP为刚刚真正连接的主机IP

Firewalld详解_第19张图片

你可能感兴趣的:(Linux基础)