CentOS防火墙设置技巧(基于firewalld)
CentOS 7及以上版本默认使用firewalld作为防火墙管理工具。若未安装,可通过以下命令安装:
sudo yum install firewalld -y
安装完成后,启动服务并设置开机自启:
sudo systemctl start firewalld
sudo systemctl enable firewalld
验证状态:
sudo firewall-cmd --state # 显示"running"表示运行中
sudo systemctl status firewalld
sudo firewall-cmd --list-all
sudo firewall-cmd --list-ports
sudo firewall-cmd --get-default-zone
使用--permanent参数确保重启后规则仍有效,格式为:
sudo firewall-cmd --permanent --zone=<区域> --add-port=<端口号>/<协议>
示例(开放HTTP端口80/tcp):
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
应用更改:
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --zone=<区域> --remove-port=<端口号>/<协议>
示例(关闭HTTP端口80/tcp):
sudo firewall-cmd --permanent --zone=public --remove-port=80/tcp
应用更改:
sudo firewall-cmd --reload
若无需永久生效,可省略--permanent参数:
# 临时开放
sudo firewall-cmd --zone=public --add-port=80/tcp
# 临时关闭
sudo firewall-cmd --zone=public --remove-port=80/tcp
无需重载,立即生效。
firewalld通过**区域(Zone)**划分网络信任级别,默认区域为public(公共网络,严格限制)。可根据需求修改:
sudo firewall-cmd --get-zones
sudo firewall-cmd --set-default-zone=<区域>
示例(将默认区域设为home,适用于家庭网络):sudo firewall-cmd --set-default-zone=home
eth0设为public):sudo firewall-cmd --zone=public --add-interface=eth0
rich规则支持基于IP地址、协议、端口、动作的复杂过滤,例如:
sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port='22' accept"
sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' reject"
sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' port protocol='tcp' port='80' accept"
应用更改后,需重载配置:
sudo firewall-cmd --reload
firewalld内置了常见服务(如HTTP、HTTPS、SSH)的规则,直接开放服务更便捷:
sudo firewall-cmd --permanent --zone=public --add-service=<服务名>
示例(开放SSH服务):sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --permanent --zone=public --remove-service=<服务名>
sudo firewall-cmd --get-services
应用更改:
sudo firewall-cmd --reload
这种方式可自动处理服务的端口和协议,避免手动输入端口号。
启用防火墙日志,便于排查问题和监控异常:
sudo firewall-cmd --permanent --zone=<区域> --add-log-prefix="Firewall: "
示例(为public区域启用日志):
sudo firewall-cmd --permanent --zone=public --add-log-prefix="Firewall: "
应用更改:
sudo firewall-cmd --reload
日志默认存储在/var/log/messages,可通过以下命令实时查看:
sudo tail -f /var/log/messages | grep Firewalld
SELinux(Security-Enhanced Linux)与firewalld配合,提供更细粒度的访问控制:
sudo setenforce 1 # 临时启用
永久生效需编辑/etc/selinux/config,将SELINUX=enforcing。http_port_t标签,允许HTTP服务使用):sudo semanage port -a -t http_port_t -p tcp 8080
安装policycoreutils-python-utils包以使用semanage命令:sudo yum install policycoreutils-python-utils -y
sudo cp -r /etc/firewalld /etc/firewalld.bak
systemctl disable <服务名>关闭不需要的服务(如FTP、Telnet),减少攻击面。