1.linux 防火墙介绍
在 Fedora、CentOS、Red Hat 和一些类似的发行版本上,默认安装的防火墙软件是 firewalld,通过 firewall-cmd 命令来配置和控制,本文主要讲解firewalld。
Firewall-cmd 是 Linux 系统中的命令行工具,用于管理防火墙规则。通过该工具可以配置、查看和修改防火墙设置,包括开放或关闭特定端口、添加/删除访问控制列表等操作。
- 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具
- 支持IPv4、IPv6防火墙设置以及以太网桥
- 支持服务或应用程序直接添加防火墙规则接口
- 拥有两种配置模式
- 运行时配置(临时配置)
- 永久配置
Firewalld和iptables的关系
netfilter
位于Linux内核中的包过滤功能体系
称为Linux防火墙的“内核态”
Firewalld/iptables
CentOS 7默认的管理防火墙规则的工具(Firewalld)
称为Linux防火墙的“用户态”
Firewalld | iptables | |
---|---|---|
配置文件 | /usr/lib/firewalld,/etc/firewalld | /etc/sysconfig/iptables |
对规则的修改 | 不需要全部刷新策略,不丢失现行连接 | 需要全部刷新策略,丢失链接 |
防火墙类型 | 动态防火墙 | 静态防火墙 |
2.firewalld启动、查看、关闭
使用 firewall-cmd 可以对防火墙进行多种配置,比如开放指定端口、限制网络流量、添加访问控制列表等。以下是一些常用的示例命令:
#启动: firewalld
systemctl start firewalld
#查看状态:
systemctl status firewalld
#查看firewall运行状态
firewall-cmd --state
#停止:
systemctl stop firewalld
#禁用:
systemctl disable firewalld
#重新加载firewall 一般是修改firewalld以后需要重新加载
firewall-cmd --reload
#重启firewalld
systemctl restart firewalld
3.firewalld-cmd 相关命令
#安装 firewalld
sudo yum install firewalld -y
#启动 firewalld 服务并设置开机自启动:
sudo systemctl start firewalld
sudo systemctl enable firewalld
#查看版本:
firewall-cmd --version
#查看帮助:
firewall-cmd --help
#显示状态:
firewall-cmd --state
#查看所有放行的端口:
firewall-cmd --zone=public --list-ports
#更新防火墙规则:
firewall-cmd --reload
#查看区域信息:
firewall-cmd --get-active-zones
#查询指定接口所属的区域:
firewall-cmd --get-zone-of-interface=eth0
#拒绝所有包:
firewall-cmd --panic-on
#取消拒绝状态:
firewall-cmd --panic-off
#查看是否拒绝:
firewall-cmd --query-panic
# 查询ip,端口允许访问规则
firewall-cmd --list-all
4.firewalld放行端口
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 新建永久规则,开放8080端口(TCP协议)任何ip都可以访问此端口
firewall-cmd --permanent --add-port=8080/tcp
# 移除上一个命令新建的规则
firewall-cmd --permanent --remove-port=8080/tcp
# 新建永久规则,批量开放一段端口(TCP协议)9001-9100区间的端口都开放
firewall-cmd --permanent --add-port=9001-9100/tcp
#添加或者移除规则后重新加载firewall后配置才会生效
firewall-cmd --reload
5.firewalld放行白名单ip
# 新建永久规则,开放192.168.1.1单个源IP的访问
firewall-cmd --permanent --add-source=192.168.1.1
# 新建永久规则,开放192.168.1.0/24源IP段的访问
#192.168.1.0/24这个网络是指192.168.1.1-192.168.1.255之间的ip,24代表网络位24位,主机位8位
firewall-cmd --permanent --add-source=192.168.1.0/24
# 移除上述规则
firewall-cmd --permanent --remove-source=192.168.1.1
允许单个 IP 地址:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' accept"
firewall-cmd --reload
允许一个 IP 范围:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' accept"
firewall-cmd --reload
在这些命令中,–permanent 表示永久添加规则,–add-rich-rule 用于添加富规则,source address 指定了允许的 IP 地址或范围,accept 表示接受匹配的流量。
记得在添加规则后使用 --reload 来应用更改。如果你想要删除之前添加的规则,可以使用 --remove-rich-rule 选项。
6.配置规则
# 允许指定IP访问本机8080端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" accept'
# 允许指定IP段访问本机8080-8090端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080-8090" accept'
# 禁止指定IP访问本机8080端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" reject'
#移除第一条规则(所有的移除规则基本都是add改成remove)
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" accept'
命令解释:
accept 允许 reject 拒绝 drop 拒绝
–add-rich-rule 添加设置
–remove-rich-rule 移除设置
–permanent 永久生效, 需要重新载入后生效
7.防火墙zone(域)的概念
#可以得到所有的域
firewall-cmd --get-zones
1、丢弃(drop):如果使用丢弃区域,任何进入的数据包将被丢弃。这个类似与我们之前使用 iptables -j drop。使用丢弃规则意味着将不存在响应。
2、阻塞(block):阻塞区域会拒绝进入的网络连接,返回 icmp-host-prohibited,只有服务器已经建立的连接会被通过即只允许由该系统初始化的网络连接。
3、公共(public):只接受那些被选中的连接,默认只允许 ssh 和 dhcpv6-client。这个 zone 是缺省 zone。
4、外部(external):这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,即 ssh,而其它的连接将被丢弃或者不被接受。
5、隔离(dmz):如果想要只允许给部分服务能被外部访问,可以在 dmz 区域中定义。它也拥有只通过被选中连接的特性,即 ssh。
6、工作(work):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许,只允许 ssh,ipp-client 和 dhcpv6-client。
7、家庭(home):这个区域专门用于家庭环境。它同样只允许被选中的连接,即 ssh,ipp-client,mdns,samba-client 和 dhcpv6-client。
8、内部(internal):这个区域和工作区域(work)类似,只有通过被选中的连接,和 home 区域一样。
9、信任(trusted):信任区域允许所有网络通信通过。记住:因为 trusted 是最被信任的,即使没有设置任何的服务,那么也是被允许的,因为 trusted 是允许所有连接的。
8. linux查看防火墙状态和对外开放的端口状态
1.查看防火墙状态
查看防火墙状态 systemctl status firewalld
开启防火墙 systemctl start firewalld
关闭防火墙 systemctl stop firewalld
开启防火墙 service firewalld start
若遇到无法开启
先用:systemctl unmask firewalld.service
然后:systemctl start firewalld.service
2.查看对外开放的端口状态
查询已开放的端口 netstat -ntulp | grep 端口号:可以具体查看某一个端口号
查询指定端口是否已开 firewall-cmd --query-port=666/tcp
提示 yes,表示开启;no表示未开启。
3.对外开发端口
查看想开的端口是否已开:firewall-cmd --query-port=6379/tcp
添加指定需要开放的端口:firewall-cmd --add-port=123/tcp --permanent
重载入添加的端口:firewall-cmd --reload
查询指定端口是否开启成功:firewall-cmd --query-port=123/tcp
移除指定端口:firewall-cmd --permanent --remove-port=123/tcp