Linux主機安全加固方法&使用開源軟件fail2ban防護主機


常見的三種加固措施

方法一:主機基礎安全加固
方法二:通過開源軟件加固主機安全
方法三:通過安全產品加固(略過)

一、主機基礎安全加固(方法一)

以下七種基礎安全加固方法可根據自己需求進行配置加固

1、密碼足夠的復雜

密碼的長度要大於 8 位最好大於 20 位。密碼的復雜度是密碼要盡可能有數字、大小寫字母和特殊符號混合組成。

2、修改sh默認端口號

vim /etc/ssh/sshd_config #修改sshd配置文件

修改此行 
	# Port 22 
改為:
	# Port xxx  #自己定義其它端口
ESC :wq 保存退出

重啟sshd服務:

systemctl restart sshd

3、禁止 root 遠程登錄

不允許 root 賬號直接登陸到系統,需添加一個普通賬號,並授予權限加入到wheel組,使用普通賬號先遠程登錄到系統,再使用sudo執行命令或使用命令su - root 切換到 root 用戶環境
操作步驟:
① 修改sshd配置文件
vim /etc/ssh/sshd_config

#PermitRootLogin yes
PermitRootLogin no  #刪除 # 號並改為no
ESC :wq  保存退出

重啟服務:

systemctl restart sshd

② 創建一個用於遠程的用戶xxx(不要設置admin,user1....等常見的默認賬戶名,很容易被猜測到)

useradd  rhxjhf  # 創建新用戶
passwd   rhxjhf  # 給此用戶設置密碼

③ 把此用戶加入到wheel組(相當於系統管理員組) #如果不加入普通用戶無法切換到root賬戶

usermod -G wheel  rhxjhf  # 把rhxjhf用戶加入到 wheel管理員組
id rhxjhf   # 查看此用戶的信息,及是否加到了wheel組

④ 使用新用戶遠程到服務器,然后使用su - root 輸入root密碼后即可切換root用戶環境

4、Linux主機黑白名單限制遠程連接地址

白名單:/etc/hosts.allow
黑名單:/etc/hosts.deny

如只想自己常用地址遠程連接到服務器,配置方法如下:
① 先在白名單中添加一行允許自己的ip
vim /etc/hosts.allow

sshd:  104.152.xx.xxx      # ip為自己的公網出口ip,有多個即添加多個即可

② 在黑名單文件中添加拒絕所有即可,格式如下(也可使用平台的安全組限制源IP地址)
vim /etc/hosts.deny #添加如下一行即可

sshd:  ALL

無需重啟服務立即生效

5、服務器之間通過密鑰免密登錄

操作環境:

服務端:cloud-host1 IP:192.168.1.63
客戶端:cloud-host2 IP:192.168.2.64

5.1 客戶端生成密鑰對,然后把公鑰傳輸到服務端

[root@cloud-host2 ~]# ssh-keygen     #執行
Generating public/private rsa key pair.
#生成公共/私有 rsa 密鑰對。
Enter file in which to save the key (/root/.ssh/id_rsa):
#輸入保存密鑰的文件(/root/.ssh/id\u rsa):
Enter passphrase (empty for no passphrase):
#輸入密碼短語(無密碼短語為空):
Enter same passphrase again:
#再次輸入相同的密碼短語:
Your identification has been saved in /root/.ssh/id_rsa. 私鑰
#您的標識已保存在/root/.ssh/id_rsa 中。
Your public key has been saved in /root/.ssh/id_rsa.pub. 公鑰
#您的公鑰已保存在/root/.ssh/id_rsa.pub 中。 The key fingerprint is:
#關鍵指紋是: SHA256:toCXv2xpFWsS6ClyN1sAKPIyup7VEdaQLKJH/tD+EZk root@bogon The key's randomart image is:
#鑰匙的隨機圖像是:
+---[RSA 2048]----+
|  ....	|
|o.o..oo	|
|o=...+ =	|
|+ = o.E.. .	|
|.+ +.o++S. o	|
|. . *.B+o.+	|
| . + = =o=	|
|. o  o.+.	|
|.o	oo	|
+----[SHA256]-----+
[root@cloud-host2 ~]# cd /root/.ssh/ 
[root@cloud-host2 .ssh]# ls
id_rsa  id_rsa.pub known_hosts
id_rsa(私鑰);id_rsa.put(公鑰);

5.2 把公鑰文件傳到服務端
使用 ssh-copy-id 命令將客戶端生成的公鑰發布到遠程服務器 192.168.1.63 cloud-host1。

[root@cloud-host2 .ssh]# ssh-copy-id -i 192.168.1.63
The authenticity of host '192.168.1.63(192.168.1.63)' can't be established.

RSA key fingerprint is d9:17:d7:db:38:7c:e8:56:9c:4b:7e:00:7f:9e:1c:74.
Are you sure you want to continue connecting (yes/no)? yes	##### 輸入yes 
Warning: Permanently added '192.168.1.64' (RSA) to the list of known hosts. root@192.168.1.63's password:	#### 輸入 192.168.1.63 主機登錄密碼。
Now try logging into the machine, with "ssh '192.168.1.63'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting
#這個時候可以通過 ssh 無密鑰直接登陸主機
注意:如果服務器不是監聽 22 端口,則需要指定端口傳輸密鑰:
[root@cloud-host2 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub -p 222 root@192.168.1.63
Number of key(s) added: 1 添加的鍵數,
秘鑰一般存放在 /root/.ssh/authorized_keys
傳輸完成后再次連接服務端就不需要輸入密碼了

6、使用密鑰並禁止使用密碼登錄服務器

① 先按步驟5執行ssh-keygen生成密鑰
② 在服務器上安裝公鑰

cd ~/.ssh/
#把公鑰文件內容輸出到authorized_keys此文件中
cat id_rsa.pub >> authorized_keys 

③ 到此就完成了公鑰的安裝,請保證以下文件權限正確,權限過大啟動sshd服務就會報錯

chmod 600 authorized_keys
chmod 700 ~/.ssh

④ 設置 SSH,打開密鑰登錄功能
編輯 /etc/ssh/sshd_config 文件,進行如下設置:

RSAAuthentication yes
PubkeyAuthentication yes

⑤ 請留意 root 用戶能否通過 SSH 登錄:(如果為no也是不能登錄的)

PermitRootLogin yes

⑥ 當你完成全部設置,並以密鑰方式登錄成功后,再禁用密碼登錄選項:

PasswordAuthentication  no

保存退出
重啟服務:

systemctl restart sshd

⑦ 下載私鑰文件到本地電腦中,如果沒有sz命令則執行以下命令安裝上傳下載工具

yum install lrzsz -y
sz  id_rsa    # sz下載私鑰文件

再次連接服務器就會看見密碼欄為灰色,只能使用剛剛從服務器上下載的密鑰登錄
image

7、通過雲平台的安全組限制遠程登陸的ip

二、使用開源軟件fail2ban加固主機安全(方法二)

優點:

使用簡單、靈活、功能強大(此功能需要配合iptables使用)

原理:

通過調用iptables等安全策略來達到放暴力破解的目的!

場景說明:

使用雲主機對外提供的公網網站一直被別人暴力破解 SSHD 服務密碼。雖然沒有成功,但會導致系統負載很高,原因是在暴力破解的時候,系統會不斷地認證用戶,從而增加了系統資源額外開銷,導致訪問公司網站速度很慢。
然而fail2ban 程序可以監視你的系統日志,然后匹配日志的錯誤信息(正則式匹配)執行相應的屏蔽動作(一般情況下是防火牆),而且可以發送 e-mail 通知系統管理員,很實用、很強大!
簡單來說其功能就是防止暴力破解。工作的原理是通過分析一定時間內的相關服務日志,將滿足動作的相關IP 利用 iptables 加入到 dorp 列表一定時間。

下載軟件包:

官方地址:http://www.fail2ban.org 如圖
image

圖 1-7 fail2ban 官網
fail2ban 程序下載地址:http://www.fail2ban.org/wiki/index.php/Downloads 如圖
image
圖 1-8 fail2ban 程序下載
注意:以上展示 fail2ban 的源碼包下載,以下實驗使用 yum 安裝。

安裝配置:
需要安裝 python 開發環境,並且版本要大於 2.4。

[root@cloud-host1 ~]# python -V
Python 2.6.6

使用 yum 安裝 fail2ban

[root@cloud-host1 ~]# y um -y install epel-release 
[root@cloud-host1 ~]#  yum -y install fail2ban

相關主要文件說明

ls /etc/fail2ban/
........
/etc/fail2ban/action.d
/etc/fail2ban/fail2ban.conf
/etc/fail2ban/filter.d
/etc/fail2ban/jail.conf

應用實例:

設置條件:SSH 遠程登錄 5 分鍾內 3 次密碼驗證失敗,禁止用戶 IP 訪問主機 1 小時,1 小時該限制自動解除,用戶可重新登錄。
因為動作文件(action.d/iptables.conf)以及日志匹配條件文件(filter.d/sshd.conf )安裝后是默認存在的。基本不用做任何修改。所有主要需要設置的就只有 jail.conf 文件。啟用SSHD 服務的日志分析,指定動作閥值即可。

1、配置文件:/etc/fail2ban/jail.conf 及說明如下:

[root@cloud-host1 ~]# vim /etc/fail2ban/jail.conf
[DEFAULT]	#全局設置
ignoreip =	  #忽略的 IP 列表,不受設置限制。 
bantime  = 10m		#屏蔽時間,單位:秒。
findtime  = 10m		#這個時間段內超過規定次數會被 ban 掉。 maxretry = 5	#最大嘗試次數。
backend = auto	#日志修改檢測機制(gamin、polling 和 auto 這三種)。

[sshd]	#單個服務檢查設置,如設置 bantime、findtime、maxretry 和全局沖突,服務
優先級大於全局設置。
port	= ssh	279 行 
logpath = %(sshd_log)s 
backend = %(sshd_backend)s

#加入如下內容
enabled  = true	#是否激活此項(true/false)修改成 true。
filter = sshd	#過濾規則 filter 的名字,對應 filter.d 目錄下的 sshd.conf。 
action = iptables[name=SSH, port=ssh, protocol=tcp]	#動作的相關參數,對應action.d/iptables.conf 文件。
sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]	#觸發報警的收件人。可寫可不寫 根據自己需要
logpath = /var/log/secure	#檢測的系統的登陸日志文件。這里要寫 sshd 服務日志文件。
默認為 logpath = /var/log/sshd.log(在 centos8 當中需要刪除默認的 ssh 區域 logpath 選項) 。

#5 分鍾內 3 次密碼驗證失敗,禁止用戶 IP 訪問主機 1 小時。 配置如下。 (按需修改)
bantime = 3600    #禁止用戶 IP 訪問主機 1 小時。
findtime = 300     #在 5 分鍾內內出現規定次數就開始工作。 
maxretry = 3       #3 次密碼驗證失敗。

2、配置內容如下圖:
image
3、啟動服務

[root@cloud-host1 ~]# systemctl start fail2ban	# 啟動fail2ban服務
[root@cloud-host1 ~]# systemctl enable fail2ban	# 設置開機自動啟動

[root@cloud-host1 ~]# > /var/log/secure	# 清空日志內容
[root@cloud-host1 fail2ban]# systemctl restart fail2ban	#重啟 fail2ban 服務

4、測試

測試:故意輸入錯誤密碼 3 次,再進行登錄時,會拒絕登錄。 
[root@cloud-host2 ~]# ssh 192.168.1.63
root@192.168.1.63's password:	#故意輸入錯誤密碼。 
Permission denied, please try again.
root@192.168.1.63's password:	#故意輸入錯誤密碼。 
Permission denied, please try again.
root@192.168.1.63's password:	#故意輸入錯誤密碼。 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@cloud-host2 ~]# ssh 192.168.1.63
ssh: connect to host 192.168.1.63 port 22: Connection refused

5、然后我們檢測下 fail2ban是否工作。

[root@cloud-host1 ~]# fail2ban-client status
Status
|- Number of jail:   1
`- Jail list:	sshd	#具體看某一項的狀態也可以看,如果顯示被 ban 的ip 和數目就表示成功了,如果都是 0,說明沒有成功。

[root@cloud-host1 ~]# fail2ban-client status sshd 
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned:   1
|- Total banned:  1
`- Banned IP list: 192.168.1.64

查看 fail2ban 的日志能夠看到相關的信息。

[root@cloud-host1 ~]# tail /var/log/fail2ban.log
2018-11-07 16:11:01,476 fail2ban.actions	[27932]: NOTICE  [sshd] Ban 192.168.1.64

需要注意的兩點:

1、如果后期需要把 iptables 清空后或 iptables 重啟后,也需要把 fail2ban 重啟一下
2、如果修改 ssh 默認端口 22 為 2015 后,配置 fail2ban 來監控 SSHD 服務需要修改配置文件
例:

[root@cloud-host1 ~]# vim /etc/ssh/sshd_config
改 17 #Port 22
為 17 Port 2015
[root@cloud-host1 ~]# systemctl restart sshd 
[root@cloud-host1 ~]# vim /etc/fail2ban/jail.conf
#修改 iptables 動作中的端口號,默認為 SSH,如圖 1-11 所示。
改:port=ssh
為  port=2015

image
修改 fail2ban 監聽 SSH 端口重啟服務即可

systemctl restart fail2ban

誤操作自己的ip被加入黑名單,則可以手動移除自己的ip
fail2ban 從黑名單中移除 IP 的方法:

fail2ban-client set sshd unbanip 192.168.1.6


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM