常見的三種加固措施
方法一:主機基礎安全加固
方法二:通過開源軟件加固主機安全
方法三:通過安全產品加固(略過)
一、主機基礎安全加固(方法一)
以下七種基礎安全加固方法可根據自己需求進行配置加固
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下載私鑰文件
再次連接服務器就會看見密碼欄為灰色,只能使用剛剛從服務器上下載的密鑰登錄
7、通過雲平台的安全組限制遠程登陸的ip
二、使用開源軟件fail2ban加固主機安全(方法二)
優點:
使用簡單、靈活、功能強大(此功能需要配合iptables使用)
原理:
通過調用iptables等安全策略來達到放暴力破解的目的!
場景說明:
使用雲主機對外提供的公網網站一直被別人暴力破解 SSHD 服務密碼。雖然沒有成功,但會導致系統負載很高,原因是在暴力破解的時候,系統會不斷地認證用戶,從而增加了系統資源額外開銷,導致訪問公司網站速度很慢。
然而fail2ban 程序可以監視你的系統日志,然后匹配日志的錯誤信息(正則式匹配)執行相應的屏蔽動作(一般情況下是防火牆),而且可以發送 e-mail 通知系統管理員,很實用、很強大!
簡單來說其功能就是防止暴力破解。工作的原理是通過分析一定時間內的相關服務日志,將滿足動作的相關IP 利用 iptables 加入到 dorp 列表一定時間。
下載軟件包:
官方地址:http://www.fail2ban.org 如圖
圖 1-7 fail2ban 官網
fail2ban 程序下載地址:http://www.fail2ban.org/wiki/index.php/Downloads 如圖
圖 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、配置內容如下圖:
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
修改 fail2ban 監聽 SSH 端口重啟服務即可
systemctl restart fail2ban
誤操作自己的ip被加入黑名單,則可以手動移除自己的ip
fail2ban 從黑名單中移除 IP 的方法:
fail2ban-client set sshd unbanip 192.168.1.6