防火墙学习笔记

定义

在两个信任程度不同的网络之间设置的、用于加强访问控制软硬件保护措施。

信任程度不同的网络

  • 外网:
  • 内网:
  • 边界:

访问控制

  • Inbound 入站:外网 -> 内网
  • Outbound 出站:内网 -> 外网
  • 防外不防内

现代防火墙

一体化安全网关UTM,如:OPNsense、pFsense

iptables、firewalld、nftables的版本关系

CentOS6系统用的还是iptables。 自CentOS7起,系统防火墙由iptables改为了firewalld。 从CentOS8起,系统用的又是nftables。

  • Before CentOS 7:iptables
  • CentOS 7: firewalld
  • CentOS 8: nftables
  • 一般企业的免费防火墙解决方案:pfSense(通用、稳定、可扩展,需要安装一台独立虚拟机,可图形化操作)

firewalld常用命令

操作firewall-cmd

# 查看已经开放的服务(端口合集)
firewall-cmd --list-services

# 查看所有预设的服务
firewall-cmd --get-services

# 查看某个服务包含的端口,如ssh
firewall-cmd --info-service=ssh

# 放行服务
firewall-cmd --permanent --add-service=<service name>

# 放行ssh服务
firewall-cmd --permanent --add-service=ssh 

# 移除服务
firewall-cmd --permanent --remove-service=<service name> 

# 查看firewalld所有开放的规则
firewall-cmd --list-all

# 查看已经开放的端口
firewall-cmd --list-port

# 查看public zone所有开放端口
firewall-cmd --zone=public --list-ports

# 获取激活的域信息
firewall-cmd --get-active-zones

# 查看添加的规则
firewall-cmd --zone=public --list-rich-rules  

# public zone 永久允许开放8080端口的tcp流量(--permanent表示永久生效)
firewall-cmd --zone=public --add-port=8080/tcp --permanent

# public zone 永久允许开放8080端口的udp流量
firewall-cmd --zone=public --add-port=8080/udp --permanent

# 开放端口范围,永久允许开放8310-8320的tcp流量
firewall-cmd --zone=public --add-port=8310-8320/tcp --permanent   

# 取消已开放的端口
firewall-cmd --zone=public --remove-port=8080/udp --permanent

# 取消一组已开放的端口
firewall-cmd --zone=public --remove-port=8310-8320/tcp --permanent

# 重新加载防火墙配置,这样前面设置的规则才能生效。(且这样不用重启firewalld服务)
firewall-cmd --reload

# 查看firewalld的运行状态
firewall-cmd --state

# 协议类操作

# 允许协议
firewall-cmd --permanent --add-protocol=<protocol> 

# 例:icmp,即允许ping
firewall-cmd --permanent --add-protocol=icmp 

# 取消协议
firewall-cmd --permanent --remove-protocol=<protocol> 

# 查看允许的协议
firewall-cmd --list-protocols 

# 富规则配置,未验证
# 对 147.152.139.197 开放10000端口
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4"
        source address="147.152.139.197/32"
        port protocol="tcp" port="10000" accept'       

# 拒绝端口:
firewall-cmd --permanent --zone=public --add-rich-rule='
              rule family="ipv4"
              source address="47.52.39.197/32"
              port protocol="tcp" port="10000" reject'  

# 开放全部端口给指定IP段
firewall-cmd --permanent --zone=public --add-rich-rule='
              rule family="ipv4"
              source address="192.168.0.1/32" accept';

# 开放全部端口给网段
firewall-cmd --permanent --zone=public --add-rich-rule='
              rule family="ipv4"
              source address="192.168.0.0/16" accept';

firewall-cmd添加富文本规则

未实测

    #限制IP地址访问端口,reject 表示拒绝,设置为 drop 表示直接丢弃
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" reject"
    #解除限制(允许)
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" accept"

    #限制IP段访问端口
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" reject"
    #解除限制(允许)
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" accept"

    #允许某个IP的所有连接
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="<ip>" accept"
    #允许某个IP访问ssh服务
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" service name="ssh" accept"
    #允许某个IP访问icmp协议
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" protocol value="icmp" accept"

还有一个设置例子:https://blog.csdn.net/qq_50573146/article/details/125583668

系统操作firewalld

# CentOS7查询服务状态
systemctl status firewalld

#启动服务
systemctl start firewalld

#停止服务
systemctl stop firewalld

#开机自启
systemctl enable firewalld

#关闭自启
systemctl disable firewalld

#重启服务
systemctl restart firewalld

REF