CentOS7防火墙教程

1. 简介

1.1 简介

防火墙是一种保护机器免受外部任何不需要的通信的方法。它允许用户通过定义一组防火墙规则来控制主机上传入的网络流量。这些规则用于对传入的通信进行排序,或者阻止它,或者允许它通过。firewalld是一个防火墙服务守护进程,它提供了一个具有D-Bus接口的动态可定制的基于主机的防火墙。由于是动态的,它支持创建、更改和删除规则,而不需要在每次规则更改时重新启动防火墙守护进程。

1.2 概念

区域(Zones):网络区域定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。预定义的区域存储在/usr/lib/firewalld/zones/目录中,可以立即应用于任何可用的网络接口。这些文件只有在修改后才会复制到/etc/firewalld/zones/目录中。下表描述了预定义区域的默认设置:

区域(zone)默认策略规则
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拒绝进入的流量,除非与出去的流量相关

 安装时,默认区域 infirewalld设置为public区域。可以更改默认区域。

预定义服务(Predefined Services):服务可以是本地端口、协议、源端口和目的地的列表,以及在启用服务时自动加载的防火墙帮助模块的列表。

运行时(Runtime)和永久(Permanent)设置:Runtime模式下,更改配置仅在运行状态下生效,重启后配置恢复原配置,永久生效命令:

~]#firewall-cmd <other options>
~]#firewall-cmd --runtime-to-permanent

Permanent模式下,更改配置在重启之前不会生效,重启后生效,永久生效命令:

~]#firewall-cmd --permanent <other options>
~]#firewall-cmd --reload

 工具:图形界面工具:firewall-config,命令行工具:firewall-cmd

2. 查看firewalld的当前状态和配置

2.1 查看firewalld当前状态

查看服务运行状态:

~]#firewall-cmd --state

有关服务状态的更多信息,可使用systemctl status子命令:

~]#systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since Sat 2021-11-20 19:34:29 CST; 2 months 19 days ago
     Docs: man:firewalld(1)
 Main PID: 3152 (firewalld)
   Memory: 25.8M
   CGroup: /system.slice/firewalld.service
           └─3152 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -j DOCKER' failed:
Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -m conntrack --ctstate RE...' failed:
Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t filter -C FORWARD -j DOCKER-ISOLATION-STAGE-1' failed:
Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t filter -n -L DOCKER-USER' failed:
Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t filter -C DOCKER-USER -j RETURN' failed:
Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t filter -C FORWARD -j DOCKER-USER' failed:
Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -D FORWARD -i docker0 -o docker0 -j DROP' failed:
Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t nat -C DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-...' failed:
Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t filter -C DOCKER ! -i docker0 -o docker0 -p tcp -d 172...' failed:
Feb 09 09:47:01 izwz93vpnhvpoegtlnppbdz firewalld[3152]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t nat -C POSTROUTING -p tcp -s 172.18.0.2 -d 172.18.0.2 ...' failed:

2.2 查看firewalld的配置

查看默认区域配置:

~]#firewall-cmd --list-all
You're performing an operation over default zone ('public'),
but your connections/interfaces are in zone 'docker' (see --get-active-zones)
You most likely need to use --zone=docker option.

public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client ssh
  ports: 3306/tcp 80/tcp 8080/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 

 说明:

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:富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。

查看指定区域配置:

~]# firewall-cmd --zone=public --list-all

查看当前区域允许哪些服务:

~]# firewall-cmd --list-services
dhcpv6-client ssh

可以发现当前配置允许ssh服务,但是22端口并没有在开放端口中显示。

3. 启停防火墙服务firewalld

解除屏蔽(对应mask):

~]# systemctl mask firewalld

启动:

~]# systemctl start firewalld

设置开机自启动: 

~]# systemctl enable firewalld

 停止:

~]# systemctl stop firewalld

关闭开机自启动: 

~]# systemctl disable firewalld

 屏蔽该服务(无法启停,和设置开机自启动):

~]# systemctl mask firewalld

 4. 流量控制

4.1 预定义服务

可以使用firewall-cmd,firewall-offline-cmd命令添加服务,或者可以直接在/etc/firewalld/services/目录下添加或修改xml文件,可以参照/usr/lib/firewalld/services/目录下文件作为模板。

4.2 紧急模式

启用紧急模式后,将禁止所有网络流量,启用紧急模式命令:

~]# firewall-cmd --panic-on

关闭紧急模式命令:

~]# firewall-cmd --panic-off

查询紧急模式开启情况:

~]# firewall-cmd --query-panic

4.3 使用预定义服务进行流量控制

控制流量最直接的方法是在防火墙中添加一个预定义的服务。这将打开所有必要的端口,并根据服务定义文件修改其他配置。

列出所有被允许的服务:

~]# firewall-cmd --list-services
ssh dhcpv6-client

列出所有预定义服务:

~]#firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ...
[输出截断]

添加预定义服务为允许的服务:

~]#firewall-cmd --permanent --add-service=<service-name>

4.4 新增预定义服务 

新增空服务:

~]#firewall-cmd --permanent --new-service=service-name

使用本地文件新增服务:

~]#firewall-cmd  --permanent --new-service-from-file=service-name.xml

 更改服务设置后,服务的更新副本将立即放入/etc/firewalld/services/目录下。

root用户可以直接手动复制服务:

~]#cp /usr/lib/firewalld/services/service-name.xml /etc/firewalld/services/service-name.xml

 5. 端口控制

列出当前zone所有被允许的端口:

~]# firewall-cmd --list-ports

添加一个允许的端口:

~]#firewall-cmd --permanent --add-port=port-number/port-type

端口类型为tcpudpsctpdccp。该类型必须与网络通信的类型相匹配。

关闭端口:

~]#firewall-cmd --permanent --remove-port=port-number/port-type
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值