天天看點

伺服器安全配置-架構師必備引言伺服器基礎安全配置登入安全配置網絡防火牆配置其他建議

引言

網絡安全是一個非常重要的課題,而伺服器是網絡安全中最關鍵的環節,尤其現如今,随着比特币等一系列網絡貨币的流行,誕生了大量的挖礦木馬,很多黑客嘗試着攻擊網絡上的衆多伺服器,并偷偷地把木馬送進已經拿下的城堡裡,不僅如此,很多挖礦木馬通過起一個常見程序的名字、僅在空閑時間工作等方式隐藏自己,讓你在不知不覺中替黑客賺錢

來自美國的一家企業網絡安全公司Palo Alto Networks就釋出了一份關于使用“挖礦木馬”挖掘加密貨币的報告顯示,2017年6月至今,用來挖礦的惡意軟體數量開始出現大幅增長,他們中 629,126個 “挖礦木馬”中的84%被用來生産 Monero 币,而門羅币中至少有5%是使用“挖礦木馬”開采出來的

這駭人聽聞的資料背後,是網際網路網絡安全的重大缺失,那麼,如何讓你的伺服器不被攻陷甚至能夠遠離攻擊呢?本文我們就來告訴你詳細的配置方案

伺服器安全配置-架構師必備引言伺服器基礎安全配置登入安全配置網絡防火牆配置其他建議

伺服器基礎安全配置

開啟位址空間布局随機化

開啟位址空間布局随機化可以将程序的記憶體空間位址随機化來增大入侵者預測目的位址難度,進而降低程序被成功入侵的風險

在 /etc/sysctl.conf 或 /etc/sysctl.d/* 檔案中增加以下參數:

kernel.randomize_va_space = 2

然後,執行指令:

sysctl -w kernel.randomize_va_space=2

配置檔案權限設定

配置檔案的權限是很重要的,不能被輕易修改,否則十分危險

chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow

chmod 0644 /etc/group  

chmod 0644 /etc/passwd  

chmod 0400 /etc/shadow  

chmod 0400 /etc/gshadow

chown root:root /etc/hosts.allow 

chown root:root /etc/hosts.deny 

chmod 644 /etc/hosts.deny

chmod 644 /etc/hosts.allow

登入安全配置

確定 root 是唯一 UID 為 0 的賬戶

linux 系統中,非系統賬号的 UID 都是大于 500 的,而 UID 為 0 的使用者擁有最高的系統權限,我們可以通過 -u 參數來指定使用者的 UID,雖然這通常沒什麼意義,除非你把某個使用者的 UID 指定為 0,顯然,這是極不安全的

是以確定 root 是唯一 UID 為 0 的賬戶是非常重要的

執行指令:

cat /etc/passwd | awk -F: '($3 == 0) { print $1 }' | grep -v '^root$'

如果指令執行後,傳回的結果不為空,那麼要将 /etc/passwd 中相應的使用者 UID 提升到 500 以上

SSH 相關配置

ssh 指令通常是登入伺服器的唯一方式,是以 ssh 的配置也就顯得十分重要

SSH LogLevel 配置

ssh 的 LogLevel 預設為 INFO,會記錄所有的登入和登出活動,如果被設定為 ERROR、FATAL 或者 QUIET,你将無法檢視到誰登入到了系統中,這是十分危險的

是以務必要檢視 /etc/ssh/sshd_config 檔案,确認其中配置了:

LogLevel INFO

最大密碼嘗試次數

很多伺服器都是被暴力攻擊密碼攻破的,此時設定最大密碼嘗試次數,就可以讓暴力攻擊的頻率大幅降低進而降低被暴力攻擊的風險

具體方法是在 /etc/ssh/sshd_config 檔案中,配置 MaxAuthTries,推薦值為 4:

MaxAuthTries 4

禁止空密碼使用者登入

有些使用者的密碼為空,這部分使用者是潛在的系統漏洞,拒絕這部分使用者通過 ssh 登入顯得十分必要:

具體方法是在 /etc/ssh/sshd_config 檔案中配置:

PermitEmptyPasswords no

設定 SSH 空閑逾時退出時間

長期保持的 SSH 會話是另一個安全隐患,尤其是在網吧等公共電腦上進行過 ssh 操作又忘記關閉的情況下

在 /etc/ssh/sshd_config 中配置:

ClientAliveInterval 600     # 逾時時間 10 分鐘

ClientAliveCountMax 2    # 最大活躍用戶端 2 個

使用者密碼相關配置

設定密碼失效時間

設定密碼失效時間,強制定期修改密碼,可以有效減少密碼被洩漏和猜測風險

在 /etc/login.defs 中将 PASS_MAX_DAYS 參數設定為 60-180之間,如:

PASS_MAX_DAYS 90

同時執行下面的指令為 root 使用者指定該配置:

chage --maxdays 90 root

密碼複雜度檢查

密碼複雜度過低是被暴力破解的根源,安裝 cracklib 可以檢測和限制密碼強度

Ubuntu 上執行:

apt install libpam-cracklib

Fedora 上執行:

dnf install cracklib

RHEL/CentOS 系統上執行:

sudo yum install cracklib

安裝完成後,編輯 /etc/pam.d/common-password 配置檔案,在 password requisite pam_cracklib.so 開頭的這一行配置 minclass(至少包含小寫字母、大寫字母、數字、特殊字元等4類字元中的3類或4類)設定為 3 或 4,即在行末尾加上參數 minclass=3

在 password [success=1 default=ignore] pam_unix.so 開頭的這一行增加配置 minlen(密碼最小長度)設定為9-32 位,建議為 9,即在行末尾加上參數 minlen=9

拒絕密碼重用

強制使用者不重用最近使用的密碼,可以有效降低密碼猜測攻擊風險

具體方法是,編輯 /etc/pam.d/common-password,在 password [success=1 default=ignore] pam_unix.so 開頭的這一行增加配置 remember 設定為 5-24 之間,建議為 5,即在行末尾加上參數 remember=5

更改密碼提示時間

/etc/login.defs 中 PASS_WARN_AGE 配置項聲明了在密碼到期前多少天内提示使用者重新設定密碼

結合上述配置,并修改 /etc/login.defs 讓使用者盡早收到提示更新密碼,可以有效提升系統安全性

PASS_WARN_AGE 7

同時,也需要讓 root 使用者該項設定生效,執行下面的指令:

chage --warndays 7 root

網絡防火牆配置

iptables 配置防火牆政策

修改 ssh 服務的 sshd 端口

ssh 預設會監聽在 22 端口,是以針對 22 端口的攻擊也最為常見

具體方法是編輯 /etc/ssh/sshd_config 配置檔案,修改 Port 參數,然後執行 service sshd restart 重新開機 sshd 服務

其他建議

通用建議

其他通用性的建議也需要嚴格執行:

  1. redis、mysql、mongodb、zookeeper 等元件盡量均不要使用 root 使用者啟動,而是添加相應的獨立使用者啟動
  2. 所有元件均不要使用預設端口,以降低其本身具有漏洞被攻擊的可能
  3. 各元件一定要設定獨立的高安全級别密碼

繼續閱讀