一、防火墙
1.1 什么是防火墙?
防火墙是借助硬件和软件于内网和外网
之间产生一种保护
的屏障,所有的网络数据都必须经过防火墙,防火墙可以作为防护,通过配置策略对数据流量进行管理
。
1.2 版本使用说明
centos4/5/6版本
防火墙管理工具:用的是iptables
centos7/8
防火墙管理工具:用的是firewalld
iptable也是存在的
管理工具的作用:配置规则
规则的添加,删除,或者修改。都是工具来完成的
二、了解firewalld服务
防火墙的服务为firewalld
启动防火墙服务
systemctl start firewalld
关闭防火墙服务
systemctl stop firewalld
重新启动防火墙服务
systemctl restart firewalld
设置为开机自启动
systemctl enable firewalld
查看服务状态
systemctl status firewalld
三、了解zone
3.1 什么是防火墙的zone?
防火墙里面有很多个区域,数据是通过zone配置的规则的进行过滤互访的
。将对应的规则添加到zone里面,就可以实现拒绝和访问
。可以根据需求往不同的zone内添加规则,每个zone内都配有默认的规则。
3.2 如何将数据包导入到zone中?
定义一个源IP/网段
关联zone,这个IP或网段的数据包,就会进入关联的zone匹配规则。
如果一个数据包的源IP没有关联zone
,就看这个数据包从哪个网卡进入的。可以将网卡关联zone
,如果网卡关联zone,从这个网卡进入的数据包就会关联某个zone 。
如果一个数据包的源或者进入的网卡都没有关联zone
,会从默认
的zone里匹配规则。
关联优先级
1、source 源地址 (优先级最高)
2、interface 接收请求的网卡(优先级第二)
3、firewalld.conf 配置的默认zone(优先级最低)
这三个的优先级按顺序依次降低,按source找不到就会按interface去查找,如果前两个都找不到就会前往firewalld.conf中配置的默认zone
3.3 系统默认的zone有哪些?
3.3.1 查看系统默认的zone
[root@localhost ~] firewall-cmd --list-all-zones | grep ^[a-z] #该命令是列出所有的zone,用grep命令将默认的zone名筛选出来
block: 阻塞区域。任何一个数据包如果进入了block zone 默认是被丢弃的
dmz: 隔离区域。ssh
drop: 丢弃区域。任何一个数据包如果进入了block zone 默认是被丢弃的
external 外部区域。只有指定的连接会被接受,即ssh,而其它的连接将被丢弃或不被接受。
home: 家庭区域。cockpit dhcpv6-client mdns samba-client ssh
internal 内部区域。
libvirt (active)
public (active): 公共区域。cockpit dhcpv6-client ssh 是默认zone
trusted: 信任区域。任何一个数据包如果进入了block zone 默认是所有的包允许通过
work: 工作区域。cockpit dhcpv6-client ssh
[root@localhost ~] firewall-cmd --get-zones #获取支持的区域
3.3.2 查看zone的信息
[root@localhost ~]# firewall-cmd --list-all --zone=public
public (active) #状态
target: default
icmp-block-inversion: no
interfaces: ens33 #绑定的网卡
sources: #源地址/网段
services: ssh dhcpv6-client #服务
ports: #端口
protocols: #协议
masquerade: no #nat地址伪装
forward-ports: #端口转发
source-ports: #源端口
icmp-blocks: #icmp禁用规则
rich rules: #富规则
target:
1、 ACCEPT 允许 trust 默认就是允许
2、DROP 直接丢弃 没有ICMP回应
3、REJECT 拒绝 会有一个ICMP 报文响应
4、default 去默认zone匹配规则
四、firewalld 的配置
firewalld服务使用的管理命令是firewall-cmd
规则必须添加到zone
里面
4.1 基本命令
firewall-cmd --state #获取firewalld状态
firewall-cmd --reload #在不改变状态重新加载防火墙
firewall-cmd --complete-reload #完全重启,状态信息会丢失
4.2 注意
每次配置后需要对区域进行刷新才能生效
firewall-cmd --reload
加上永久生效的参数,不然是一次性的,重启后就不生效了
--permanent
五、通过源来配置规则关联zone
5.1 通过源的方式模板
[root@localhost ~]# firewall-cmd --help |grep source | grep -v service
--get-zone-of-source=<source>[/<mask>]|<MAC>|ipset:<ipset>
Print name of the zone the source is bound to [P]
--list-source-ports List source ports added for a zone [P] [Z]
--add-source-port=<portid>[-<portid>]/<protocol>
Add the source port for a zone [P] [Z] [T]
--remove-source-port=<portid>[-<portid>]/<protocol>
Remove the source port from a zone [P] [Z]
--query-source-port=<portid>[-<portid>]/<protocol>
Return whether the source port has been added for zone [P] [Z]
--list-sources List sources that are bound to a zone [P] [Z]
--add-source=<source>[/<mask>]|<MAC>|ipset:<ipset>
Bind the source to a zone [P] [Z]
--change-source=<source>[/<mask>]|<MAC>|ipset:<ipset>
Change zone the source is bound to [Z]
--query-source=<source>[/<mask>]|<MAC>|ipset:<ipset>
Query whether the source is bound to a zone [P] [Z]
--remove-source=<source>[/<mask>]|<MAC>|ipset:<ipset>
Remove binding of the source from a zone [P] [Z]
5.2 例子
1、将源关联zone
[root@localhost ~]# firewall-cmd --permanent --add-source=192.168.193.0/24 --zone=home
success
2、查看刚才的配置
[root@localhost ~]# firewall-cmd --list-all --zone=home
home
target: default
icmp-block-inversion: no
interfaces:
sources:
3、重新加载
[root@localhost ~]# firewall-cmd --reload
4、查看一个zone内关联了哪些源
[root@localhost ~]# firewall-cmd --list-sources --zone=home
192.168.193.0/24
5: 查看一个源是否关联了一个zone
[root@localhost ~]# firewall-cmd --query-source=192.168.193.0/24 --zone=home
yes
6: 修改一个源
[root@localhost ~]# firewall-cmd --permanent --change-source=192.168.193.0/24 --zone=public
success
[root@localhost ~]# firewall-cmd --reload
success
7: 从一个zone中移除一个源
[root@localhost ~]# firewall-cmd --remove-source=192.168.193.0/24 --zone=public --per
[root@localhost ~]# firewall-cmd --reload
8: 查看一个源关联了哪个zone
[root@localhost ~]# firewall-cmd --get-zone-of-source=192.168.193.0/24
no zone
六、通过网卡关联zone
6.1 模板
[root@localhost ~]# firewall-cmd --help | grep interface
--get-default-zone Print default zone for connections and interfaces
--get-zone-of-interface=<interface>
Print name of the zone the interface is bound to [P]
--list-interfaces List interfaces that are bound to a zone [P] [Z]
--add-interface=<interface>
Bind the <interface> to a zone [P] [Z]
--change-interface=<interface>
Change zone the <interface> is bound to [Z]
--query-interface=<interface>
Query whether <interface> is bound to a zone [P] [Z]
--remove-interface=<interface>
Remove binding of <interface> from a zone [P] [Z]
6.2 实验
1、在默认情况下, 所有的网卡都是关联了默认zone
获取默认的zone
[root@localhost ~]# firewall-cmd --get-default-zone
public
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens160
public
2、查看一个zone关联了哪些网卡
[root@localhost ~]# firewall-cmd --list-interfaces --zone=public
ens160
3、查看一个网卡是否加入了一个zone
[root@localhost ~]# firewall-cmd --query-interface=ens160 --zone=public
yes
[root@localhost ~]# firewall-cmd --query-interface=ens160 --zone=home
no
4、对于网卡不会remove ?
原因: 优先级
使用: change
5、对于网卡: 只能是change
[root@localhost ~]# firewall-cmd --change-interface=ens160 --zone=home --permanent
The interface is under control of NetworkManager, setting zone to 'home'.
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens160
home
[root@localhost ~]#
七、匹配规则
1: 如何查看zone内的规则
[root@localhost ~]# firewall-cmd --list-all --zone=home
home (active)
target: default
icmp-block-inversion: no
interfaces:
sources: 192.168.193.0/24
services: cockpit dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
2: 学会在zone内设置规则
services: cockpit dhcpv6-client mdns samba-client ssh
ports:
protocols:
这些属于基本规则配置,什么叫基本规则:
这些是常用的配置,只要将服务、或者端口、或者协议加入到这个zone内,就是允许访问的
7.1 防火墙允许服务通过
[root@localhost html]firewall-cmd --get-services #获取所有支持的服务,支持的服务存放在/usr/lib/firewalld/services目录下。
防火墙添加允许通过的服务,如http
[root@localhost html]# firewall-cmd --permanent --add-service=http --zone=home
success
重新加载
[root@localhost ~]# firewall-cmd --reload
success
查看配置的
[root@localhost ~]# firewall-cmd --list-all --zone=home
home (active)
target: default /ACCEPT /DROP /REJECT
icmp-block-inversion: no
interfaces:
sources: 192.168.193.0/24
services: cockpit dhcpv6-client http mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
移除服务:
[root@localhost ~]# firewall-cmd --remove-service=http --permanent --zone=home
7.2 防火墙允许端口通过
添加端口(端口号要加上/TCP或者/UDP)
[root@localhost ~]# firewall-cmd --add-port=80/tcp --permanent --zone=home
success
删除端口
[root@localhost ~]# firewall-cmd --remove-port=80/tcp --zone=home --per
success
重启服务
[root@localhost ~]# firewall-cmd --reload
success
7.3 防火墙允许协议通过
添加协议
[root@localhost ~]# firewall-cmd --permanent --add-protocol=tcp --zone=home
success
重新加载
[root@localhost ~]# firewall-cmd --reload
success
为什么加入规则就可以了呢?
如果你的数据包在整个zone内没有找到规则,那么默认处理的方式是拒绝
端口和协议不能同时配置
八、禁用ping
ping使用的是icmp协议
ICMP:因特网控制报文协议
.
firewall-cmd --get-icmptypes #获取所有支持的ICMP类型
firewall-cmd [--zone=区域] --add-icmp-block=icmp报文类型
将指定的ICMP报文进行阻塞。
ICMP报文可以是请求信息或者创建的应答报文,以及错误应答。
常用的报文类型有:echo-request请求报文,echo-reply响应报文。
firewall-cmd [--zone=区域] --remove-icmp-block=icmp类型
禁用指定区域指定的ICMP报文阻塞。
firewall-cmd [--zone=区域] --query-icmp-block=icmp类型
查指定区域的是否开启了指定的ICMP报文阻塞。
九、rich rule 富规则
在RHLE7/RHEL8才有
9.1 什么是富规则?
富规则:相对于基本规则而言,能够指定源以及动作
target: 是防火墙一种默认的处理动作:
但不能针对源做操作
9.1 模板
[root@localhost ~]# firewall-cmd --help |grep rich
--list-rich-rules List rich language rules added for a zone [P] [Z]
--add-rich-rule=<rule>
Add rich language rule 'rule' for a zone [P] [Z] [T]
--remove-rich-rule=<rule>
Remove rich language rule 'rule' from a zone [P] [Z]
--query-rich-rule=<rule>
Return whether a rich language rule 'rule' has been
例子
添加服务:
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.10.10.0/24 service name=http reject'
success
添加端口
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.10.10.0/24 port port=80 protocol=tcp reject'
协议:
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.10.10.0/24 protocol value=tcp reject'
十、MASQURADE 包转发功能
centos系统安装好后,没有开启包转发功能。系统只处理目的地为本机的数据包,不会转发发往其他地址的数据包。
在内核中有相应配置选项net.ipv4.ip_forward默认设置为0。
可以通过命令sysctl net.ipv4.ip_forward=1手动开启包转发功能。
防火墙的masquerade功能进行地址伪装(NAT),私网访问公网或公网访问私网都需要开启此功能来进行地址转换,否则无法正常互访。
包转发功能又叫ip伪装
开启功能
firewall-cmd --add-masquerade 添加
firewall-cmd --remove-masquerade 删除
firewall-cmd --query-masquerade 查询
开启后net.ipv4.ip_forward的值自动被设置为1,启用包转发。
如果启用了masquerade而不启用包转发的设置是没意义的,只有本机的数据能进出网络接口,那么NAT就没意义了。
手动开启包转发功能
sysctl net.ipv4.ip_forward=1
启用包转发
[root@localhost ~]# firewall-cmd --permanent --add-masquerade
注意: 来回都要在一个zone内!
十一、端口转发
要开启包转发功能才可以使用
[root@localhost ~]# firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=22:toaddr="192.168.1.1" --zone=home
[root@localhost ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# 将80端口的流量转发至8080
[root@localhost ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.1
# 将80端口的流量转发至192.168.1.1
[root@localhost ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.1:toport=8080
# 将80端口的流量转发至192.168.1.1的8080端口
十二、firewall文件
firewall服务的目录/etc/firewalld/
默认情况下,在/etc/firewalld/zones下面只有一个public.xml
如果配置了其他的zone,并永久保存,那么会自动生成对应的配置文件.
firewalld默认提供了九个zone配置文件:
block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml
系统文件在/usr/lib/firewalld/zones/
目录下。