雲服務器安全你都瞭解了嗎linux
通常來講雲服務器,都綁定了公網ip,天天都無時無刻的被惡意掃描,這種問題,咱們避免不了,可是咱們能夠主動防禦。近日,在升級服務時,偶爾想到這個,就記錄下來了,讓咱們一塊兒把服務器變得更加安全吧。nginx
1、Nmap掃描web
nmap -A 10.10.0.45 -p-
個人服務器開啓了 redis的,就算我改了默認端口,經過 nmap 一掃描就暴露了。redis
掃描出來了,沒關係張,接下來咱們安全
如何防止nmap惡意掃描呢?經過iptables防火牆防禦?bash
經過把SYN,RST SYN,RST/ALL FIN,URG,PSH SYN/FIN SYN,FIN 設置禁止訪問規則後。服務器
Namp結果:ssh
nmap -A 172.25.0.30 -p1-10000
根據這個結果的發現,設置禁止訪問規則,一樣能掃描服務器開放的端口。tcp
對於防止掃描,效果不盡人意,我的暫時沒有找到更好的防火牆,防nmap掃描,暫時無解。ide
Nmap(偵探)的使用方法太多 ,能夠隱藏ip,掃漏洞,掃端口,做爲一個良好的網民,應該拒絕拿它幹壞事。
俗話說的好;與其擔憂受怕,不如主動防禦!
首先,咱們的sshd服務是必須開啓的,因此對ssh服務的安全防禦,就很是重要了。
限制不必的用戶登錄
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 用戶是沒法登錄的
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
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
重複執行演示結果:
拒絕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
這裏舉例nignx
這裏列舉一下狀態碼
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/;
…
}
配置效果以下:
Nginx.conf
http {
server_tokens off; #關閉nginx的版本顯示
}
訪問效果:
怎麼端口嚴控?
對於,服務端口,咱們採起嚴格控制 ,通常來講,服務器只開放2二、80、443端口,其餘的端口,咱們禁止它外網訪問。這個咱們能夠在雲上的安全組裏面
設置規則。
須要開放其它的端口,須要怎麼辦?
有須要開放的服務端口,在對應的服務裏面設置帳號密碼配置:如redis es 等等服務,經過設置複雜帳號密碼,來防止惡意調用挖礦,固然,設置了,你的服務性能對應的降低。
對服務器,進行資源的監控,咱們能夠經過腳本,第三方服務軟件等等,對服務器進行監控,讓你隨時掌握服務器的狀況。
寫的很差的地方,歡迎指出。更多關注公衆,讓咱們一塊兒交流技術心得吧。