赞
踩
防火墙是借助硬件和软件于内网和外网
之间产生一种保护
的屏障,所有的网络数据都必须经过防火墙,防火墙可以作为防护,通过配置策略对数据流量进行管理
。
centos4/5/6版本
防火墙管理工具:用的是iptables
centos7/8
防火墙管理工具:用的是firewalld
iptable也是存在的
管理工具的作用:配置规则
规则的添加,删除,或者修改。都是工具来完成的
防火墙的服务为firewalld
启动防火墙服务
systemctl start firewalld
关闭防火墙服务
systemctl stop firewalld
重新启动防火墙服务
systemctl restart firewalld
设置为开机自启动
systemctl enable firewalld
查看服务状态
systemctl status firewalld
防火墙里面有很多个区域,数据是通过zone配置的规则的进行过滤互访的
。将对应的规则添加到zone里面,就可以实现拒绝和访问
。可以根据需求往不同的zone内添加规则,每个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
[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 #获取支持的区域
[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服务使用的管理命令是firewall-cmd
规则必须添加到zone
里面
firewall-cmd --state #获取firewalld状态
firewall-cmd --reload #在不改变状态重新加载防火墙
firewall-cmd --complete-reload #完全重启,状态信息会丢失
每次配置后需要对区域进行刷新才能生效
firewall-cmd --reload
加上永久生效的参数,不然是一次性的,重启后就不生效了
--permanent
[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]
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
[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]
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内,就是允许访问的
[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
添加端口(端口号要加上/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
添加协议
[root@localhost ~]# firewall-cmd --permanent --add-protocol=tcp --zone=home
success
重新加载
[root@localhost ~]# firewall-cmd --reload
success
为什么加入规则就可以了呢?
如果你的数据包在整个zone内没有找到规则,那么默认处理的方式是拒绝
端口和协议不能同时配置
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报文阻塞。
在RHLE7/RHEL8才有
富规则:相对于基本规则而言,能够指定源以及动作
target: 是防火墙一种默认的处理动作:
但不能针对源做操作
[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'
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服务的目录/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/
目录下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。