温馨提示×

Linux下lnmp服务器如何防攻击

小樊
47
2025-09-20 15:37:20
栏目: 云计算

Linux下LNMP服务器防攻击全流程指南

一、Linux系统安全加固:构建底层防御

  • 用户账户管理:定期审查冗余账户(如测试账户),删除无用账户;禁用root用户直接远程登录(修改/etc/ssh/sshd_config中的PermitRootLogin no),强制使用普通用户+su/sudo提权;设置强密码策略(长度≥8位,包含大小写字母、数字、特殊字符),并通过chage -M 90 username强制每90天修改密码。
  • 权限控制:遵循“最小权限原则”,Web文件权限设为644(用户可读写、组和其他只读),目录权限设为755(用户可读写执行、组和其他可读执行);禁止使用777权限(完全开放);将Web服务用户(如www-data)加入最小必要组,避免赋予root权限。
  • 端口与服务管理:关闭不必要的网络端口(如FTP默认21端口、Telnet默认23端口),仅保留Nginx(80/443)、MySQL(3306,仅内部访问)等必需端口;通过netstat -tulnpss -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记录系统日志),通过logwatchELK Stack集中收集分析日志;使用fail2ban自动封禁频繁登录失败的IP(如fail2ban-client set sshd banip 1.2.3.4)。

二、Nginx安全配置:强化Web服务防护

  • 隐藏敏感信息:移除Nginx版本号(修改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; }),防止图片、视频等资源被非法盗用。
  • HTTP方法限制:仅允许必要的HTTP方法(limit_except GET POST HEAD { deny all; }),拒绝PUT、DELETE等可能用于恶意修改数据的请求。
  • 安全响应头:添加安全HTTP头增强防御,例如add_header X-Content-Type-Options "nosniff";(防止MIME类型嗅探)、add_header X-Frame-Options "SAMEORIGIN";(防止点击劫持)、add_header Content-Security-Policy "default-src 'self';"(限制资源加载来源)。
  • 降权运行:以非root用户(如www-data)启动Nginx(修改nginx.conf中的user www-data;),降低权限泄露后的风险。

三、PHP安全设置:防范代码级攻击

  • 禁用危险函数:在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())生成随机文件名),防止路径遍历攻击。
  • 安全编码规范:使用预处理语句(PDO或MySQLi)防止SQL注入(如$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$id]););对用户输入进行过滤(如htmlspecialchars($input, ENT_QUOTES, 'UTF-8'))防止XSS攻击;避免直接包含用户可控的文件(如include $_GET['file'];)。

四、MySQL数据库安全:保护核心数据

  • 强密码与权限管理:为所有数据库用户设置复杂密码(如ALTER USER 'root'@'localhost' IDENTIFIED BY 'ComplexPass123!');遵循最小权限原则,仅授予用户必要的权限(如GRANT SELECT, INSERT ON database.table TO 'user'@'localhost';),定期通过REVOKE回收闲置权限。
  • 加密连接:启用SSL/TLS加密数据库连接(修改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),并将备份文件存储在异地(如云存储),确保数据丢失后可快速恢复。

五、防火墙配置:建立网络边界防护

  • iptables配置:设置默认策略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)。
  • firewalld配置:使用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。

六、持续维护与监控:动态防御

  • 软件更新:定期更新LNMP组件(Nginx、MySQL、PHP)及Linux内核至最新稳定版,及时修复已知漏洞(如yum update nginx mysql php);订阅安全公告(如CentOS Security Advisories),第一时间获取漏洞信息。
  • 安全审计:定期进行渗透测试(使用MetasploitBurp Suite等工具),模拟攻击检测漏洞;使用lynis进行系统安全审计(lynis audit system),生成报告并修复问题。
  • 备份与恢复:制定备份策略(每日增量备份、每周全量备份),测试备份恢复流程(如恢复到测试服务器),确保灾难发生时可快速恢复服务。

0