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),生成报告并修复问题。