Linux 服務器安全技巧

毋庸置疑,對於系統管理員,提升服務器的安全性是最重要的事情之一。所以,也就有了許多針對這個話題而生的文章、博客和論壇帖子。linux

一臺服務器由大量功能各異的部件組成,這一點使得很難根據每一個人的需求去提供定製的解決方案。這篇文章儘量涵蓋一些有所裨益的小技巧來幫助管理員保證服務器和用戶安全。web

有一些常識是每一個系統管理員都應該爛熟於心的,因此下面的幾點在本文將不會說起:vim

  • 務必保證系統是最新的安全

  • 常常更換密碼 - 使用數字、字母和非字母的符號組合服務器

  • 給予用戶最小的權限,知足他們平常使用所需便可網絡

  • 只安裝那些真正須要的軟件包dom

 

下面是一些更有意思的內容:ssh

 

更改SSH默認端口ide

在搭建好一臺全新的服務器後要作的第一件事情就是更改SSH的默認端口。這個小小的改動可以使你的服務器避免受到成千上萬的暴力攻擊(LCTT 譯註:不更改默認端口至關於黑客們知道你家的門牌號,這樣他們只須要一把一把的試鑰匙就可能打開你家的鎖)。工具

要更改默認的SSH端口,先打開sshd_config文件:

sudo vim /etc/ssh/sshd_config

找到下面這行:

#Port 22

「#」號表示這行是註釋。首先刪除#號,而後把端口號改爲目的端口。端口號不能超過65535,確保要指定的端口號沒有被系統或其它服務佔用。建議在[維基百科]上查看經常使用端口號列表。在本文中,使用這個端口號:

Port 16543

而後保存並關閉文件,等待更改生效。

接下來的一步是:

 

使用SSH密鑰認證

在經過SSH訪問服務器時,使用SSH密鑰進行認證是尤爲重要的。這樣作爲服務器增長了額外的保護,確保只有那些擁有密鑰的人才能訪問服務器。

在本地機器上運行下面命令以生成SSH密鑰:

ssh-keygen -t rsa

你會看到下面的輸出,詢問要將密鑰寫到哪個文件裏,而且設置一個密碼:

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): my_key

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in my_key.

Your public key has been saved in my_key.pub.

The key fingerprint is:

SHA256:MqD/pzzTRsCjZb6mpfjyrr5v1pJLBcgprR5tjNoI20A

完成以後,就獲得兩個文件:

my_key

my_key.pub

接下來把my_key.pub拷貝到~/.ssh/authorized_key中

cp my_key.pub ~/.ssh/authorized_keys

而後使用下面命令將密鑰上傳到服務器:

scp -P16543 authorized_keys user@yourserver-ip:/home/user/.ssh/

至此,你就能夠從這臺本地機器上無密碼地訪問服務器了。

 

關閉SSH的密碼認證

既然已經有了SSH密鑰,那麼關閉SSH的密碼認證就會更安全了。再次打開並編輯sshd_config,按以下設置:

ChallengeResponseAuthentication no

PasswordAuthentication no

UsePAM no

 

關閉Root登陸

下面關鍵的一步是關閉root用戶的直接訪問,而使用sudo或su來執行管理員任務。首先須要添加一個有root權限的新用戶,因此編輯這個路徑下的sudoers文件:

/etc/sudoers/

推薦使用如visudo這樣的命令編輯該文件,由於它會在關閉文件以前檢查任何可能出現的語法錯誤。當你在編輯文件時出錯了,這就頗有用了。

接下來賦予某個用戶root權限。在本文中,使用用戶sysadmin。確保在編輯後這個文件時使用的用戶是系統已有的用戶。找到下面這行:

root ALL=(ALL) ALL

拷貝這行,而後粘貼在下一行,而後把root更改成「sysadmin」,以下所示:

root ALL=(ALL) ALL

sysadmin ALL=(ALL) ALL

如今解釋一下這行的每個選項的含義:

(1) root  (2)ALL=(3)(ALL) (4)ALL

(1) 指定用戶

(2) 指定用戶使用sudo的終端

(3) 指定用戶能夠擔任的用戶角色

(4) 這個用戶可使用的命令

(LCTT 譯註:因此上面的配置是意思是:root 用戶能夠在任何終端擔任任何用戶,執行任何命令。)

使用這個配置能夠給用戶訪問一些系統工具的權限。

這時,能夠放心保存文件了。

爲了關閉經過SSH直接訪問root,須要再次打開sshd_config,找到下面這行:

#PermitRootLogin yes

更改成:

PermitRootLogin no

而後保存文件,重啓sshd守護進程使改動生效。執行下面命令便可:

sudo /etc/init.d/sshd restart

 

設置防火牆

防火牆有助於過濾出入端口和阻止使用暴力法的登陸嘗試。我傾向於使用SCF(Config Server Firewall)這個強力防火牆。它使用了iptables,易於管理,並且對於不擅於輸入命令的用戶提供了web界面。

要安裝CSF,先登陸到服務器,切換到這個目錄下:

cd /usr/local/src/

而後以root權限執行下面命令:

wget https://download.configserver.com/csf.tgz

tar -xzf csf.tgz

cd csf

sh install.sh

只需等待安裝程序完成,而後編輯CSF的配置文件:

/etc/csf/csf.conf

默認狀況下CSF是以測試模式運行。經過將「TESTING」的值設置成0,切換到product模式。

TESTING = "0"

下面要設置的就是服務器上容許經過的端口。在csf.conf中定位到下面的部分,根據須要修改端口:

# 容許入站的 TCP 端口

TCP_IN = "20,21,25,53,80,110,143,443,465,587,993,995,16543"

# 容許出站的 TCP 端口

TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995,16543"

# 容許入站的 UDP 端口

UDP_IN = "20,21,53"

# 容許出站的 UDP 端口

# 要容許發出 traceroute 請求,請加 33434:33523 端口範圍到該列表

UDP_OUT = "20,21,53,113,123"

請根據須要逐一設置,推薦只使用那些須要的端口,避免設置對端口進行大範圍設置。此外,也要避免使用不安全服務的不安全端口。好比只容許端口465和587來發送電子郵件,取代默認的SMTP端口25。(LCTT 譯註:前提是你的郵件服務器支持 SMTPS)

重要:千萬不要忘記容許自定義的 ssh 端口。

 

容許你的IP地址經過防火牆,而毫不被屏蔽,這一點很重要。IP地址定義在下面的文件中:

/etc/csf/csf.ignore

被屏蔽了的IP地址會出如今這個文件中:

/etc/csf/csf.deny

一旦完成更改,使用這個命令重啓csf:

sudo /etc/init.d/csf restart

下面是在某臺服務器上的csf.deny文件的部份內容,來講明CSF是頗有用的:

211.216.48.205 # lfd: (sshd) Failed SSH login from 211.216.48.205 (KR/Korea, Republic of/-): 5 in the last 3600 secs - Fri Mar 6 00:30:35 2015

103.41.124.53 # lfd: (sshd) Failed SSH login from 103.41.124.53 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 01:06:46 2015

103.41.124.42 # lfd: (sshd) Failed SSH login from 103.41.124.42 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 01:59:04 2015

103.41.124.26 # lfd: (sshd) Failed SSH login from 103.41.124.26 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 02:48:26 2015

109.169.74.58 # lfd: (sshd) Failed SSH login from 109.169.74.58 (GB/United Kingdom/mail2.algeos.com): 5 in the last 3600 secs - Fri Mar 6 03:49:03 2015

能夠看到,嘗試經過暴力法登陸的IP地址都被屏蔽了,真是眼不見心不煩啊!

 

鎖住帳戶

若是某個帳戶在很長一段時間內都不會被使用了,那麼能夠將其鎖住以防止其它人訪問。使用以下命令:

passwd -l accountName

固然,這個帳戶依然能夠被root用戶使用(LCTT 譯註:可用 su 切換爲該帳號)。

 

瞭解服務器上的服務

服務器的本質是爲各類服務提供訪問功能。使服務器只運行所需的服務,關閉沒有使用的服務。這樣作不只會釋放一些系統資源,並且也會使服務器變得更加安全。好比,若是隻是運行一個簡單的服務器,顯然不須要X顯示或者桌面環境。若是不須要Windows網絡共享功能,則能夠放心關閉Samba。

使用下面的命令能查看伴隨系統啓動而啓動的服務:

chkconfig --list | grep "3:on"

若是系統運行了systemd,執行這條命令:

systemctl list-unit-files --type=service | grep enabled

而後使用下面的命令關閉服務:

chkconfig service off

systemctl disable service

在上面的例子中,把「service」替換成真正想要中止的服務名稱。實例以下:

chkconfig httpd off

systemctl disable httpd

 

小結

這篇文章的目的是涵蓋一些通用的安全步驟以便幫助你保護服務器。你能夠採起更多方式去加強對服務器的保護。請記住保證服務器安全是你的責任,在維護服務器安全時儘可能作出明智的選擇,儘管並無什麼容易的方式去完成這件事情,而創建「完善的」安全須要花費大量的時間和測試直到達到想要的結果。

免費領取兄弟連IT教育原創雲計算培訓視頻/細說linux教程,詳情諮詢官網客服:http://www.lampbrother.net/linux/ 或者勾搭Q2430675018~

歡迎加入linux交流羣 478068715

相關文章
相關標籤/搜索