在配置防火墙前,需完成以下基础安全设置,降低后续风险:
sudo yum update(CentOS)或sudo apt update && sudo apt upgrade(Ubuntu),修复系统及组件漏洞。/etc/ssh/sshd_config中的PermitRootLogin no),改用密钥认证;修改SSH端口(如Port 2222),减少暴力破解尝试。sudo cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak)。firewalld是动态防火墙管理工具,支持区域(Zone)和服务(Service)概念,配置更直观。
# 安装firewalld(若未安装)
sudo yum install -y firewalld # CentOS/RHEL
sudo apt install -y firewalld # Ubuntu/Debian
# 启动firewalld并设置开机自启
sudo systemctl start firewalld
sudo systemctl enable firewalld
LNMP环境需开放以下端口:
# 允许HTTP、HTTPS、SSH服务(自动开放对应端口)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
# 重新加载配置使更改生效
sudo firewall-cmd --reload
# 查看当前开放的端口和服务
sudo firewall-cmd --list-all
输出应包含http、https、ssh服务,且ports字段为空(若手动添加过端口)。
iptables是Linux内核级防火墙,需手动配置规则链,适合需要精细控制的场景。
sudo cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # CentOS/RHEL
sudo cp /etc/iptables/rules.v4 /etc/iptables/rules.v4.bak # Ubuntu/Debian
默认拒绝所有入站和转发流量,允许所有出站流量(确保服务器自身能访问外网):
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
允许HTTP(80)、HTTPS(443)、SSH(22)端口,以及已建立的连接(避免中断现有会话):
# 允许已建立的连接和回环接口
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
# 允许HTTP(80)、HTTPS(443)、SSH(22)端口
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# (可选)允许MySQL(3306)端口(建议限制IP)
# sudo iptables -A INPUT -p tcp --dport 3306 -s 信任IP -j ACCEPT
# 保存规则(CentOS/RHEL)
sudo service iptables save
# 重启iptables服务
sudo systemctl restart iptables
sudo iptables -L -n --line-numbers
检查输出中是否有ACCEPT规则的dport为80、443、22。
限制MySQL端口访问:
MySQL(3306)默认监听所有IP,建议仅允许本地或信任IP访问(以firewalld为例):
sudo firewall-cmd --permanent --remove-service=mysql # 移除全局开放
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="信任IP" port protocol="tcp" port="3306" accept'
sudo firewall-cmd --reload
隐藏Nginx版本信息:
修改Nginx配置文件(/usr/local/nginx/conf/nginx.conf或/etc/nginx/nginx.conf),添加:
server_tokens off;
重启Nginx使配置生效:sudo systemctl restart nginx。
禁用PHP危险函数:
编辑php.ini(/etc/php.ini或/usr/local/php/etc/php.ini),禁用exec、passthru、shell_exec等高危函数:
disable_functions = exec,passthru,shell_exec,system
重启PHP-FPM:sudo systemctl restart php-fpm。
使用Web应用防火墙(WAF):
部署ngx_lua_waf(基于Nginx的LUA WAF),拦截SQL注入、XSS等攻击。安装步骤参考官方文档,核心配置包括:
access_by_lua_file指令指向waf.lua;config.waf.RulePath)和日志目录(config.waf.logdir);config.waf.CCrate = "100/60",限制每分钟100次请求)。sudo firewall-cmd --list-all或sudo iptables -L),移除不再需要的端口。通过以上步骤,可在LNMP环境中建立基础的防火墙防护,提升服务器安全性。