firewalld

RHEL中的防火墙种类

1.iptables

2.firewalld

3.ip6tables

4.ebtables

这些软件本身并不具备防火墙功能,他们的作用都是在用户空间中管理和维护规则,只不过规则结构和使用方法不一样罢了,真正利用规则进行过滤是由内核的netfilter完成的

系统中防火墙的结构

firewalld_第1张图片

一、firewalld的认识

1、firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。

2、firewalld将网卡分为不同的区域(区域),这些区域的区别在于对待来访的用户及传输的数据包的默认动作的不同,通过制定一  些安全策略从而保证系统在被访问或传输数据时的安全。

二、firewalld区域(zones)

      firewalld分为九个区域,含义如下:

      trust(信任):可接受所有的网络连接;

      home(家庭):用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服务连接;

      internal(内部):用于内部网络,仅接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服务连接;

      work(工作区):用于工作区,仅接受ssh、ipp-client、dhcpv6-client服务连接;

      public(公共):用于公共区域的使用,仅接受ssh、dhcpv6-client服务,为firewalld的默认区域;

      external(外部区域):出去的ipv4的网络连接经过此区域的伪装和转发,只支持ssh服务;

      dmz(非军事区):仅接受ssh服务;

      block(限制):拒绝所有的网络服务;

      drop(丢弃):任何访问的网络数据包都会被丢弃,没有任何回应。

三、firewalld的控制命令

1、firewalld图形管理工具:firewall-config &

firewalld_第2张图片

           Runtime                  ##临时性修改会立即生效,服务重启后消失

           Permanet                ##永久性修改,需要重启服务后才会生效

监控命令watch -n 1 firewall-cmd --list-all

临时性修改:(会立即生效)

firewalld_第3张图片

永久性修改:(不会立即生效)

firewalld_第4张图片

需要重启防火墙服务systemctl restart firewalld

会发现重启之后临时添加的https服务消失了 永久添加的http服务出现了

firewalld_第5张图片

永久性更改火墙的服务,会记录到防火墙的配置文件中/etc/firewalld/zones  ls

public.xml.old是对public.xml的备份

firewalld_第6张图片

/usr/lib/firewalld/zones目录下是对所有火墙服务状态的记录,永久性更改火墙服务,该目录下的文件也会及时做出相应的修改

2、firewall-cmd --state                                     ##查看防火墙状态

3、firewall-cmd --get-active-zones              ##查看被激活的区域(即添加网卡的区域)

4、firewall-cmd --get-default-zone               ##查看当前默认区域 

5、firewall-cmd --get-zones                           ##查看firewalld所有的区域

6、firewall-cmd --zone=public --list-all        ##查看指定区域的信息

firewalld_第7张图片

7、firewall-cmd  --list-all-zones                     ##列出所有区域的详细设置

firewalld_第8张图片

8、firewall-cmd --get-services                      ##查看可通过firewalld进行设定的系统中的服务

9、firewall-cmd --set-default-zone=dmz    ##设定默认区域,如下图为设置默认区域为dmz(非军事区):仅接受ssh服务;

firewalld_第9张图片

四、网络接口改变所属域

为了方便实验,我们可以安装一个httpd服务来检测试验的效果yum install httpd -y

给服务端配置两张网卡 eth0 ip为172.25.254.145

                                           eth1  ip为192.168.0.145

1、改变网卡所属域

1)  将默认区域设为dmz   firewall-cmd --set-default-zone=dmz

可以看到,eth0,eth1在dmz域 firewall-cmd --list-all

firewalld_第10张图片

2)为了实验效果,我们在apache默认发布目录下,写入内容,并重启服务生效

      echo 172.25.254.145>/var/www/html/index.html

      systemctl  restart httpd

firewalld_第11张图片

3)然后将eth1加入信任域:firewall-cmd  --change-interface=eth1  --zone=trusted

                                                  firewall-cmd --get-active-zones

firewalld_第12张图片

4)进行测试,用eth1所属网卡访问apache可以查看到刚才我们写入的内容,而eth0不行,表示添加策略成功//172.25.254.145

firewalld_第13张图片

firewalld_第14张图片

上面的更改为临时性更改,重启火墙服务后会消失

2、移除和添加网卡到域

1)移除 : firewall-cmd --remove-interface=eth1

2)添加 : firewall-cmd --get-active-zones

3、将网段添加到信任域 : firewall-cmd --add-source=192.168.0.0/24 --zone=trusted

                                             firewall-cmd --list-all --zone=trusted

firewalld_第15张图片

4、将服务移除出信任域:firewall-cmd --remove-source=192.168.0.145/24 --zone=trusted

firewalld_第16张图片

5、将服务加入信任区域,其实只是将其端口加入允许列表,实验如下

1)先将http加入允许public域: firewall-cmd  --add-service=http --zone=public

     然后加如eth0和eth1: firewall-cmd --change-interface-eth1(/eth0) --zone=public

   ##注意:此时eth0和eth1也应该在添加在public域中,并且public域必须为激活(active)状态

firewalld_第17张图片

2)此时两块网卡都可以访问

firewalld_第18张图片

firewalld_第19张图片

3)此时将http配置文件/etc/httpd/conf/httpd.conf这里改变为8080

firewalld_第20张图片

4)改变完后,两块网卡都不能访问,即使http已经加入火墙允许列表

firewalld_第21张图片

firewalld_第22张图片

5)因为实际火墙默认http服务端口为80,在/usr/lib/firewalld/services/http.xml下可以查

firewalld_第23张图片

6)所以为了可以使8080可以使用,可以将8080端口加入允许列表 :

        firewall-cmd --zone=public --add-port=8080/tcp

        firewall-cmd --list-all --zone=public

###还可以将/usr/lib/firewalld/services/hhtp.xml下的端口改为8080

firewalld_第24张图片

    测试:

firewalld_第25张图片

firewalld_第26张图片

五、reload和complete-reload的区别

用ssh服务来体现

1)用客户端先ssh链接到服务端: ssh [email protected]

firewalld_第27张图片

2)此时将ssh移除出火墙允许列表(服务端),用reload重启服务  : firewall-cmd --permanent --remove-service=ssh

                                                                                                   firewall-cmd --reload

firewalld_第28张图片

3)此时在用客户端在打开一个shell用ssh链接服务端,将被拒绝: ssh [email protected]

     但是之前链接的只要没有退出来还可以继续使用

firewalld_第29张图片

4)这时我们如果用complete-reload重启服务 firewall-cmd  --complete-reload

      之前链接的也将不能工作,会卡住,不能执行命令

firewalld_第30张图片

reload改变之后的操作不影响之前的操作
complete-reload改变所有操作包括正在运行的

六、特定的规则 direct rules

通过firewall-cmd工具,可以使用--direct选项在运行时间里增加或者移除链。如果不熟悉iptables,使用直接接口非常危险,因为可能无意间导致防火墙被入侵。直接端口模式使用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用

1)firewall-cmd --direct --get-all-rules查看特定规则,如下图可以看到为空,下面我们进行编写实例

和iptables有点相似,规则: firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.245 -p  tcp --dport 80 -j REJECT表示不允许172.25.254.245这个ip访问本机         ##添加规则

##参数filter(本地数据限制):(-s源地址,-d目的地址,-p协议,--dport端口,-j行为/REJECT拒绝/ACCEPT同意/DROP丢弃)

 firewall-cmd --direct --get-all-rules                         ##列出规则

firewalld_第31张图片

2)我们可以查看大条件是允许http服务,但上面我们编写了特定的规则,实验可以看到192.168.0.245的这台主机不能访问,但其他主机可以

firewalld_第32张图片

firewalld_第33张图片

firewalld_第34张图片

3)下面我们将刚才编写的规则移除,再次编写在前面加入!,表示除了192.168.0.245这台主机以外,其他的主机不能访问http服务       

    firewall-cmd --direct --get-all-rules

    firewall-cmd --direct --remove-rule ipv4 filter INPUT 0 -s 192.168.0.245 -p tcp ==dport 80 -j REJECT

    firewall-cmd --direct --get-all-rules

    firewall-cmd --direct --add-rule ipv4 filter INPUT 0 ! -s 192168.0.245 -p tcp ==dport 80 -j REJECT

    firewall-cmd --direct --get-all-rules

firewalld_第35张图片

4)实验测试,此时只有172.25.254.245这台主机可以访问,其他不可以

firewall优先级先去direct规则里查找,如果有则按direct规则运行,如果没有则按默认list-all里的执行(默认允许就可以,没有就不行)

firewalld_第36张图片

firewalld_第37张图片

七、设定端口转发

1)firewall-cmd --permanent--add-masquerade打开masquerade伪装功能

2)firewall-cmd --permanent  --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.45

      ##使用22端口(ssh服 务)链接到本机的主机将其链接到172.25.254.45上

    firewall-cmd--reload

   firewall-cmd --list-all

firewalld_第38张图片

3)测试客户端(172.25.254.245)连接172.25.254.145(服务端的ip)结果连接到了172.25.254.45上

   ssh [email protected]    ifconfig   ##注意ssh连接时输入的密码为172.25.254.45的密码

firewalld_第39张图片

firewall-cmd --permanent  --zone=public --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.45

firewall-cmd --reload

###将上一步还原

八、RichRules地址伪装

使用该方法,可以用比直接接口方式更易理解的方法建立复杂防火墙规则,此外,还能永久保留设置,这种语法使用关键词值

主要参数:source源地值,destination目的地址,service服务名称,port端口,protocol协议名

对desktop服务端 172.25.254.145    192.168.0.145

server   192.168.0.245

1、先将masuerade关掉 firewall-cmd --list-all    firewall-cmd --permanent--remove-masquerade

firewalld_第40张图片

2、用客户端访问172.25.254.145不能成功  ssh [email protected]

3、加入地址伪装firewall-cmd--add-rich-rule='rule family=ipv4 masquerade'

    firewall-cmd --list-all

firewalld_第41张图片

4、再次用客户端访问ssh [email protected]成功并且w查看,实际是192.168.0.245在连接(客户端的网关是服务端的ip192.168.0.145),显示是172.252.254.145在连接,实现伪装

firewalld_第42张图片

firewalld_第43张图片

 

 

你可能感兴趣的:(firewalld)