Linux下LNMP服务器防攻击全流程指南
/etc/ssh/sshd_config
中的PermitRootLogin no
),强制使用普通用户+su
/sudo
提权;设置强密码策略(长度≥8位,包含大小写字母、数字、特殊字符),并通过chage -M 90 username
强制每90天修改密码。644
(用户可读写、组和其他只读),目录权限设为755
(用户可读写执行、组和其他可读执行);禁止使用777
权限(完全开放);将Web服务用户(如www-data
)加入最小必要组,避免赋予root权限。netstat -tulnp
或ss -tulnp
检查开放端口,用systemctl stop service_name
关闭无用服务。/etc/sysctl.conf
调整内核安全参数,例如启用SYN Cookie防止SYN Flood攻击(net.ipv4.tcp_syncookies = 1
)、限制单个IP最大连接数(net.ipv4.tcp_max_syn_backlog = 2048
)、禁止IP源路由(net.ipv4.conf.all.accept_source_route = 0
),修改后执行sysctl -p
生效。/var/log/secure
记录SSH登录、/var/log/messages
记录系统日志),通过logwatch
或ELK Stack
集中收集分析日志;使用fail2ban
自动封禁频繁登录失败的IP(如fail2ban-client set sshd banip 1.2.3.4
)。nginx.conf
中的server_tokens off;
),避免攻击者通过版本信息针对性攻击;禁用自动索引(autoindex off;
),防止目录结构泄露。allow
/deny
指令限制IP访问(如location /admin { allow 192.168.1.100; deny all; }
),仅允许可信IP访问后台;配置防盗链(valid_referers none blocked example.com; if ($invalid_referer) { return 403; }
),防止图片、视频等资源被非法盗用。limit_except GET POST HEAD { deny all; }
),拒绝PUT、DELETE等可能用于恶意修改数据的请求。add_header X-Content-Type-Options "nosniff";
(防止MIME类型嗅探)、add_header X-Frame-Options "SAMEORIGIN";
(防止点击劫持)、add_header Content-Security-Policy "default-src 'self';"
(限制资源加载来源)。www-data
)启动Nginx(修改nginx.conf
中的user www-data;
),降低权限泄露后的风险。php.ini
中禁用高危函数(disable_functions = eval, system, exec, passthru, shell_exec, popen
),防止恶意代码执行;若需使用部分函数,可通过open_basedir
限制其作用目录(如open_basedir = /var/www/html/:/tmp/
),防止访问系统关键文件。image/jpeg|image/png
、大小≤2MB),将上传目录设置在Web根目录之外(如/var/www/uploads/
),避免上传的恶意脚本被直接执行;重命名上传文件(如用md5(time().rand())
生成随机文件名),防止路径遍历攻击。$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$id]);
);对用户输入进行过滤(如htmlspecialchars($input, ENT_QUOTES, 'UTF-8')
)防止XSS攻击;避免直接包含用户可控的文件(如include $_GET['file'];
)。ALTER USER 'root'@'localhost' IDENTIFIED BY 'ComplexPass123!'
);遵循最小权限原则,仅授予用户必要的权限(如GRANT SELECT, INSERT ON database.table TO 'user'@'localhost';
),定期通过REVOKE
回收闲置权限。my.cnf
中的ssl-ca=/path/to/ca.pem; ssl-cert=/path/to/server-cert.pem; ssl-key=/path/to/server-key.pem
),强制应用使用mysql_ssl_set()
函数连接,防止数据传输中被窃取。mysqldump -u root -p database > /backup/database_$(date +%F).sql
),并将备份文件存储在异地(如云存储),确保数据丢失后可快速恢复。INPUT DROP
(拒绝所有入站)、FORWARD DROP
(拒绝所有转发)、OUTPUT ACCEPT
(允许所有出站);允许必要流量(如SSH 22、HTTP 80、HTTPS 443),例如iptables -A INPUT -p tcp --dport 80 -j ACCEPT
;允许已建立的连接(iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
);保存规则(service iptables save
)并重启服务(systemctl restart iptables
)。firewall-cmd
管理规则,例如允许HTTP/HTTPS服务(firewall-cmd --permanent --zone=public --add-service=http --add-service=https
)、允许SSH(firewall-cmd --permanent --zone=public --add-service=ssh
);重新加载配置(firewall-cmd --reload
)使更改生效。ngx_lua_waf
(基于Nginx的Lua防火墙),配置规则拦截SQL注入、XSS、CC攻击(如config.CCrate = "100/60"
限制每分钟100次请求,超过则封禁60秒);通过fail2ban
配合防火墙,自动封禁频繁攻击的IP。yum update nginx mysql php
);订阅安全公告(如CentOS Security Advisories),第一时间获取漏洞信息。Metasploit
、Burp Suite
等工具),模拟攻击检测漏洞;使用lynis
进行系统安全审计(lynis audit system
),生成报告并修复问题。