CentOS firewall防火墙配置

CentOS7之后默认使用了firewall防火墙。

一、基本操作

# 查看是否开启
firewall-cmd --state

# 启动
systemctl start firewalld

# 停止
systemctl stop firewalld

# 重启
systemctl restart firewalld.service

# 开机启动
systemctl enable firewalld.service

# 开机禁用
systemctl disable firewalld

# 重新加载防火墙配置
firewall-cmd --reload

# 查看所有状态
firewall-cmd --list-all

# 查看public区域所有打开的端口
firewall-cmd --zone=public --list-ports

二、开放、禁用端口

1. 开放端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

80-端口号
tcp-协议
–permanent -使设置永久生效,不加的话机器重启之后失效

2. 禁用端口

防火墙相当于白名单,从列表里删除就可以禁用对应的端口了

firewall-cmd --zone=public --remove-port=80/tcp --permanent

3. 批量开放或限制端口

firewall-cmd --zone=public --add-port=6000-7000/tcp --permanent
firewall-cmd --zone=public --remove-port=6000-7000/tcp --permanent

三、开放或限制IP

可以针对IP操作,可以指定某ip访问某端口,也能禁用某ip访问某端口。

1. 端口针对某ip开放

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.55" port protocol="tcp" port="80" accept"

2. 限制ip访问端口

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.55" port protocol="tcp" port="80" reject"

3. 开放或限制IP地址段

这里用子网掩码的表格来表示。如:192.168.0.0~192.168.0.255 用 192.168.0.0/24表示

# 允许访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="80" accept"

# 限制访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="80" reject"

四、配置文件

firewalld防火墙配置是/etc/firewalld/zones/public.xml,我们也可以通过修改配置文件来设置防火墙

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <port protocol="tcp" port="8080"/>
  <rule family="ipv4">
    <source address="192.168.0.55"/>
    <port protocol="tcp" port="80"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.0.0/24"/>
    <port protocol="tcp" port="21"/>
    <reject/>
  </rule>
</zone>

五、设置区域

1. 常用的区域名称及策略规则

区域(noze) 默认策略规则
trusted 允许所有的数据包进出
home 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许进入
Internal 等同于home区域
work 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许进入
public 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许进入
external 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入
dmz 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入
block 拒绝进入的流量,除非与出去的流量相关
drop 拒绝进入的流量,除非与出去的流量相关

2. 查看网卡及所在区域

$ firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 

target:目标
icmp-block-inversion:ICMP协议类型黑白名单开关(yes/no)
interfaces:关联的网卡接口
sources:来源,可以是IP地址,也可以是mac地址
services:允许的服务
ports:允许的目标端口,即本地开放的端口
protocols:允许通过的协议
masquerade:是否允许伪装(yes/no),可改写来源IP地址及mac地址
forward-ports:允许转发的端口
source-ports:允许的来源端口
icmp-blocks:可添加ICMP类型,当icmp-block-inversion为no时,这些ICMP类型被拒绝;当icmp-block-inversion为yes时,这些ICMP类型被允许。
rich rules:富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。

可以看到当前激活(active)区域是public,区域下关联的网卡有eno1

3. 设置区域相关操作

# 查看默认当前使用的区域
firewall-cmd --get-default-zone

#查看系统默认活动区域名称、来源地址和关联的网卡
firewall-cmd --get-active-zones

#查看所有可用区域
firewall-cmd --get-zones

#查看指定网卡所在的区域
firewall-cmd --get-zone-of-interface=eno1

# 设置默认区域
firewall-cmd --set-default-zone=public

# 设置区域关联网卡
firewall-cmd --permanent --zone=drop --change-interface=eno1

# 区域中添加关联网卡
firewall-cmd --zone=drop -add-interface=eno1

# 区域中移除关联网卡
firewall-cmd --zone=drop -remove-interface=eno1

六、注意注意!!

  1. 修改之后记得使用firewall-cmd --reload重新加载配置使之生效。

  2. 如果你是用ssh连接上去修改的防火墙,如果之前防火墙未启用,你在启用之前先查看一下配置文件,是否有<service name="ssh"/>或开放了ssh对应的22端口。否则,当你启动防火墙之后,你将无法再用ssh连接服务器了。

0%