centos的防火墙配置

一、防火墙

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/目录下。


  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CentOS系统中,可以使用firewall-cmd命令来配置防火墙。以下是一些常用的防火墙配置命令和相关信息: 1. 检查是否允许伪装IP: - `firewall-cmd --query-masquerade` - 这个命令可以用来检查防火墙是否允许伪装IP 2. 允许防火墙伪装IP: - `firewall-cmd --add-masquerade` - 这个命令可以用来允许防火墙伪装IP 3. 禁止防火墙伪装IP: - `firewall-cmd --remove-masquerade` - 这个命令可以用来禁止防火墙伪装IP 4. 防火墙配置目录: - 配置目录:`/etc/firewalld/` - 默认区域配置目录:`/usr/lib/firewalld/zones` - 默认服务配置目录:`/usr/lib/firewalld/services` - 自定义区域规则配置目录:`/etc/firewalld/zones` 此外,如果你想允许特定端口通过防火墙,你可以使用类似以下的命令: - 允许80端口通过防火墙: - `firewall-cmd --zone=public --add-port=80/tcp --permanent` - 允许5000-5500范围的端口通过防火墙: - `firewall-cmd --zone=public --add-port=5000-5500/tcp --permanent` 记得在添加完规则后,要重新加载防火墙配置以使更改生效: - `firewall-cmd --reload` 以上是CentOS防火墙配置的一些基本命令和相关信息,你可以根据需要进行相应的配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [CentOS 防火墙配置(firewall)](https://blog.csdn.net/crayon0/article/details/127217183)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Centos防火墙配置](https://blog.csdn.net/m0_65307735/article/details/127648998)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值