Centos服务器和redis和nginx和mysql基础安全加固处理

Centos 基本安全加固

确保root是唯一的UID为0的帐户 或者修改root用户名称为其他用户
     除root以外其他UID为0的用户(查看命令cat /etc/passwd | awk -F: '($3 == 0) { print $1 }'|grep -v '^root$')都应该删除,或者为其分配新的UID  或者修改root用户
       例如: hanye:x:0:0:root:/root:/bin/bash   登录使用hanye用户登录
开启地址空间布局随机化 
    在/etc/sysctl.conf  文件中设置以下参数: kernel.randomize_va_space = 2 
     或者执行命令: sysctl -w kernel.randomize_va_space=2
设置用户权限配置文件的权限
    chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow
    chmod 0644 /etc/group  
    chmod 0644 /etc/passwd  
    chmod 0400 /etc/shadow  
    chmod 0400 /etc/gshadow  
    chattr +i   /etc/passwd /etc/shadow /etc/group /etc/gshadow
访问控制配置文件的权限设置
    chown root:root /etc/hosts.allow 
    chown root:root /etc/hosts.deny 
    chmod 644 /etc/hosts.deny
    chmod 644 /etc/hosts.allow
确保SSH LogLevel设置为INFO,记录登录和注销活动
    编辑 /etc/ssh/sshd_config 文件以按如下方式设置参数(取消注释):
      LogLevel INFO
确保rsyslog服务已启用 记录日志用于审计
    systemctl enable rsyslog
    systemctl start rsyslog
设置SSH空闲超时退出时间,可降低未授权用户访问其他用户SSH会话的风险
    编辑/etc/ssh/sshd_config,将ClientAliveInterval 设置为300到900,即5-15分钟,将ClientAliveCountMax设置为0-3之间。
       ClientAliveInterval 600
       ClientAliveCountMax 2
    或者设置: cat /etc/profile  添加  export TMOUT=600
设置较低的Max AuthTrimes参数将降低SSH服务器被暴力***成功的风险。
    在/etc/ssh/sshd_config中取消MaxAuthTries注释符号#,设置最大密码尝试失败次数3-6,
       MaxAuthTries 4
确保密码到期警告天数为7或更多
    在 /etc/login.defs 中将 PASS_WARN_AGE 参数设置为7-14之间,建议为7:
       PASS_WARN_AGE 7
    同时执行命令使root用户设置生效: 
       chage --warndays 7 root
禁止SSH空密码用户登录 
    编辑文件/etc/ssh/sshd_config,将PermitEmptyPasswords配置为no:
       PermitEmptyPasswords no
强制用户不重用最近使用的密码,降低密码猜测***风险
    在/etc/pam.d/password-auth和/etc/pam.d/system-auth中password sufficient pam_unix.so 这行的末尾配置remember参数为5-24之间,原来的内容不用更改,只在末尾加了remember=5。
检查密码长度和密码是否使用多种字符类型
    编辑/etc/security/pwquality.conf,把minlen(密码最小长度)设置为8-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中的3类或4类)设置为3或4。如:
      minlen=10
      minclass=3
设置密码修改最小间隔时间,限制密码更改过于频繁
    在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7:
    PASS_MIN_DAYS 7
    需同时执行命令为root用户设置:
    chage --mindays 7 root
设置密码失效时间,强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登录方式
    使用非密码登录方式如密钥对,请忽略此项。在 /etc/login.defs中将 PASS_MAX_DAYS 参数设置为 60-180之间,如:
    PASS_MAX_DAYS 90
    需同时执行命令设置root密码失效时间:
    chage --maxdays 90 root

redis 安全配置

redis 修改或者禁用危险的命令,或者尽量避免谁都可以使用这些命令

rename-command FLUSHALL ""    #禁用 FLUSHALL
rename-command FLUSHDB  ""    #禁用 FLUSHDB
rename-command CONFIG   ""    #禁用 CONFIG 
rename-command KEYS     ""    #禁用 KEYS
rename-command SHUTDOWN ""    #禁用 SHUTDOWN
rename-command DEL ""         #禁用 DEL
rename-command EVAL ""        #禁用 EVAL
或者替换为其他执行命令
rename-command FLUSHALL deleteall       #FLUSHALL 命令修改为 deleteall
rename-command FLUSHDB  deletedatabase  #FLUSHDB  命令修改为 deletedatabase 
rename-command CONFIG   
rename-command KEYS     
rename-command SHUTDOWN 
rename-command DEL          
rename-command EVAL       
修改 默认监听端口和ip地址
    找到redis.conf 修改 port 和 bind 配置
    vim  /usr/local/redis/etc/redis.conf
       port 8369   #修改端口为8369
       bind 127.0.0.1 10.29.129.179  #修改监听ip  如果是自己内网链接 监听127.0.0.1,如果内网其他服务器也要链接 则监听内网ip地址
  限制redis 配置文件访问权限
     chmod 600 /usr/local/redis/etc/redis.conf
 禁止root用户启动
      groupadd -g 1002 redis
      useradd -g 1002 -u 1002 -M -s /sbin/nolog redis 
      sudo -u redis /use/local/bin/redis-server /usr/local/redis/etc/redis.conf 
打开保护模式(访问控制)
    打开保护模式 protected-mode yes

mysql安全配置

MySQL服务不允许匿名登录

delete from user where user='';
flush privileges
禁用local-infile选项
    禁用local_infile选项会降低***者通过SQL注入漏洞器读取敏感文件的能力
    编辑Mysql配置文件 my.cnf,在mysqld 段落中配置local-infile参数为0,并重启mysql服务: 
    local-infile=0
禁用skip_symbolic_links选项  禁用符号链接以防止各种安全风险
    skip_symbolic_links=yes
修改默认3306端口 
    编辑my.cnf文件,mysqld 段落中配置新的端口参数,并重启MySQL服务
    port=33066
禁止使用--skip-grant-tables选项启动MySQL服务
    编辑Mysql配置文件my.cnf,删除skip-grant-tables参数,并重启mysql服务  
确保log-raw选项没有配置为ON
    当log-raw记录启用时,有权访问日志文件的人可能会看到纯文本密码。
    编辑Mysql配置文件my.cnf,删除log-raw参数,并重启mysql服务

Nginx安全加固

Nginx后端服务指定的Header隐藏状态  隐藏Nginx后端服务X-Powered-By头
    隐藏Nginx后端服务指定Header的状态: 
    在http下配置proxy_hide_header项;
    增加或修改为 proxy_hide_header X-Powered-By; proxy_hide_header Server;
检查是否配置Nginx账号锁定策略
    Nginx服务建议使用非root用户(如nginx,www)启动,并且确保启动用户的状态为锁定状态。可执行passwd -l <Nginx启动用户> 如passwd -l nginx 来锁定Nginx服务的启动用户。命令 passwd -S <用户> 如passwd -S nginx可查看用户状态。 修改配置文件中的nginx启动用户修改为nginx或者www 如: user www; 如果您是docker用户,可忽略该项(或添加白名单)
Nginx进程启动账号状态,降低被***概率
    修改Nginx进程启动账号: 
    查看配置文件的user配置项,确认是非root启动的;(user 配置项)
    如果是root启动,修改成www或者nginx账号; 
    修改完配置文件之后需要重新启动Nginx。
Nginx服务的版本隐藏状态
    在http配置项下 配置server_tokens项 server_tokens off;
把控配置文件权限以抵御外来***
    修改Nginx配置文件权限: 执行chmod 644 conf/vhost/*.conf conf/nginx.conf 来限制Nginx配置文件的权限
SSL加固
    配置支持TLSv1.2;
    server { 
          ssl_protocols TLSv1.2;
            }
如果没有必要 不要启用目录列表,这在***者侦察中可能很有用,因此应将其禁用。如果要打开 不要忘记设置登录验证密码
    在location下删除或者修改为 autoindex off;
    加密方式:
      yum install -y httpd-tools
      htpasswd -c /usr/local/nginx/conf/passwd_xuqiu   xuqiu
      然后赋值密码
      nginx调用授权密码文件
      server {
        auth_basic "Please input password"; #这里是验证时的提示信息
        auth_basic_user_file /usr/local/nginx/conf/passwd_xuqiu;
      }

猜你喜欢

转载自blog.51cto.com/9025736/2529534