雲服務器安全,你都瞭解了嗎?

                                                                             雲服務器安全你都瞭解了嗎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

相關文章
相關標籤/搜索