如何在LNMP中设置防火墙规则
LNMP环境中设置防火墙规则的步骤
一、基础准备
在配置防火墙前,需完成以下基础安全设置,降低后续风险:
- 更新系统:运行
sudo yum update
(CentOS)或sudo apt update & & sudo apt upgrade
(Ubuntu),修复系统及组件漏洞。 - 限制SSH访问:禁用root远程登录(修改
/etc/ssh/sshd_config
中的PermitRootLogin no
),改用密钥认证;修改SSH端口(如Port 2222
),减少暴力破解尝试。 - 备份现有配置:若系统已有防火墙(如iptables),备份配置文件(
sudo cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
)。
二、使用firewalld配置防火墙(推荐,适用于CentOS 7+、Ubuntu 16.04+)
firewalld是动态防火墙管理工具,支持区域(Zone)和服务(Service)概念,配置更直观。
1. 安装与启动firewalld
# 安装firewalld(若未安装)
sudo yum install -y firewalld # CentOS/RHEL
sudo apt install -y firewalld # Ubuntu/Debian
# 启动firewalld并设置开机自启
sudo systemctl start firewalld
sudo systemctl enable firewalld
2. 配置LNMP必要端口
LNMP环境需开放以下端口:
- HTTP(80):Nginx网页服务
- HTTPS(443):Nginx加密网页服务
- MySQL(3306):数据库服务(建议仅允许本地或信任IP访问,见下文“安全增强”)
- SSH(22):服务器远程管理(必开)
# 允许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
3. 验证规则
# 查看当前开放的端口和服务
sudo firewall-cmd --list-all
输出应包含http
、https
、ssh
服务,且ports
字段为空(若手动添加过端口)。
三、使用iptables配置防火墙(传统方式,适用于所有Linux发行版)
iptables是Linux内核级防火墙,需手动配置规则链,适合需要精细控制的场景。
1. 备份现有规则
sudo cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # CentOS/RHEL
sudo cp /etc/iptables/rules.v4 /etc/iptables/rules.v4.bak # Ubuntu/Debian
2. 设置默认策略
默认拒绝所有入站和转发流量,允许所有出站流量(确保服务器自身能访问外网):
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
3. 添加LNMP必要规则
允许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
4. 保存并重启iptables
# 保存规则(CentOS/RHEL)
sudo service iptables save
# 重启iptables服务
sudo systemctl restart iptables
5. 验证规则
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等攻击。安装步骤参考官方文档,核心配置包括:- 在Nginx配置中添加
access_by_lua_file
指令指向waf.lua; - 设置规则路径(
config.waf.RulePath
)和日志目录(config.waf.logdir
); - 启用CC防护(
config.waf.CCrate = "100/60"
,限制每分钟100次请求)。
- 在Nginx配置中添加
五、注意事项
- 测试配置:修改防火墙规则后,务必通过浏览器、SSH等工具测试服务器访问,避免误封必要端口。
- 定期检查:每周检查防火墙规则(
sudo firewall-cmd --list-all
或sudo iptables -L
),移除不再需要的端口。 - 备份规则:每次修改规则前备份配置文件,便于故障恢复。
通过以上步骤,可在LNMP环境中建立基础的防火墙防护,提升服务器安全性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在LNMP中设置防火墙规则
本文地址: https://pptw.com/jishu/725942.html