firewalld

RHEL中的防火墙种类

1.iptables

2.firewalld

3.ip6tables

4.ebtables

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

系统中防火墙的结构

一、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 &

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

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

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

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

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

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

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

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

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

/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 ##查看指定区域的信息

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

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

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

四、网络接口改变所属域

为了方便实验,我们可以安装一个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

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

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

  systemctl  restart httpd

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

                                              firewall-cmd --get-active-zones

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

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

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

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

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

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

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

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

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

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

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

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

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

测试://172.25.254.145:8080

五、reload和complete-reload的区别

用ssh服务来体现

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

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

                                                                                               firewall-cmd --reload

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

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

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

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

reload改变之后的操作不影响之前的操作
complete-reload改变所有操作包括正在运行的
六、特定的规则 direct rules

在linux中想要保证主机的绝对安全以上的策略是远远不够的,还需要设定一些更为复杂、更加具体、更加安全的设定,即特定规则

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

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

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

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

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

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

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

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

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

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

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

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

七、设定端口转发

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

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

ssh [email protected] ifconfig
八、地址伪装

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

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

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

firewall-cmd --list-all

4、再次用客户端访问ssh [email protected]成功并且w查看,实际是172.25.254.245在连接(客户端的网关是服务端的ip172.25.254.145),显示是172.252.254.105在连接,实现伪装
九、守护进程

ldd /usr/sbin/服务来查看守护进程是否守护该服务,会出现libxinetde

1、安装 xinetd

2、cd /etc/xinetd.d

vim talnet 自己编写,如下:

disabl=no 表示允许

3、systemctl restart xinetd重启服务

chconfig --list查看talnet打开

4、安装telnet服务

执行telnet localhost测试
执行结果只能登陆非root用户

5、也可以telnet ip登陆其他人的非root用户(前提对方也装了telnet且关掉火墙)

6、编辑配置文件vim /etc/xinetd.conf,设定策略

22行开始

no_access = 172.25.254.5黑名单
only_from = 172.25.254.5 白名单(优先级高)
max_load=5 最大负载超过系统的百分之五时,崩掉
cps = 3 2 并发(同时)3表示秒数为3即3秒内不能连接 2表示并发连接数
instances = 2 最大连接数为2
per_source = 10 同一客户端(同一ip)最大连接数为10


本文来自 24kmagic 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_42711214/article/details/82768341?utm_source=copy

你可能感兴趣的:(firewalld)