防火墙学习笔记
定义
在两个信任程度不同
的网络之间设置的、用于加强访问控制
的软硬件
保护措施。
信任程度不同的网络
- 外网:
- 内网:
- 边界:
访问控制
- 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