当前位置:论坛首页 > Linux面板 > 讨论

Linux云服务器安全优化设置汇总

发表在 Linux面板2017-12-31 13:35 [复制链接] 13 7573

本帖最后由 nohacks 于 2018-4-18 17:34 编辑

引言:

   网络安全问题日益严重,各种挂马攻击层出不穷,另人防不胜防,笔者虽然技术有限,下笔无文,但还是结合自身实践写此文字以慰后来者。

  
目录:

  1. 服务器安全防护

     1.1  使用悬镜守护服务器安全
           1.1.1    安装服务端
          1.1.2.   安装管理端
       1.2  ...

2.安全隔离服务

    2.1  使用宝塔企业运维版

    2.2 使用360网站安全卫士

3. 基础安全设置

  3.1  禁ping
  3.2  禁root连接ssh
   
....

4. 基础防御设置

  4.1 连接限制
...

5.服务器内核优化
  5.1  解决服务器保持了大量TIME_WAIT状态进程的问题
  ...



正文:


1.服务器安全防护

     服务器安全防护软件 ,目前流行的有云锁,安全狗,悬镜。

   1.1  使用悬镜守护服务器安全

      前2个好用的功能大多需要收费,只有悬镜是 完全免费的,官方网站:http://www.xmirror.cn/

   安装方法非常简单,

    1.1.1    安装服务端

        在服务器上执行命令:

   
  1.   wget -O install.sh http://dl.xmirror.cn/a/install.sh && sh install.sh
复制代码
注意:如果已经安装了同类软件,需要先卸载,以免安装失败。

   1.1.2.   安装管理端

   在Windows系统上下载安装管理端并输入root账号激活服务器

    点击下载:管理端下载

   功能非常强大,界面功能类似于360安全卫士,如下图:

   20171230005314_57140.jpg



2.安全隔离服务

      2.1  购买使用宝塔企业运维版
          1.宝塔企业运维版的安全隔离功能是专为拦截暴力破解而开发的功能
          2.安全隔离服务好比在您的服务器外面建立一道围场,只允许授权IP进来。

       宝塔后台有购买链接,推荐大家购买使用。
      2.2 免费使用360网站安全卫士

        360网站安全卫士的防护能力还是不错的,缺点就是节点访问太慢,影响网站打开速度,建议使用宝塔企业运维版,获得稳定的安全服务

       官方网站: http://wangzhan.360.com

123.jpg



3. 基础安全设置

    为了服务器安全,我们一般禁ping,禁止root连接ssh

  3.1  禁ping

       宝塔面板用户可以在宝塔面板安全选项卡里直接设置,如下图:

QQ拼音截图未命名.jpg

  也可以修改内核设置net.ipv4.icmp_echo_ignore_all的值为1来达到目的。

在/etc/sysctl.conf尾部加入下面代码,然后执行 /sbin/sysctl -p 使设置生效。

  1. echo "net.ipv4.icmp_echo_ignore_all=1" >>/etc/sysctl.conf
  2. /sbin/sysctl -p
复制代码



3.2  禁root连接ssh

     修改ssh端口,宝塔面板用户可以在宝塔面板安全选项卡里直接设置。

      禁止root连接ssh可以有效的防止暴力破解后的root权限获取,为系统添加一份保险。

需要修改系统配置文件,方法如下:
在服务器上执行下面命令


  1. #增加一个普通权限的用户:
  2. # useradd 用户名
  3. //设置密码,并修改有效期为99999天 ,默认为90天
  4. # passwd  -x 99999  用户名

  5. 如果账号已经过期,无法登陆,可通过面板文件管理修改"/etc/shadow" 对应用户名 的 90 为 99999


  6. #然后修改ssh设置

  7. # vi /etc/ssh/sshd_config

  8. 把 PermitRootLogin yes 改为 PermitRootLogin no

  9. #最后重启sshd服务
  10. # service sshd restart
复制代码


切记顺序不能颠倒,修改之前必须新建用户,不然进不去SSH就杯具了。
如果需要root权限,可以ssh进去后用命令 "su root" 切换root权限。


4. 基础防御设置

  4.1 用户连接数限制

  宝塔原来的配置只是对简单环境下的IP做了限制



  1. ##nginx主配置##

  2. http{
  3. ......
  4. limit_conn_zone $binary_remote_addr zone=perip:10m;               
  5. limit_conn_zone $server_name zone=perserver:10m;
  6. }

  7. ## 具体网站配置##

  8. server{
  9. ......

  10.     #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
  11.     #error_page 404/404.html;
  12.     limit_conn perserver 150;
  13.     limit_conn perip 4;
  14.     limit_rate 1024k;
  15.     #SSL-END
  16. }

复制代码


在复杂环境中,比如使用了上文提到的”360网站安全卫士“,或者使用了cdn加速服务,上面的代码获取到的可能就是cdn服务的IP,不能有效对真实IP做连接限制。

下面的配置代码就解决了这个问题:

打开宝塔nginx的主配置文件,找到代码:

  1.     limit_conn_zone $binary_remote_addr zone=perip:10m;
复制代码


修改为:


  1.     limit_conn_zone $clientRealIp  zone=perip:10m;
复制代码



然后在前面插入下面的代码:




  1. ##这里取得原始用户的IP地址

  2.     map $http_x_forwarded_for  $clientRealIp {
  3.     ""  $remote_addr;
  4.     ~^(?P<firstAddr>[0-9\.]+),?.*[        DISCUZ_CODE_15        ]nbsp;       $firstAddr;
  5.   }

  6. ## 每客户请求数限制每秒10个

  7. limit_req_zone $clientRealIp zone=ConnLimitZone:10m  rate=10r/s;
  8. #如果需要启用,请去掉下面这句前面的注释符'#'
  9. #limit_req zone=ConnLimitZone burst=10 nodelay;
  10. limit_req_log_level notice;

复制代码



如果需要网站启用限制,打开网站-设置-流量限制-启用流量限制 即可。




5 ,服务器内核优化

5.1  解决服务器保持了大量TIME_WAIT状态进程的问题



QQ拼音截图未命名.jpg
如上图:服务器保持了大量TIME_WAIT状态

下面的代码解决了这个问题,添加到/etc/sysctl.conf尾部,然后运行/sbin/sysctl -p 使设置立即生效,如果需要在重启后继续生效,需要在/etc/rc.d/rc.local尾部添加命令:/sbin/sysctl -p 。
  1. echo "/sbin/sysctl -p" >>/etc/rc.d/rc.local
复制代码




  1. #####################################################################
  2. # 服务器快速回收TIME_WAIT资源
  3. # sysctl settings in /etc/sysctl.conf
  4. # echo “/sbin/sysctl -p” >>/etc/rc.d/rc.local , Reboot continue to take effect!
  5. # see details in  https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=9874&page=1
  6. #####################################################################
  7. #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭  
  8. net.ipv4.tcp_syncookies = 1  
  9. #对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃,不应该大于255,默认值是5,对应于180秒左右时间   
  10. net.ipv4.tcp_syn_retries=2  
  11. #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟  
  12. net.ipv4.tcp_keepalive_time=1200  
  13. #socket废弃前重试的次数,重负载web服务器建议调小。
  14. net.ipv4.tcp_orphan_retries = 3
  15. #表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。 
  16. net.ipv4.tcp_max_tw_buckets = 1024
  17. #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间  
  18. net.ipv4.tcp_fin_timeout=30   
  19. #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。  
  20. net.ipv4.tcp_max_syn_backlog = 4096  

  21.   
  22. #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭  
  23. net.ipv4.tcp_tw_reuse = 1  
  24. #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭  。为了对NAT设备更友好,建议设置为0。
  25. net.ipv4.tcp_tw_recycle = 0  
  26.   
  27. ##减少超时前的探测次数   
  28. net.ipv4.tcp_keepalive_probes=5   
  29. #探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接时间。
  30. net.ipv4.tcp_keepalive_intvl = 15
  31. ##优化网络设备接收队列   
  32. net.core.netdev_max_backlog=3000  
  33. #内核版本新于**3.7.1**的,开启tcp_fastopen,数据能尽快传给serve.
  34. net.ipv4.tcp_fastopen = 3
  35. #把TCP的直接拥塞通告(tcp_ecn)关掉
  36. net.ipv4.tcp_ecn = 0
复制代码



持续更新中。。。



使用道具 举报 只看该作者 回复
发表于 2018-1-1 14:32:17 | 显示全部楼层
感谢楼主分享,元旦快乐!

----------------------------------------------------------------------------------------------------
菜鸟团队技术博客点击联系
使用道具 举报 回复 支持 反对
发表于 2018-1-1 15:49:37 | 显示全部楼层
元旦快乐
使用道具 举报 回复
发表于 2018-1-2 19:51:57 | 显示全部楼层
支持一下。。。加油楼主。
使用道具 举报 回复 支持 反对
发表于 2018-1-4 15:39:44 | 显示全部楼层
4.1修改后保存失败
使用道具 举报 回复 支持 反对
发表于 2018-1-4 22:14:06 | 显示全部楼层
本帖最后由 nohacks 于 2018-1-4 22:47 编辑

我测试是可以的哦,顺序不能搞反 ,先添加http段 保存 ,然后添加网站server段保存
使用道具 举报 回复 支持 反对
发表于 2018-1-6 10:31:20 | 显示全部楼层
nohacks 发表于 2018-1-4 22:14
我测试是可以的哦,顺序不能搞反 ,先添加http段 保存 ,然后添加网站server段保存 ...

还是不行  
## 这里取得原始用户的IP地址    //添加这段就报错
map $http_x_forwarded_for  $clientRealIp {
    ""  $remote_addr;
    ~^(?P<firstAddr>[0-9\.]+),?.*[        DISCUZ_CODE_7        ]nbsp;       $firstAddr;
提示:
nginx: [emerg] invalid number of the map parameters in /www/server/nginx/conf/nginx.conf:56
nginx: configuration file /www/server/nginx/conf/nginx.conf test failed
使用道具 举报 回复 支持 反对
发表于 2018-1-6 22:47:59 | 显示全部楼层
本帖最后由 nohacks 于 2018-1-6 22:52 编辑
老虎会游泳 发表于 2018-1-6 10:31
还是不行  
## 这里取得原始用户的IP地址    //添加这段就报错
map $http_x_forwarded_for  $clientRealI ...

我检查了下,原来的代码被论坛干扰了,用下面的代码试试


  1. ##########限制连接代码开始##############
  2. ##这里取得原始用户的IP地址

  3.     map $http_x_forwarded_for  $clientRealIp {
  4.     ""  $remote_addr;
  5.     ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
  6.   }

复制代码


使用道具 举报 回复 支持 反对
发表于 2018-1-8 08:59:17 | 显示全部楼层
nohacks 发表于 2018-1-6 22:47
我检查了下,原来的代码被论坛干扰了,用下面的代码试试

谢谢,这个可以了按上面修复的教程重新添加,这样对吧 5656.png
那行”如果需要启用,请去掉下面这句前面的注释符'#'“这行是限制每个客户请求每秒10个吗?


123.png
使用道具 举报 回复 支持 反对
发表于 2018-1-8 09:01:56 | 显示全部楼层
nohacks 发表于 2018-1-6 22:47
我检查了下,原来的代码被论坛干扰了,用下面的代码试试

还有一个就是做了CDN的站点,按这个配置可以吗?
使用道具 举报 回复 支持 反对
发表于 2018-1-15 03:39:54 | 显示全部楼层
老虎会游泳 发表于 2018-1-8 09:01
还有一个就是做了CDN的站点,按这个配置可以吗?

可以的,还需要启用流量限制 才能生效
使用道具 举报 回复 支持 反对
发表于 2018-1-15 03:40:16 | 显示全部楼层
老虎会游泳 发表于 2018-1-8 08:59
谢谢,这个可以了按上面修复的教程重新添加,这样对吧  
那行”如果需要启用,请去掉下面这句前面的注释符 ...

是的,一般不需要开启
使用道具 举报 回复 支持 反对
发表于 2018-1-19 15:46:36 | 显示全部楼层
nohacks 发表于 2018-1-15 03:39
可以的,还需要启用流量限制 才能生效

我记得之前宝塔好像有一个流量限制?但是现在找不到了 你说的是这个流量限制吗?
使用道具 举报 回复 支持 反对
发表于 2018-1-19 15:49:01 | 显示全部楼层
nohacks 发表于 2018-1-15 03:39
可以的,还需要启用流量限制 才能生效

找到了,在网站配置里的流量限制吗?
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

企业版年付运维跟进群

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急问题处理

论坛响应时间:10分钟

问题处理方式:1对1处理(优先)

工作时间:白班:9:00 - 18:00

工作时间:晚班:18:00 - 24:00

立即付费处理
快速回复 返回顶部 返回列表