让你的服务器更安全些(Linux篇)

在这互联网无处不在的时代,信息数据对于个人开发者或者各行各业的企业来说都是不可侵犯的财产,保护信息安全始终是不可松懈的任务,为了让你的信息数据、业务更加安全,建议对你的服务器做更多的安全工作,让那些不法分子少一份可趁之机

一、系统加固

  1. 创建DC2服务器时建议使用只允许密钥方式登录

    • 创建时选择密钥登录:


    • 由密码登录方式修改为密钥登录

登录服务器使用root用户执行

  ssh-keygen -t rsa #一直回车即可
  mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys #将生成的公钥重命名
 chmod 600 authorized_keys #修改权限

修改ssh服务配置文件

    vim /etc/ssh/sshd_config 
    RSAAuthentication yes    #开启密钥登入的认证方式
    PubkeyAuthentication yes  #是否允许密钥登入
    PasswordAuthentication  no #禁止密码登录 
    :wq! #保存退出

重启ssh服务

  systemctl restart sshd

将公钥文件内容复制到本地

   cat ~/.ssh/id_rsa

PS:在本地使用复制的内容创建一个文件即可使用该文件登陆服务器

  • 使用密钥登陆测试(测试为MAC客户端,其他系统或第三方工具,可以参考网上资料)

    ssh -i 'test' 
    root@x.x.x.x
    

  1. 加强密码的管理(如使用密码登陆方式时配置)
  • 新口令不能与4个最近使用的相同

    vim /etc/pam.d/system-auth
    password    sufficient    #所在行的后面添加 remember=5
    :wq! #保存退出
    
  • 设置密码策略(定期修改密码)

    vim /etc/login.defs #修改以下参数
    PASS_MAX_DAYS   30        #用户的密码最长使用天数
    PASS_MIN_DAYS   0         #用户的密码最短使用天数
    PASS_WARN_AGE   7         #用户的密码到期提前提醒天数
    PASS_MIN_LEN    7         #最小密码长度7
    :wq! #保存退出
    
  • 修改ssh服务端口

    vim /etc/ssh/sshd_config 
    Port 64906 #不使用默认的22端口
    PermitEmptyPasswords no #禁止空密码登陆
    :wq! #保存退出
    systemctl restart sshd #重启ssh服务
    

    PS: 切记不要使用弱密码(例如:qwer1234、qazwsx123等),密码组合应至少包含大小写、数字、符号等

  1. 设置Bash历史命令的时间和条数

    vim /etc/profile
    HISTSIZE=10 #修改该值为10(建议不超1000)
    export HISTTIMEFORMAT="%F %T `whoami` " #记录历史命令执行时间
    :wq! #保存退出
    source /etc/profile #重新加载配置文件使其生效
    
  2. 防止IP SPOOF

    vim /etc/host.conf
    nospoof on #不允许服务器对IP地址进行欺骗
    :wq! #保存退出
    
  3. 关闭默认不必要的服务

    systemctl list-unit-files | grep enabled #查看开启启动的服务
    systemctl stop postfix 建议关闭邮件服务
    systemctl disable postfix #建议关闭邮件服务的随机启动
    

二、应用加固

  1. Mysql数据库
  • 新安装的mysql服务默认是空密码登陆,及时配置强密码 (密码应至少包含三种组合)

    mysql> use mysql;
    mysql> update user set password=password(‘密码’) where user=’root’;
    mysql> flush privileges; //强制刷新内存授权表,否则用的还是在内存缓冲的口令
    
  • 删除默认数据库和数据库用户

    #mysql> show databases;
    #mysql> drop database test; //删除数据库test
    #use mysql;
    #delete from db; //删除存放数据库的表信息,因为还没有数据库信息。
    #mysql> delete from user where not (user=’root’) ; // 删除初始非root的用户
    #mysql> delete from user where user=’root’ and password=”; //删除空密码的root,尽量重复操作
    #mysql> flush privileges; //强制刷新内存授权表。
    
  • 限制连接用户的数量和修改默认监听端口

    vim /etc/my.cnf
    [mysqld]
    max_user_connections= 2 #允许用户连接数
    port   = 15306 #监听端口
    :wq! #保存退出
    systemctl restart mysqld #重启mysql服务
    
  1. Redis数据库

    • 开启redis密码,并设置高复杂度密码(不重启Redis设置密码)
    echo "didiyunredispassword" | sha256sum #生成复杂密码
    redis 127.0.0.1:6379> config set requirepass 7ad93cc2522e26dc8f3f3be7771bf4c3a58ff6c92451036f1e071c4edff69640 #设置密码
    redis 127.0.0.1:6379> config get requirepass #查询密码
    (error) ERR operation not permitted #查询密码失败
    redis 127.0.0.1:6379> auth #密码验证
    redis 127.0.0.1:6379> config get requirepass #再次查询
    1) "requirepass"
    2) "7ad93cc2522e26dc8f3f3be7771bf4c3a58ff6c92451036f1e071c4edff69640" #查询成功
    

    PS:如果配置文件中没添加该密码,那么Redis重启后,密码将会失效;

  • 通过配置文件设置密码(重启生效)

    vim redis.config
    requirepass 7ad93cc2522e26dc8f3f3be7771bf4c3a58ff6c92451036f1e071c4edff69640 #设置密码
    :wq! #保存退出
    
  • 禁用和重命名高危命令

    vim redis.config #修改配置文件,禁用FLUSHDB、FLUSHALL两个命令;重命名CONFIG、SHUTDOWN命令
    rename-command CONFIG CONFIG_b9fc8327c4dee7 #重命名
    rename-command SHUTDOWN SHUTDOWN_b9fc8327c4dee7 #重命名
    rename-command FLUSHDB ""  #禁用此命令
    rename-command FLUSHALL ""  #禁用此命令
    :wq! 保存退出
    
  • 配置Redis仅监听在本地地址

    vim redis.conf #修改配置文件
    bind 127.0.0.1 10.255.0.215 #只监听回环地址和内网IP地址
    :wq! #保存退出
    
  • 修改默认6379监听端口

    vim redis.conf #修改配置文件
    port 16739 #
    :wq! #保存退出
    
  1. Nginx服务
  • 设置timeout尽量防御DDOS攻击

      vim nginx.conf
      http
      {
          client_body_timeout   10;
          client_header_timeout  30;
          keepalive_timeout     30  30;
          send_timeout          10;
      }
    
  • 限制客户端访问的方法

    server
    {
       if($request_method !~ ^(GET|HEAD|POST)$) {   
          return404;
         }
    }
    
  • 自定义Nginx版本号

    vim src/core/nginx.h #修改版本
    #define NGINX_VERSION   "1.8.1"  #修改想要显示的版本如:2.2.23
    #define NGINX_VER      "nginx/" NGINX_VERSION  #将nginx 修改成想要显示的软件名称
    #define NGINX_VAR      "NGINX" #将nginx修改成想要显示的软件名称
    :wq! #保存退出
    vim nginx.conf #隐藏版本号
    http{
        server_tokens off;
    }
    
  • 开启X-XSS-Protection HTTP响应头

    vim nginx.conf
    add_header X-Xss-Protection "1; mode=block"; #0:不启用,1:启动,  mode=block 启用XSS保护,并在检查到XSS攻击时,停止渲染页面
    
  • 设置X-Content-Options HTTP响应头

    vim nginx.conf
    add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型
    
  • 设置X-Frame-Options HTTP响应头

    vim nginx.conf
    add_header X-Frame-Options SAMEORIGIN;
    #DENY 表示该页面不允许在frame中展示,即便是在相同域名的页面中嵌套也是禁止的
    #SAMEORIGIN 表示该页面可以在相同域名页面的frame中展示
    #ALLOW-FROM url 表示该页面可以在指定来源的frame中展示
    
    PS:建议所有服务不使用默认端口

三、定时备份数据和使用防护产品

  1. 使用云服务器快照功能进行备份数据

  2. Web应用防火墙

  • 可以对各种主流的Web应用攻击进行精确识别和实时防护,可以检测攻击类型包括但不仅限于如下类型:

    1、SQL注入攻击、XSS攻击、CSRF攻击、SSRF攻击、Webshell后门、弱口令探测、反序列化攻击
    2、命令/代码执行、命令/代码注入、本地/远程文件包含攻击
    3、文件上传攻击、敏感信息泄露、XML实体注入、XPATH注入、LDAP注入
    
  • 支持用户根据HTTP头字段,自定义精确防护规则,例如源IP、User-agent字段等,用户可根据网站被攻击实际情况,配置防护策略,保障网站的安全

  • 具备防护CC攻击的能力,能够根据来源IP、URL、UA、Referer的访问频度来有效降低大流量对网站的冲击

  • 提供网站质量监控功能,能够准确清晰的了解当前网站的实时、历史运行及访问者情况

  • 更多介绍和使用方法请参考官网文档: Web应用防火墙(WAF)产品简介

  1. 专业版主机安全客户端
  • 除了提供所有基础版的安全能力,还提供更为高级的安全能力,例如主机异常检测、病毒查杀、后门网站修复等

  • 更多介绍和使用方法请参考官网文档: 主机安全专业版规格说明

  1. DDOS高防服务
  • 基础防护版

    该版本无需用户购买,只要使用滴滴云带有 EIP 的产品,都会默认免费开通

  • 高防实例版

    该版本主要为了防御大流量的 DDOS 攻击而推出的解决方案,单实例的最高清洗能力可达每秒100G,更多介绍和使用方法请参考官网文档: DDOS高防产品简介

为研发提效,全是技术干货的滴滴云技术沙龙报名中!

马上关注滴滴云公众号:

回复「上课」获取免费报名资格

回复「服务器」免费获得云服务器入门1个月体验

请使用浏览器的分享功能分享到微信等