Centos7 默认是已安装了 Firewall,但是没有启动的,所以需要先启动下 Firewall,同时设置开机自启动,常用命令介绍

firewalld常用指令

查看已打开的所有端口:firewall-cmd --zone=public --list-ports
查询防火防所有开放端口及规则:firewall-cmd --list-all
启动:systemctl start firewalld
停止:systemctl stop firewalld
重启:systemctl restart firewalld
查状态:systemctl status firewalld
查看运行状态:firewall-cmd --state //running 表示运行
查看激活的zone :firewall-cmd --get-active-zones
查看 firewall  版本:firewall-cmd --version
安装指令(如果没有自带需手动安装): yum install firewalld
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed

#查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略,在配置策略前,我一般喜欢先CP,以后方便直接还原)
firewall-cmd --list-all
#查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)
firewall-cmd --list-all-zones
#重新加载配置文件
firewall-cmd --reload
#更改配置后一定要重新加载配置文件:
firewall-cmd --reload

关闭防火墙

systemctl disable firewalld  禁止开机启动防火墙
systemctl stop firewalld       关闭防火墙
systemctl status firewalld      查看防火墙状态


放行端口方法

1、开启一个端口:firewall-cmd --zone=public --add-port=80/tcp --permanent    (--permanent 永久生效,没有此参数重启后失效)

开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd  --zone=public --add-port=50000-56635/tcp --permanent
firewall-cmd --zone=public --add-port=100-500/udp  --permanent
firewall-cmd --zone=public --add-port=80/tcp --add-port=8080/tcp --add-port=8443/tcp --permanent

删除端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent

指定IP访问:firewall-cmd --permanent --add-rich-rule

允许
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept"

限制IP(拉黑IP)
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="8.219.149.242" drop'
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xx.xx.xxx.x' reject"
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xx.xx.xxx.0/24' reject"

删除规则
firewall-cmd --permanent --remove-rich-rule 'rule family="ipv4" source address="8.219.149.242" drop'

Linux防火墙内的策略动作有REJECT和DROP两种,区别如下:

1.、REJECT动作会返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作。

连接马上断开,Client会认为访问的主机不存在。REJECT在IPTABLES里面有一些返回参数,参数如下:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

2、DROP动作只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时,Client容易发现自己被防火墙所阻挡。

至于使用DROP还是REJECT更合适一直未有定论,因为的确二者都有适用的场合:

1、REJECT是一种更符合规范的处理方式,并且在可控的网络环境中,更易于诊断和调试网络/防火墙所产生的问题;

2、DROP则提供了更高的防火墙安全性和稍许的效率提高,但是由于DROP不很规范(不很符合TCP连接规范)的处理方式,可能会对你的网络造成一些不可预期或难以诊断的问题。因为DROP虽然单方面的中断了连接,但是并不返回任何拒绝信息,因此连接客户端将被动的等到tcp session超时才能判断连接是否成功,这样早企业内部网络中会有一些问题,例如某些客户端程序或应用需要IDENT协议支持(TCP Port 113, RFC 1413),如果防火墙未经通知的应用了DROP规则的话,所有的同类连接都会失败,并且由于超时时间,将导致难以判断是由于防火墙引起的问题还是网络设备/线路故障。

2、重新加载 firewall,修改配置后,必须重新加载才能生效:firewall-cmd --reload

firewall-cmd --reload

3、 查看已打开的所有端口:firewall-cmd --zone=public --list-ports

firewall-cmd --zone=public --list-ports

查询所有规则

firewall-cmd --list-all

实操:

[root@localhost ~]# firewall-cmd --zone=public --list-port
9876/tcp 8090/tcp 80/tcp 8080/tcp
[root@localhost ~]# firewall-cmd --zone=public --add-port=3307/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-port
9876/tcp 8090/tcp 80/tcp 8080/tcp 3307/tcp

关闭端口方法

1、关闭 9876 端口:(--permanent 表示永久生效,没有此参数重启后失效)

firewall-cmd --zone=public --remove-port=9898/tcp --permanent
firewall-cmd --zone=public --remove-port=50000-65535/tcp --permanent
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept"

2、重新加载 firewall,修改配置后,必须重新加载才能生效:firewall-cmd --reload

firewall-cmd --reload 

实操:

[root@localhost ~]# firewall-cmd --zone=public --list-ports
9876/tcp 8090/tcp 80/tcp 8080/tcp
[root@localhost ~]# firewall-cmd --zone=public --remove-port=9876/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports
8090/tcp 80/tcp 8080/tcp

public.xml 文件修改防火墙端口

1、firewall-cmd对端口的操作,如开放端口等信息,都放在" /etc/firewalld/zones/public.xml"中记录

cat  /etc/firewalld/zones/public.xml

2、所以直接修改此文件也是可以的,这个文件会保存配置信息

  • 查看指定zone的所有信息 firewall-cmd --zone=public --list-all

  • 查看永久放行的服务

       firewall-cmd --get-service —permanent
    
  • 拒绝所有包 # firewall-cmd --panic-ond

  • 取消拒绝状态

    firewall-cmd --panic-off
    
  • 查看是否拒绝

     firewall-cmd --query-panic
    
  • 更新防火墙规则,不需要重启服务

    firewall-cmd --reload
    
  • 更新防火墙规则,并且重启服务

    firewall-cmd --complete-reload
    
  • 添加接口到指定zone,默认都在public zone

    firewall-cmd --zone=public --add-interface=eth0
    

    如果不加--permanent参数,则该规则仅仅是运行时规则,firewall-cmd --reload 后该规则消失。

  • 设置默认zone,如果不设置,默认为public,本命令立即生效无需重启 # firewall-cmd --set-default-zone=myzone

  • 查看给定zone所有打开的端口: # firewall-cmd --zone=myzone --list-ports

  • 添加一个端口到区域

    firewall-cmd --zone=myzone --add-port=8080/tcp
    

    如果不加--permanent参数,则该规则仅仅是运行时规则,firewall-cmd --reload 后该规则消失。

  • 打开一个服务 # firewall-cmd --zone=work --add-service=ssh

  • 移除服务

    firewall-cmd --zone=work --remove-service=ssh
    

firewalld服务锁定与解锁

不能添加对应端口,和启动报错:

Failed to start firewalld.service: Unit is masked.

执行命令,即可实现取消服务的锁定

 systemctl unmask firewalld

下次需要锁定该服务时执行

 systemctl mask firewalld

防火墙屏蔽IP或IP段

#禁止IP(123.56.161.140)访问机器
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="123.56.161.140" drop'
#禁止一个IP段,比如禁止123.56.*.*
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="123.56.0.0/16" drop'
#禁止一个IP段,比如禁止123.56.161.*
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="123.56.161.0/24" drop'
#禁止机器IP(123.56.161.140)从防火墙中删除
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address="123.56.161.140" drop'

IP白名单设置

#开启某个端口(指定IP可访问)

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="10.1.1.14/32" port protocol="tcp" port="80" accept"

#删除策略

firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="10.1.1.14/32" port protocol="tcp" port="80" accept"

关闭selinux

云服务器默认关闭SELinux,如若未关闭SELinux:修改/etc/selinux/config配置文件SELINUX=disabled

cat /etc/selinux/config

运行setenforce 0 临时 SELinux


永久关闭,参考以下指令关闭

sed -i "/SELINUX=enforcing/s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

命令讲解查找SELINUX=enforcing所在行,把字符串:SELINUX=enforcing 替换为字符串:SELINUX=disabled


规则和优先级介绍

这是 CentOS 7/8 防火墙(FirewallD)的规则配置文件中的一组规则,用于描述如何允许或拒绝进出本机的网络流量。具体解释如下:

  • target: 表示此规则的动作是什么,例如 default 表示按照系统默认的策略处理(可能是允许或拒绝)。
  • icmp-block-inversion: 表示是否禁止 ICMP 协议的阻止规则,no 表示不禁止。
  • interfaces: 表示应用此规则的网络接口,例如 eth0 表示应用于 eth0 网卡。
  • sources: 表示允许或拒绝的源地址,如果为空则表示所有来源。
  • services: 表示允许或拒绝的服务,例如 dhcpv6-client 和 ssh。
  • ports: 表示允许或拒绝的端口,可以指定协议类型(如 tcp/udp)和端口范围(如 1-65535)。
  • protocols: 表示允许或拒绝的网络协议,如 tcp、udp、icmp。
  • masquerade: 表示是否开启网络地址转换(NAT),yes 表示开启。
  • forward-ports: 表示转发端口的规则。
  • source-ports: 表示源端口的规则。
  • icmp-blocks: 表示 ICMP 协议的阻止规则。
  • rich rules: 表示使用高级规则(rich rules)匹配复杂的条件。

FirewallD 按照优先级从高到低的顺序匹配规则,直到找到第一条匹配的规则为止。因此,如果有多个规则匹配到了同一个数据包,那么按照规则文件中的顺序,匹配到的第一条规则将决定该数据包的处理方式。