CentOS防火墙(firewalld)使用技巧
firewalld是CentOS 7及以上版本的默认动态防火墙工具,需先掌握其核心管理命令:
sudo systemctl start firewalldsudo systemctl stop firewalld(生产环境慎用,会导致系统暴露)sudo systemctl enable firewalldsudo firewall-cmd --state(返回running表示正在运行)firewalld通过**区域(Zone)**划分不同网络环境的信任级别,每个区域预设不同的访问规则:
public(默认,适用于公网接口)、home(家庭网络,信任度较高)、work(工作网络,中等信任)、dmz(隔离区,仅允许必要服务)。sudo firewall-cmd --get-default-zonesudo firewall-cmd --set-default-zone=home(如需更严格的家庭网络防护)sudo firewall-cmd --get-active-zones(显示当前网络接口所属区域)sudo firewall-cmd --permanent --zone=public --add-port=80/tcpsudo firewall-cmd --permanent --zone=public --remove-port=80/tcpsudo firewall-cmd --permanent --list-ports(持久化配置)或sudo firewall-cmd --list-ports(当前运行时)sudo firewall-cmd --permanent --zone=public --add-port=8080-8090/tcp(一次性开放多个连续端口)firewalld内置了常见服务(如http、https、ssh)的规则,使用服务名管理更便捷:
sudo firewall-cmd --permanent --zone=public --add-service=http(等同于开放80/tcp)sudo firewall-cmd --permanent --zone=public --remove-service=httpsudo firewall-cmd --get-services(显示所有预定义服务)富规则(Rich Rules)支持基于IP地址、端口、协议等条件的精细化访问控制:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="80" accept'sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="80" reject'sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'IP伪装(Masquerading)用于将内部网络的私有IP地址转换为防火墙的公网IP,实现NAT(网络地址转换),适用于网关服务器:
sudo firewall-cmd --permanent --add-masqueradesudo firewall-cmd --permanent --remove-masqueradesudo firewall-cmd --reload端口转发用于将防火墙的某个端口流量转发到内部网络的指定主机端口,适用于内网服务器暴露服务:
sudo firewall-cmd --add-masquerade)sudo firewall-cmd --permanent --add-forward-port=port=65022:proto=tcp:toaddr=192.168.1.61:toport=22sudo firewall-cmd --reloadsudo firewall-cmd --list-all(默认区域)或sudo firewall-cmd --zone=public --list-all(指定区域)sudo firewall-cmd --permanent --zone=public --remove-service=sshsudo cp /etc/firewalld/firewalld.conf /etc/firewalld/firewalld.conf.baksudo systemctl stop firewalld。sudo firewall-cmd --set-log-denied=all开启拒绝日志,便于排查非法访问尝试。