云服务器安全,你都了解了吗?

                                                                             云服务器安全你都了解了吗linux

通常来讲云服务器,都绑定了公网ip,天天都无时无刻的被恶意扫描,这种问题,咱们避免不了,可是咱们能够主动防御。近日,在升级服务时,偶尔想到这个,就记录下来了,让咱们一块儿把服务器变得更加安全吧。nginx

1、Nmap扫描web

nmap -A   10.10.0.45 -p-


image.png

个人服务器开启了 redis的,就算我改了默认端口,经过 nmap 一扫描就暴露了。redis

扫描出来了,没关系张,接下来咱们安全

如何防止nmap恶意扫描呢?经过iptables防火墙防御?bash

经过把SYN,RST SYN,RST/ALL FIN,URG,PSH SYN/FIN SYN,FIN 设置禁止访问规则后。服务器


image.png


Namp结果:ssh

nmap -A 172.25.0.30 -p1-10000



image.png


根据这个结果的发现,设置禁止访问规则,一样能扫描服务器开放的端口。tcp

对于防止扫描,效果不尽人意,我的暂时没有找到更好的防火墙,防nmap扫描,暂时无解。ide

Nmap(侦探)的使用方法太多 ,能够隐藏ip,扫漏洞,扫端口,做为一个良好的网民,应该拒绝拿它干坏事。

俗话说的好;与其担忧受怕,不如主动防御!

1、ssh服务安全配置

首先,咱们的sshd服务是必须开启的,因此对ssh服务的安全防御,就很是重要了。

1)、配置用户登录限制

限制不必的用户登录


cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
redis:x:1000:1000::/home/redis:/sbin/nologin
test:x:1002:1001::/home/test:/sbin/nologin


好比个人test,redis用户,是被服务器运行调用的,咱们是不容许它登录,因此咱们把该用户的权限改成/sbin/nologin

这样配置了redis和test 用户是没法登录的

2)、防止肉鸡暴力破解

lastb命令用于列出登入系统失败的用户相关信息,经过它,咱们能够正确的获取登陆失败的ip

经过脚本,把ip追加到/etc/hosts.deny,脚本能够追加到计划任务

方式一:

#!/bin/bash
#author:xiaozhang
#sed -i  '/^sshd.*/d'  /etc/hosts.deny  #删除全部sshd开头的ip
ipdeny=`lastb |awk '{print $3}' |  egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort|uniq -c |sort -nr | awk '{if ($1 > 10) print "sshd:"$2}'`  #获取ip
for i in $ipdeny;do #轮询ip
grep -q  $i  /etc/hosts.deny
if [ $? != 0 ] ; then
echo $i >> /etc/hosts.deny  #追加到到hosts.deny文件
fi
done

方式二:

#!/bin/bash
#author:xiaozhang
#获取***的ip
lastb |awk '{print $3}' |  egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort|uniq -c |sort -nr | \
while read a b    #读取 $1 $2值
do
    grep -q $b /etc/hosts.deny    #判断ip是否存在
      if [ $? != 0 ] ; then
        if [ $a -ge 10 ] ; then   #统计的次数大于10
            echo "sshd:$b" >> /etc/hosts.deny   #添加IP到黑名单
        fi
      fi
done

3)、sshd服务升级,防止漏洞注入

OpenSSH命令注入漏洞(CvE-2020-15778),在8.3p1前的版本中存在这个漏洞。而咱们使用的版本(7.x)来讲大部分都存在这个危险。固然,你的服务器是大型云商的,是有防御的。

为了安全,更可靠,因此咱们升级版本

注意:升级后hosts.deny再也不支持,推荐使用防火墙

升级sshd更新到8.5版本,推荐方式rpm升级

升级脚本都给你写好啦,往下看:

#!/bin/bash
#author: xiaozhang
showGreen()
{
  content=$1
  echo -e "> \033[32m$content\033[0m"
}
showRed()
{
  content=$1
  echo -e "> \033[31m$content\033[0m"
}
#------关闭selinux------
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#---下载包安装解压安装-----
install()
{
wget https://cikeblog.com/s/openssh-8.5p1-1.el7.tar.gz
tar -zxvf openssh-8.5p1-1.el7.tar.gz 
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
yum -y install  `ls  /ssh8.5/*.rpm`
#-----文件授予权限-------
chmod 600 /etc/ssh/ssh_host_ed25519_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_rsa_key
rm -rf /etc/pam.d/sshd
mv /etc/pam.d/sshd.bak /etc/pam.d/sshd
#------修改相关配置
sed -i 's/#UsePAM no/UsePAM yes/g' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
sed -i 's/#ListenAddress 0.0.0.0/ListenAddress 0.0.0.0/g' /etc/ssh/sshd_config
sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/g' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config
}
$1
mkdir -p  /ssh8.5
cd  /ssh8.5
ls /ssh8.5  | grep openssh-8.5p1-1.el7.tar.gz         
if [ $? -gt 0 ];then
    install
fi
systemctl restart sshd
if [ $? -eq 0 ]; then
    showGreen  'upgrade  success'
else
    showRed 'Upgrade failed'
fi
source  /etc/profile 
ssh -V

重复执行演示结果:

image.png

拒绝IP访问,添加防火墙,能够这样

经过iptables限制只容许某些网段和主机链接Linux机器的 22/TCP端口。IP地址在一分钟以内对Linux主机22/TCP端口新发起的链接超过10次,以后的新发起的链接将被丢弃.

-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name SSH --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource -j ACCEPT

2、web服务安全配置

这里举例nignx

1)、禁止IP访问,只容许域名访问

这里列举一下状态码

4XX:

401 (未受权) 请求要求身份验证。 对于须要登陆的网页,服务器可能返回此响应。 
403 
(禁止) 服务器拒绝请求。 
404 
(未找到) 服务器找不到请求的网页。

444 (错误)ERR_EMPTY_RESPONSE 该网页没法正常运做。

5XX:

500 (服务器内部错误) 服务器遇到错误,没法完成请求。 
501 
(还没有实施) 服务器不具有完成请求的功能。例如,服务器没法识别请求方法时可能会返回此代码。 
502 
(错误网关) 服务器做为网关或代理,从上游服务器收到无效响应。 
503 
(服务不可用) 服务器目前没法使用(因为超载或停机维护)。一般,这只是暂时状态。 

问题来了,禁止服务器IP直接访问,咱们返回怎么最好呢。我的以为,若是需求是屏蔽死这个IP禁止web访问,那么就直接用444,访问直接报错。

配置以下:

server {

    listen 80;

    server_name _;

    access_log /data/wwwlogs/nginx.log combined;

    root /data/www/;

return 444;

    …

}

配置效果以下:


image.png


2)、隐藏nginx的访问版本

Nginx.conf

http {

server_tokens off; #关闭nginx的版本显示

}

访问效果:

image.png


其它的安全,咱们能够作cdn,作加速,防ddos***

3端口严控

怎么端口严控?

对于,服务端口,咱们采起严格控制 ,通常来讲,服务器只开放2二、80、443端口,其余的端口,咱们禁止它外网访问。这个咱们能够在云上的安全组里面

设置规则。

须要开放其它的端口,须要怎么办?

有须要开放的服务端口,在对应的服务里面设置帐号密码配置:如redis es 等等服务,经过设置复杂帐号密码,来防止恶意调用挖矿,固然,设置了,你的服务性能对应的降低。

4、服务监控

对服务器,进行资源的监控,咱们能够经过脚本,第三方服务软件等等,对服务器进行监控,让你随时掌握服务器的状况。

5总结

 写的很差的地方,欢迎指出。更多关注公众,让咱们一块儿交流技术心得吧。

                                                                                                getqrcode.jpeg

相关文章
相关标签/搜索