温馨提示×

ThinkPHP Linux服务器如何设置防火墙

小樊
33
2025-12-06 12:11:41
栏目: 云计算

适用于 ThinkPHP 的 Linux 服务器防火墙配置

一、先确认系统与防火墙工具

  • 查看系统版本:cat /etc/os-release
  • 常见组合与工具:
    • CentOS 7+/Rocky/AlmaLinux:默认使用 firewalld
    • Ubuntu/Debian:常用 UFW
    • 旧版 CentOS 6 或特定场景:使用 iptables
  • 原则:只开放必要端口(如 22/80/443),并优先使用系统自带防火墙管理工具。

二、按发行版配置防火墙

  • CentOS 7+/Rocky/AlmaLinux(firewalld)
    1. 启动并开机自启:sudo systemctl start firewalld && sudo systemctl enable firewalld
    2. 放行 Web 与 SSH:sudo firewall-cmd --permanent --zone=public --add-service=http --add-service=https --add-port=22/tcp
    3. 如使用数据库仅内网访问:sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
    4. 使配置生效:sudo firewall-cmd --reload
    5. 查看规则:sudo firewall-cmd --list-all
  • Ubuntu/Debian(UFW)
    1. 设置默认策略:sudo ufw default deny incoming && sudo ufw default allow outgoing
    2. 放行常用端口:sudo ufw allow 22,80,443/tcp
    3. 启用防火墙:sudo ufw enable
    4. 查看状态:sudo ufw status verbose
  • CentOS 6 或通用(iptables)
    1. 备份规则:sudo cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
    2. 编辑规则:sudo vi /etc/sysconfig/iptables,在合适位置添加
      • -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
      • -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
      • -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
    3. 保存并重启:sudo service iptables restart
    4. 注意:iptables 规则默认重启后不保留,需配合 iptables-save 持久化。

三、ThinkPHP 场景的端口与访问策略

  • 基本端口:
    • 80/443(HTTP/HTTPS)对公网开放
    • 22(SSH)仅对运维来源开放(建议固定出口 IP 的白名单)
    • 3306(MySQL)默认仅内网开放,禁止公网直连
  • 端口转发示例(如应用跑在 8080):sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent && sudo firewall-cmd --reload
  • SELinux 提示:若访问异常且 getenforce 返回 Enforcing,可临时 sudo setenforce 0 验证是否为 SELinux 限制;生产环境请改为针对性的策略而非长期关闭。

四、验证与故障排查

  • 连通性测试:
    • HTTP:telnet 服务器IP 80curl -I http://服务器IP
    • HTTPS:nc -zv 服务器IP 443
  • 服务与日志:
    • 查看 firewalld:sudo firewall-cmd --list-allsudo journalctl -u firewalld -f
    • 查看 UFW:sudo ufw status verbose
  • 远程维护安全:修改 SSH 端口 后,务必先在防火墙放行新端口再断开当前会话,避免被锁。

五、安全加固建议

  • 最小暴露面:仅开放 22/80/443;数据库、缓存、管理端口限制为内网或指定来源 IP
  • 结合云安全组:与系统防火墙双重约束,出站默认拒绝,仅放行业务所需
  • 防暴力破解:部署 fail2ban 联动防火墙封禁
  • 备份与审计:定期备份规则(如 firewalld 配置目录 /etc/firewalld/;iptables 使用 iptables-save 保存至 /etc/iptables/rules.v4),并定期审计规则。

0