伺服器VPS安全防護

Introduction

原文地址: 伺服器、VPS等安全防護教程 - FindHao

在從搬瓦工(Bandwagon)購買VPS之後,自信的在vps里使用了debian搭建ss等等。

過了一個多月,就收到搬瓦工郵件,說

We have detected a large number of outgoing SMTP connections originating from this server. This usually means that the server is sending out spam.

我們檢測到你的伺服器上有大量SMTP連接,換句話說,你的伺服器在發送垃圾郵件。

就是說vps被黑了。被人用來濫發郵件。

經過一番努力之後,終於在兩三個月里,被黑了三次。達到了他們的容忍上限(每個用戶的每個vps有三次機會,超過三次就會被停止使用),發tickt也不給面子,就是不讓用了。只能新買服務。。

於是新買了個vps,這裡記錄下使用vps需要注意的安全問題。

1.認識問題嚴重性

先在你機器(包括你平時用的linux的機器)上跑幾個命令看看吧。

1.1查看嘗試暴力破解機器密碼的人

sudo grep "Failed password for root" /var/log/auth.log | awk "{print $11}" | sort | uniq -c | sort -nr | more

害怕嗎?

1.2查看暴力猜用戶名的人

sudo grep "Failed password for invalid user" /var/log/auth.log | awk "{print $13}" | sort | uniq -c | sort -nr | more

在我實驗室的機器上,看到的結果如下:

次數ip207202.201.34.104108114.80.253.818222.186.58.2448222.186.56.1203198.55.103.1442一堆ip1一堆ip

感受到寒意了嗎?

2應對策略

2.1 SSH相關

2.1.1 不使用默認的22埠

ssh登陸默認的埠是22,而搬瓦工一般都默認是一個比較大的隨機埠,不要為了方便,改回22

修改/etc/ssh/sshd_config文件,將其中的Port 22改為隨意的埠比如Port 47832,port的取值範圍是 0 - 65535(即2的16次方),0到1024是眾所周知的埠(知名埠,常用於系統服務等,例如http服務的埠號是80)。

2.1.2 不要使用簡單密碼

搬瓦工默認生成的root密碼是隨機的,但是不要改成你自己的密碼,你可以將密碼記在手機上,但是一定不要改成你自己的有規律的密碼。

2.1.3 禁止使用密碼登陸,使用RSA私鑰登陸

這條是最重要最有效的。

跟之前寫的debian ssh 連接android 通過termux里登陸部分是一樣的。rsa的原理也不再贅述,wiki上的條目描述的很清楚。

先通過ssh-keygen -t rsa生成你的客戶端的密鑰,包括一個私鑰和公鑰,用scp id_rsa.pub root@XX.XX.XX.XX:~/把公鑰拷貝到伺服器上,注意,生成私鑰的時候,文件名是可以自定義的,且可以再加一層密碼,所以建議文件名取自己能識別出哪台機器的名字。然後在伺服器上,你的用戶目錄下,新建.ssh文件夾,並將該文件夾的許可權設為600,chmod 600 .ssh,並新建一個authorized_keys,這是默認允許的key存儲的文件。如果已經存在,則只需要將上傳的id_rsa.pub文件內容追加進去即可:cat id_rsa.pub >> authorized_keys,如果不存在則新建並改許可權為400即可。

然後編輯ssh的配置文件:

# vi /etc/ssh/sshd_configRSAAuthentication yes #RSA認證PubkeyAuthentication yes #開啟公鑰驗證AuthorizedKeysFile .ssh/authorized_keys #驗證文件路徑PasswordAuthentication no #禁止密碼認證PermitEmptyPasswords no #禁止空密碼# 最後保存,重啟# /etc/init.d/sshd restart

2.1.4 禁止root用戶登錄

你可以新建一個用戶來管理,而非直接使用root用戶,防止密碼被破解。

還是修改/etc/ssh/sshd_config

PermitRootLogin no

2.2 使用denyhosts

Denyhosts是一個Linux系統下阻止暴力破解SSH密碼的軟體,它的原理與DDoS Deflate類似,可以自動拒絕過多次數嘗試SSH登錄的IP地址,防止互聯網上某些機器常年破解密碼的行為,也可以防止黑客對SSH密碼進行窮舉。

建議不要從軟體倉庫里安裝,而是從denyhosts的github地址下載,解壓,安裝。

2.2.1 配置文件

複製默認的配置文件到/etc下

cp denyhosts.conf /etcsudo vim /etc/denyhosts.conf

配置文件里基本不用配置,可以查看下都有什麼選項。

2.2.2 守護程序

cp daemon-control-dist daemon-controlsudo vim ./daemon-controlsudo chown root daemon-controlsudo chmod 700 daemon-control

主要修改執行文件所在的文件夾,改成你的denyhosts所在的地址,可以通過whereis denyhosts看到他的路徑。

DENYHOSTS_BIN = "/usr/local/bin/denyhosts.py"

同時修改這個守護程序的所屬用戶和許可權。

2.2.3 運行

添加開機自動運行,編輯/etc/rc.local,在最後的exit之前添加

# 你的daemon-control在哪裡就改為哪裡/usr/share/denyhosts/daemon-control start

在當前目錄下通過daemon-control start來運行。

2.3 終極殺手鐧 iptables

iptables,一個運行在用戶空間的應用軟體,通過控制Linux內核netfilter模塊,來管理網路數據包的流動與轉送。在大部分的Linux系統上面,iptables是使用/usr/sbin/iptables來操作,文件則放置在手冊頁(Man page[2])底下,可以通過 man iptables 指令獲取。通常iptables都需要內核層級的模塊來配合運作,Xtables是主要在內核層級裡面iptables API運作功能的模塊。因相關動作上的需要,iptables的操作需要用到超級用戶的許可權。

# 清除已有iptables規則iptables -F# 允許本地迴環介面(即運行本機訪問本機)iptables -A INPUT -i lo -j ACCEPT# 允許已建立的或相關連的通行iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT#允許所有本機向外的訪問iptables -A OUTPUT -j ACCEPT# 允許訪問22埠,以下幾條相同,分別是22,80,443埠的訪問iptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp --dport 80 -j ACCEPTiptables -A INPUT -p tcp --dport 443 -j ACCEPT#如果有其他埠的話,規則也類似,稍微修改上述語句就行#允許pingiptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT#禁止其他未允許的規則訪問(注意:如果22埠未加入允許規則,SSH鏈接會直接斷開。)iptables -A INPUT -j REJECT iptables -A FORWARD -j REJECT

開機啟動項的設置可以參考Reference里關於iptables的條目

總結

安全問題實在太重要,即使設置了以上防護,也有可能被攻克,重要的是提高安全意識。

等我遇到了新的問題,再更新文章。。

Reference

VPS 防止 SSH 暴力登錄嘗試攻擊

linux默認埠範圍是多少

10 分鐘伺服器安全設置,Ubuntu安全設置入門

Linux下的iptables詳解及配置

Linux上iptables防火牆的基本應用教程

iptables wiki

iptables archwiki)


推薦閱讀:

Struts 2 S2-045 Jakarta插件遠程代碼執行漏洞加固方法
Backslash Powered Scanning

TAG:Linux | 网络安全 | 黑客Hacker |