配置LNMP(Linux, Nginx, MySQL/MariaDB, PHP)服务器的防火墙是确保服务器安全的重要步骤。以下是几种常见的防火墙配置方法,具体取决于你使用的Linux发行版。
使用firewalld
配置防火墙(推荐用于CentOS/RHEL 7+)安装和启用 firewalld
(如果尚未安装):
sudo systemctl start firewalldsudo systemctl enable firewalld
开放必要端口:
sudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --permanent --add-port=22/tcp# SSHsudo firewall-cmd --permanent --add-port=3306/tcp# MySQL(建议仅内网访问)
重新加载配置:
sudo firewall-cmd --reload
查看当前规则:
sudo firewall-cmd --list-all
ufw
配置防火墙(适用于Ubuntu/Debian)安装和启用 ufw
(如果尚未安装):
sudo apt updatesudo apt install ufw
配置 ufw
规则:
sudo ufw allow 80/tcp# Nginx HTTPsudo ufw allow 443/tcp # Nginx HTTPSsudo ufw allow 3306/tcp # MySQLsudo ufw allow 22/tcp# SSH(建议限制访问)
查看 ufw
状态:
sudo ufw status
重新加载 ufw
配置(如果修改了规则):
sudo ufw reload
设置默认策略:
对于iptables
:sudo iptables -P INPUT DROPsudo iptables -P FORWARD DROPsudo iptables -P OUTPUT ACCEPT
对于 ufw
,默认策略已启用。允许已建立的连接:
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许本地回环接口流量:
sudo iptables -A INPUT -i lo -j ACCEPT
保存规则:
对于iptables
:sudo iptables-save > /etc/sysconfig/iptables
对于 ufw
,规则会自动保存。针对LNMP的特殊配置限制HTTP/HTTPS请求频率(防DDoS):
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
阻止恶意User-Agent:
sudo iptables -A INPUT -p tcp --dport 80 -m string --string "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" --algo bm -j DROP
MySQL安全:
建议MySQL仅监听内网:sudo iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
或完全阻止外网访问MySQL:sudo iptables -A INPUT -p tcp --dport 3306 -j DROP
PHP安全:
阻止常见的PHP攻击模式:sudo iptables -A INPUT -p tcp --dport 80 -m string --string "POST /wp-admin/admin-ajax.php" --algo bm -j DROPsudo iptables -A INPUT -p tcp --dport 80 -m string --string "eval(" --algo bm -j DROP
请根据你的具体需求和操作系统选择合适的防火墙配置方法,并在生产环境中进行充分测试。定期检查和更新防火墙规则是确保服务器安全的关键。