一、搭建firwalld的管理环境:
## 首先搭建好yum源(本地或者网络都OK)
## 搭建防火墙服务firewalld
[root@desktop-foundation ~]# yum install firewalld.noarch -y
[root@desktop-foundation ~]# yum install firewall-config -y
[root@desktop-foundation ~]# systemctl start firewalld.service
[root@desktop-foundation ~]# systemctl enable firewalld.service
二、系统防火墙的窗口化管理:
## 用下方命令打开防火墙的管理窗口:
[root@desktop-foundation ~]# firewall-config
# 这个图形化界面主要有四大部分
第一部分:
这一部分主要是对防火墙的一些基本管理,如载入配置,改变默认的域,改变接口、端口、ip连接的域。 如下图:
第二部分:
这一部分主要是设置 防火墙配置为永久生效,或者是暂时生效,Runtime表示暂时生效(关机、重启服务、重新载入配置都能使其失效),Permanent表示永久生效:
第三部分:
这一部分内容表示配置是基于什么方式的,Zones表示基于域的方式来设置相关策略,Service表示基于服务的方式来设置相关策略:
防火墙的域有下图几种系统默认的类型:
第四部分:
这一部分是配置的详细内容。
当第三部分选择基于域的选项时,第四部分内容如下:
而当第三部分的选择基于服务的选项时,第四部分内容如下:
其中最重要当然也最复杂的就是第四部分,下面以几个简单例子来说明图形化设置防火墙策略的方式!
## 图形化界面设置策略,使其它主机可以访问本机的apache服务:
[root@desktop-foundation ~]# firewall-config &
[root@desktop-foundation ~]# watch -n 1 firewall-cmd --list-all
开启该主机(ip为172.25.254.113)的apache服务:
在另外一台主机浏览器中测试是否能进入113这台主机的apache测试页,发现不能进入测试页,说明连接不同:
现在用图形界面配置允许其它主机访问113这台主机上的apache服务,如下:
设置永久生效:
允许访问本机的http(apache):
载入该配置:
监视画面中,该服务已经被载入系统了:
现在用另一台主机再次测试,如下图已经可以连接入apache的测试页了:
## 设置默认域为trusted
在“Options“ 选项卡中选择” Change Default Zone“:
然后再选择tusted:
此时发现在众多域中,trusted变成了粗体,这表示trusted成了默认的域,如下图:
三、命令的方式管理防火墙:
1)防火墙设置与显示域的相关命令:
首先保持防火墙为开启的状态:
[root@desktop-foundation ~]# systemctl stop firewalld.service
[root@desktop-foundation ~]# firewall-cmd --state ### 查看防火墙的状态
[root@desktop-foundation ~]# systemctl start firewalld.service
[root@desktop-foundation ~]# firewall-cmd --get-default-zone #### 查看防火墙默认生效的域
[root@desktop-foundation ~]# firewall-cmd --get-active-zones ### 查看防火墙正在生效的域
[root@desktop-foundation ~]# firewall-cmd --get-zones ### 显示防火墙所有的域类型名字
[root@desktop-foundation ~]# firewall-cmd --list-all-zones #### 列出防火墙的所有域,以及每个域的详细火墙内容
[root@desktop-foundation ~]# firewall-cmd --set-default-zone=trusted #### 设置火墙的默认生效域为trusted
[root@desktop-foundation ~]# firewall-cmd --get-services #### 得到防火墙可以控制的所有服务
2)将ip为172.25.254.2的主机加入防火墙的信赖域,实现能访问apache服务:
在设置之前先测试能否连通apache服务,发现不能连通:
[root@desktop-foundation ~]# firewall-cmd --list-all --zone=trusted ### 显示trusted域的防火墙列表
[root@desktop-foundation ~]# firewall-cmd --add-source=172.25.254.2 --zone=trusted ## 允许ip为172.25.254.2的源主机访问本主机的网络
在172.25.254.2这台主机测试能否连通本机的apache服务:
[root@desktop-foundation ~]# firewall-cmd --remove-source=172.25.254.2 --zone=trusted ### 移除ip为172.25.254.2的源主机
## 3) 关于接口的火墙设置:
[root@desktop-foundation ~]# firewall-cmd --list-all --zone=public #### 查看public域的火墙列表,发现允许接口eth0访问主机
[root@desktop-foundation ~]# firewall-cmd --remove-interface=eth0 --zone=public ##### 移除public域中的接口eth0
[root@desktop-foundation ~]# firewall-cmd --add-interface=eth0 --zone=publicsuccess ### 添加eth0接口到火墙的public域中
[root@desktop-foundation ~]# firewall-cmd --change-interface=eth0 --zone=trusted ### 将上一步public域中的接口eth0改变到trusted域中
[root@desktop-foundation ~]# firewall-cmd --list-all --zone=public
## 4)关于服务的火墙设置:
[root@desktop-foundation ~]# firewall-cmd --permanent --add-service=http ### 开放该主机的httpd服务
[root@desktop-foundation ~]# firewall-cmd --permanent --remove-service=http ### 取消开放httpd服务
[root@desktop-foundation ~]# firewall-cmd --reload ### 载入上条配置
下面我们通过几个系统中的文件来加深对服务的理解:
[root@desktop-foundation zones]# cd /usr/lib/firewalld/
上图中有两个目录,一个是services,另外一个是zones。
services目录里有许多文件,这些文件便是防火墙能够控制的所有服务的文件,每个文件记录一个服务,如下:
[root@desktop-foundation firewalld]# cd services/
我们挑选ssh这个服务对应的文件查看其内容是什么:
[root@desktop-foundation services]# vim ssh.xml
由上图可知文件记录了该服务的描述、服务名以及端口号。
再看看zones目录里面的内容:
[root@desktop-foundation firewalld]# cd zones/
由上图可知,该目录记录了我们系统所有类型的域文件。
[root@desktop-foundation zones]# vim public.xml
我们设置将http服务永久加入public域时,其时就是在上图的文件中加入对应配置。
5)关于端口的火墙配置:
[root@desktop-foundation zones]# firewall-cmd --add-port=8080/tcp --permanent ### 开放本机的tcp协议的8080端口
[root@desktop-foundation zones]# firewall-cmd --reload
[root@desktop-foundation zones]# firewall-cmd --permanent --remove-port=8080/tcp ### 取消上面配置的开放tcp协议的8080端口
[root@desktop-foundation zones]# firewall-cmd --reload
四、高级火墙设置:
火墙的高级配置,主要是针对三表五链的设置; 我们依旧使用firewall-cmd命令工具,但要加上 --direct 选项,即直接端口模式,该模式适用于程序或者服务,以便在运行时间内添加特定的防火墙规则,直接端口添加的规则优先级高,所以优先使用。
防火墙的三表五链如下图:
INPUT | OUTPUT | FORWARD | POSTROUTING | PREROUTING | |
---|---|---|---|---|---|
FILTER | * | * | * | ||
NET | * | * | * | * | |
MANGEL | * | * | * | * | * |
1)防火墙FILTER表的配置:
这里我们以设置一条input链为例,让172.25.254.2这台主机能够连通本机的apache服务:
在配置之前172.25.254.2这台主机不能在浏览器中访问本机的apache服务:
[root@desktop-foundation zones]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.2 -p tcp --dport 80 -j ACCEPT ####在直接端口模式下,添加ipv4的filter表的input链,链的内容是:当来自172.25.254.2的主机来访问本机的端口为80的tcp协议时,接受它。
[root@desktop-foundation zones]# firewall-cmd --direct --get-all-rules ###显示设定的高级路由规则
现在再在172.25.254.2这台主机的浏览器中访问本机的apache服务:
[root@desktop-foundation zones]# firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.2 -p tcp --dport 80 -j ACCEPT ##### 删除上方添加的INPUT链
2)防火墙NET表的配置:
##例1:你若访问我,我把你的访问转到了另外一台主机,从进来的时候进行net转换
[root@desktop-foundation zones]# firewall-cmd --add-forward-port=proto=tcp:port=22:toport=22:toaddr=172.25.254.213
[root@desktop-foundation zones]# firewall-cmd --add-masquerade #### 开启内核的伪装功能
测试:
使用ip为 172.25.254.2这台主机使用ssh远程连接添加火墙策略的ip为172.25.254.113这台主机:
当连接进入时,发现连接的不是172.25.254.113这台主机,而是172.25.254.213这台主机
而由于伪装功能的开启,在172.25.254.213这台主机上显示的是 172.25.254.113这台主机正在通过远程登陆访问自己:
[root@desktop-foundation zones]# firewall-cmd --remove-forward-port=proto=tcp:port=22:toport=22:toaddr=172.25.254 .213 #### 移除上面设置的火墙规则
## 例2:当1.1.1.1主机访问另172.25.254.2主机时,明显他们不在同一个网段,172.25.254.113主机将1.1.1.1转换为另外一个网段的ip你就可以访问了; 在172.25.254.113主机上转换的时候,是在出端口进行转换的。
下面为172.25.254.113主机的相关设定:
[root@desktop-foundation ~]# vim /etc/sysctl.conf
[root@desktop-foundation ~]# sysctl -a |grep ip_forward ### 查看出接口的转发功能是否开启,1表示开启,0表示不开启
172.25.254.113主机由两块网卡,下图为这两块网卡的信息:
下图为1.1.1.1主机的网络信息:
现在用1.1.1.1主机通过ssh远程连接172.25.254.2主机,如下图:
连接成功后,在172.25.254.2主机上用 w -i 命令查看登陆当前主机的是谁,发现是172.25.254.113这台主机: