WEBKT

Linux服务器安全:实战配置,告别纸上谈兵

100 0 0 0

很多网站安全文章要么过于理论化,要么推荐大量付费服务,对于我们实际的Linux服务器环境来说,如何快速有效地提升安全性呢?本文将聚焦于Nginx配置、iptables规则以及fail2ban这三个常用工具,教你轻松抵御大部分日常低级别威胁,减少网站被骚扰的频率。

一、Nginx配置:隐藏信息,限制访问

Nginx作为Web服务器的入口,配置得当能有效降低被攻击的风险。

  • 隐藏Nginx版本信息:

    nginx.conf文件中,添加或修改以下配置:

    server_tokens off;
    

    重启Nginx服务,攻击者将无法轻易获取你的Nginx版本信息,增加攻击难度。

  • 限制HTTP方法:

    只允许常用的GET、POST等方法,禁用不常用的方法,例如DELETE、PUT等。

    if ($request_method !~ ^(GET|POST)$ ) {
        return 405;
    }
    
  • 防范HTTP Flood攻击:

    限制单个IP的连接数和请求频率。

    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s;
    server {
        location / {
            limit_req zone=mylimit burst=10 nodelay;
        }
    }
    

    解释:mylimit是自定义的zone名称,10m是共享内存大小,5r/s是每秒允许的请求数,burst=10允许突发请求数为10个,nodelay表示不延迟处理请求。

二、iptables规则:防火墙利器,精准防御

iptables是Linux自带的防火墙,通过配置规则,可以精确控制网络流量。

  • 只允许必要的端口:

    默认情况下,关闭所有端口,只开放80(HTTP)、443(HTTPS)、22(SSH)等必要的端口。

    iptables -P INPUT DROP # 默认拒绝所有入站流量
    iptables -A INPUT -i lo -j ACCEPT # 允许本地回环接口
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # 允许已建立的连接和相关连接
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许SSH连接
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许HTTP连接
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允许HTTPS连接
    iptables -P FORWARD DROP # 默认拒绝所有转发流量
    iptables -P OUTPUT ACCEPT # 允许所有出站流量
    
  • 限制SSH登录:

    限制单个IP的SSH连接频率,防止暴力破解。

    iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource
    iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --name SSH --rsource -j DROP
    

    解释:60秒内尝试连接超过4次,则丢弃数据包。

  • 保存iptables规则:

    重启服务器后,iptables规则会失效,需要保存规则。

    • CentOS/RHEL: service iptables save
    • Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4

三、fail2ban:自动防御,简单高效

fail2ban可以监控系统日志,自动屏蔽恶意IP,例如SSH暴力破解。

  • 安装fail2ban:

    # CentOS/RHEL
    yum install fail2ban
    
    # Debian/Ubuntu
    apt-get install fail2ban
    
  • 配置fail2ban:

    修改/etc/fail2ban/jail.local文件,配置需要监控的服务。

    [sshd]
    enabled = true
    port = ssh
    logpath = %(sshd_log)s
    backend = %(sshd_backend)s
    bantime  = 600  ; 封禁时间,单位秒
    maxretry = 3    ; 最大尝试次数
    findtime = 60   ; 检测时间窗口,单位秒
    

    解释:bantime是封禁时间,maxretry是最大尝试次数,findtime是检测时间窗口。

  • 启动fail2ban:

    service fail2ban start
    

总结

通过以上Nginx配置、iptables规则以及fail2ban的配置,可以有效地提升Linux服务器的安全性,抵御大部分日常低级别威胁。记住,安全是一个持续的过程,需要不断学习和更新。希望本文能帮助你告别纸上谈兵,真正提升服务器的安全性。

运维小王 Linux安全Nginx配置iptables

评论点评