温馨提示×

如何配置LNMP服务器防火墙

小樊
39
2025-11-16 09:57:09
栏目: 云计算

LNMP服务器防火墙配置指南

一 选择防火墙工具与原则

  • 主流发行版与工具选择:
    • CentOS 7+/RHEL 7+:优先使用 firewalld(动态管理、易用)。
    • Ubuntu/Debian:常用 UFW(简洁易上手)。
    • 旧版 CentOS 6 或需要精细控制:使用 iptables(规则灵活但更复杂)。
  • 安全原则:
    • 默认拒绝入站,按需放行;务必先放行 SSH 22/TCP,避免被锁。
    • 仅开放必要端口:HTTP 80/TCP、HTTPS 443/TCP;数据库 3306/TCP 建议仅内网或指定来源访问。
    • 变更前备份规则,变更后及时验证与持久化保存。

二 CentOS 7 及以上使用 firewalld

  • 基本操作与放行常用端口:
    • 启动与开机自启:
      • 启动:systemctl start firewalld
      • 开机自启:systemctl enable firewalld
      • 状态:firewall-cmd --state
    • 放行 Web 与数据库(示例):
      • 放行 HTTP/HTTPS(推荐用服务名):
        • firewall-cmd --permanent --zone=public --add-service=http
        • firewall-cmd --permanent --zone=public --add-service=https
      • 放行端口(等价写法):
        • firewall-cmd --permanent --add-port=80/tcp
        • firewall-cmd --permanent --add-port=443/tcp
        • 如需远程数据库:firewall-cmd --permanent --add-port=3306/tcp
      • 使配置生效:firewall-cmd --reload
    • 常用验证:
      • 查看状态与规则:firewall-cmd --list-all
  • 安全建议:
    • 数据库端口 3306 建议仅对应用服务器网段开放,例如:
      • firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port port=“3306” protocol=“tcp” accept’
      • 然后 firewall-cmd --reload
    • 不建议直接关闭防火墙(systemctl stop/disable firewalld),除非已有等效安全措施。

三 Ubuntu 使用 UFW

  • 安装与启用:
    • 安装:sudo apt update && sudo apt install ufw
    • 启用:sudo ufw enable(首次会提示确认)
  • 放行规则与常用命令:
    • 放行 SSH、HTTP、HTTPS:
      • sudo ufw allow ssh(或 sudo ufw allow 22/tcp
      • sudo ufw allow http
      • sudo ufw allow https
    • 数据库访问策略:
      • 仅本机访问 MySQL:sudo ufw allow mysql(默认即 3306,且来源限制为 localhost)
      • 指定来源访问:sudo ufw allow from <远程IP> to any port mysql
    • 查看与维护:
      • 查看状态与规则:sudo ufw status verbose
      • 禁用:sudo ufw disable
      • 重新加载:sudo ufw reload
  • 提示:
    • 若使用 PHP-FPM 监听 9000/TCP,且需对外开放(不推荐跨公网直连 9000),可临时放行:sudo ufw allow 9000/tcp;生产环境更推荐 Unix socket 本地通信。

四 旧版 CentOS 使用 iptables

  • 备份与编辑规则:
    • 备份:cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
    • 编辑:vi /etc/sysconfig/iptables
  • 规则示例(按需调整顺序,确保先放行 SSH):
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -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
    # 仅本机访问 3306
    -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
    # 其他来源访问 3306 的包丢弃(可选,更严格)
    #-A INPUT -p tcp --dport 3306 -j DROP
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    
  • 保存与生效:
    • 重启服务:/etc/init.d/iptables restart
    • 或保存当前规则:service iptables save
  • 常用维护:
    • 查看:iptables -L -n --line-numbers
    • 删除某条规则:iptables -D INPUT <序号>

五 验证与加固要点

  • 连通性验证:
    • Web:curl -I http://服务器IPhttps://域名
    • 数据库:在应用服务器上测试 mysql -h 服务器IP -u 用户 -p,或在服务器本机 mysql -u root -p
    • 防火墙状态:
      • firewalld:firewall-cmd --list-all
      • UFW:ufw status verbose
      • iptables:iptables -L -n
  • 安全加固建议:
    • 数据库 3306 默认仅 127.0.0.1 访问;如必须远程,仅对受控来源 IP 放行,并考虑启用 TLS/SSL 与强口令策略。
    • 避免使用 root 远程登录数据库;为应用创建最小权限账号。
    • CentOS 上启用 SELinux 时,必要时放行网络相关布尔值,例如:sudo setsebool -P httpd_can_network_connect_db 1(仅在确有需要时开启)。
    • 变更前先在测试环境验证,变更后保留一份当前规则备份,并定期审计与更新。

0