Firewalld

一,什么是防火墙?防火墙的工作原理?
防火墙是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。

原理:
防火墙的原理是指设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的组合。它是不同网络或网络安全域之间信息的唯一出入口通过监测、限制、更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息、结构和运行状况,有选择地接受外部访问,对内部强化设备监管、控制对服务器与外部网络的访问,在被保护网络和外部网络之间架起一道屏障,以防止发生不可预测的、潜在的破坏性侵入。

防火墙通常使用的安全控制手段主要有包过滤、状态检测、代理服务

包过滤通过在网络间相互连接的设备上加载允许、禁止来自某些特定的源地址、目的地址、TCP端口号等规则,对通过设备的数据包进行检查,限制数据包进出内部网络。包过滤的最大优点是对用户透明,传输性能高。但由于安全控制层次在网络层、传输层,安全控制的力度也只限于源地址、目的地址和端口号,因而只能进行较为初步的安全控制,对于恶意的拥塞攻击、内存覆盖攻击或病毒等高层次的攻击手段,则无能为力。

状态检测是比包过滤更为有效的安全控制方法。对新建的应用连接,状态检测检查预先设置的安全规则,允许符合规则的连接通过,*并在内存中记录下该连接的相关信息,生成状态表。对该连接的后续数据包,只要符合状态表,就可以通过。这种方式的好处在于:由于不需要对每个数据包进行规则检查,而是一个连接的后续数据包(通常是大量的数据包)通过散列算法,直接进行状态检查,从而使得性能得到了较大提高;而且,由于状态表是动态的*,因而可以有选择地、动态地开通1024号以上的端口,使得安全性得到进一步地提高

二,关于Firewalld以及使用Firewalld和Iptabeds有什么同?
Firewalld是提供支持网络/防火墙区域(zone)定义网络链接以及接口安全等级动态防火墙管理工具。它具备对 IPv4 和 IPv6 防火墙设置的支持,支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。

系统提供了图像化的配置工具firewall-config、system-config-firewall, 提供命令行客户端firewall-cmd, 用于配置 firewalld永久性或非永久性运行时间的改变,以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。

相反,firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改因而也就没有必要重载所有内核防火墙模块了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护进程来实现,以确保守护进程中的状态和内核里的防火墙是一致的。另外,firewall daemon 无法解析由 ip*tables 和 ebtables 命令行工具添加的防火墙规则。

Firewalld和Iptables的不同:

firewalld和iptables service 之间最本质的不同是:iptables service 在 /etc/sysconfig/iptables 中储存置,而 firewalld将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里.

使用 iptables service每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则,然而使用 firewalld却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld可以在运行时间内,改变设置而不丢失现行连接

三,Firewalld的机制:
Firewalld

四,防火墙软件的安装:
yum install -y firewalld firewall-config
systemctl start firewalld.service #开启防火墙
systemctl enable firewalld.service #是遏制防火墙开机自启动

五,使用图形界面管理防火墙:
使用命令:firewall-cmd进入火墙的管理界面:
Firewalld
防火墙常用配置选项:
Firewalld

六,防火墙区域的划分:
基于用户对网络中设备和交通所给与的信任程度,防火墙可以用来将网络分割成不同的区域。
NetworkManager通知firewalld一个接口归属某个区域,新加入的接口被分配到默认区域。
Firewalld

七,firewalld常用命令的使用:

查看firewalld的状态:
[[email protected] Desktop]# firewall-cmd –state
查看当前活动的区域,并附带一个目前分配给它们的接口列表:
[[email protected] Desktop]# firewall-cmd –get-active-zones
查看默认区域:
[[email protected] Desktop]# firewall-cmd –get-default-zone
查看所有可用区域:
[[email protected] Desktop]# firewall-cmd –get-zones
列出指定域的所有设置:
[[email protected] Desktop]# firewall-cmd –zone=public –list-all
列出所有预设服务:
[[email protected] Desktop]# firewall-cmd –get-services
(这样将列出 /usr/lib/firewalld/services/ 中的服务器名称。注意:配置文件是以服务本身命名的service-name. xml)
列出所有区域的设置:
[[email protected] Desktop]# firewall-cmd –list-all-zones
设置默认区域:
[[email protected] Desktop]# firewall-cmd –set-default-zone=dmz
设置网络地址到指定的区域:
[[email protected] Desktop]# firewall-cmd –permanent –zone=internal –add-source=172.25.254.0/24
(–permanent参数表示永久生效设置,如果没有指定–zone参数,那么会加入默认区域)
删除指定区域中的网路地址:
[[email protected] Desktop]# firewall-cmd –permanent –zone=internal –remove-source=172.25.254.0/24
添加、改变、删除网络接口:
[[email protected] Desktop]# firewall-cmd –permanent –zone=internal –add-interface=eth0
[[email protected] Desktop]# firewall-cmd –permanent –zone=internal –change-interface=eth0
[[email protected] Desktop]# firewall-cmd –permanent –zone=internal –remove-interface=eth0
添加、删除服务:
[[email protected] Desktop]# firewall-cmd –permanent –zone=public –add-service=smtp
[[email protected] Desktop]# firewall-cmd –permanent –zone=public –remove-service=smtp
列出、添加、删除端口:
[[email protected] Desktop]# firewall-cmd –zone=public –list-ports
[[email protected] Desktop]# firewall-cmd –permanent –zone=public –add-port=8080/tcp
[[email protected] Desktop]# firewall-cmd –permanent –zone=public –remove-port=8080/tcp
重载防火墙:
[[email protected] Desktop]# firewall-cmd –reload
(注意:这并不会中断已经建立的连接,如果打算中断,可以使用 –complete-reload选项)

八,实验

1,实验一:配置本机双网卡,并分别配置ip,将两个不同的接口分别指定到不同的区域:
Firewalld
可以看见双网卡分别给定了ip。

[[email protected] ~]# firewall-cmd –change-interface=eth1 –zone=block #使用此命令将eth1(172.25.92.93)指定到block区域。
Firewalld
此改便均为临时修改。
测试:
在另一台主机上使用ssh命令测试,可以看见
Firewalld
当改变eth1指定的区域到trusted时,又可以使用ssh远程连接成功,说明将网卡指定的不同的区域,由于火墙对不同区域的信任程度不同,所能完成的操作也不同。

2,关于direct rules(直接的规则)

通过 firewall-cmd 工具,可以使用 –direct 选项在运行时间里增加或者移除链。
题目:设置本机(172.25.254.93)只可以被92主机使用ssh连接(也用另一台主机91测试对比)
[[email protected] ~]# firewall-cmd –direct –add-rule ipv4 filter INPUT 1 -s 172.25.254.92 -p tcp –dport 22 -j REJECT #在filter表添加规则不允许92访问本机的22端口,即ssh服务
[[email protected] ~]# firewall-cmd –direct –get-all-rules #查看规则
[[email protected] ~]# firewall-cmd –direct –remove-rule ipv4 filter INPUT 1 -s 172.25.254.92 -p tcp –dport 22 -j REJECT #删除规则

测试:
在172.25.254.92上:
Firewalld
在172.25.254.91上:
Firewalld
可以看见所添加的规则已经生效。

3,设置对于ftp服务设置只有92 主机可以访问ftp服务器(93)

[[email protected] ~]# firewall-cmd –direct –add-rule ipv4 filter INPUT 1 ! -s 172.25.254.92 -p tcp –dport 21 -j REJECT #添加规则只有172.25.254.92可以访问本机的ftp服务
[[email protected] ~]# firewall-cmd –add-service=ftp #因为火墙是开启的,所以需要在默认区域添加ftp服务,否则,所有主机都无法访问ftp服务器,则看不见实验效果

测试:在92和91主机上分别使用命令:lftp 172.25.254.93
可以看见92 可以访问ftp服务器,91不可以。

在此处插一段曾经的错误做法以及错误的原因:
笔者原本是这么做的:
[[email protected] ~]# firewall-cmd –direct –add-rule ipv4 filter INPUT 1 -s 172.25.254.92 -p tcp –dport 21 -j ACCEPT
此命令的意思是只允许92 访问ftp服务器,看上去是对的,也显示添加成功,但是结果是所有的主机都可以访问ftp服务器,达不到想要的效果,原因是什么呢?
[[email protected] services]# vim /usr/lib/firewalld/services/ftp.xml
module name=”nf_conntrack_ftp”/

可以看见ftp服务支持nf_conntrack_ftp模块。

ftp的端口号20、21的区别一个是数据端口,一个是控制端口,控制端口一般为21,而数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定.所以说在被动模式下ftp的数据端口是为止的。

由于nat表需要ip conntrack(跟踪并记录连接状态)模块支持,因此在针对FTP数据连接的nat动作也需要conntrack支持。

以上就是为什么不能用那条命令完成试验的原因咯。

4,端口转发:
[[email protected] ~]# firewall-cmd –add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.92 #意思是使用ssh连接93主机会自动转发到92主机上,即ssh连接上的是92 主机

测试结果:
Firewalld