Linux VPS 安全配置:禁用22端口、root用戶以及配置Denyhosts防暴力破解
最近租用了一臺Vultr東京機房的VPS,每天都會生成許多異常登錄失敗的日誌,疑似受到掃描軟件的暴力破解,遂Google了一下服務器安全防護方面的知識。
廢話不多說,下面將操作過程記錄下來:
註意:以下操作基於CentOS 7,不同系統下的具體操作可能會有區別
一、修改SSH服務默認端口
SSH服務的默認端口是22,掃描軟件首先會通過此端口嘗試登錄,因此把它改成一個不易猜到的端口(推薦使用10000~65535之間的,復雜度最高也不易和其他進程發生沖突)
1 vim /etc/ssh/sshd_config
新增XXXXX端口並保留22端口(防止一會新端口啟用失敗,原先的22端口也連不上)
1 # If you want to change the port on a SELinux system, you have to tell2 # SELinux about this change. 3 # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER 4 # 5 Port 22 6 Port XXXXX 7 #AddressFamily any 8 #ListenAddress 0.0.0.0 9 #ListenAddress ::
添加新端口到防火墻
1 firewall-cmd --permanent --add-port=XXXXX/tcp # 添加到防火墻 2 firewall-cmd --reload # 重新加載防火墻配置 3 firewall-cmd --permanent --query-port=XXXXX/tcp # 查看是否添加成功
重啟SSH服務和防火墻,最好也重啟下服務器
1 systemctl restart sshd.service 2 systemctl restart firewalld.service 3 reboot
使用新端口連接VPS,如果連接成功,將22端口重新註釋掉
二、新建普通用戶,禁用root用戶遠程登錄
root用戶擁有服務器的最高權限,如果被破解後果將不堪設想,可以通過禁用root用戶遠程登錄來防止
1 vim /etc/sudoers
查看以下位置%wheel前面是否有#,如有將其刪掉,授予wheel用戶組超級管理員權限
1 ## Allows people in group wheel to run all commands2 %wheel ALL=(ALL) ALL
新增普通用戶並授權,即可在該用戶下通過sudo執行需要管理員權限的命令
1 useradd test # 添加用戶 2 passwd test # 設置密碼 3 usermod -G wheel test # 將新用戶添加到wheel組(添加到附加組,主組不變) 4 id test # 查看是否添加成功
修改/etc/ssh/sshd_config文件
1 vim /etc/ssh/sshd_config
找到以下行,將PermitRootLogin後的yes改為no,即可禁止root用戶遠程登錄
1 PermitRootLogin no
重啟SSH服務,以後通過新建的普通用戶登錄VPS即可
三、安裝Denyhosts防暴力攻擊
DenyHosts是針對SSH服務器的一個基於日誌的入侵預防安全工具,是用Python編寫的。其通過監測身份驗證登錄日誌中失敗的登錄嘗試,屏蔽這些登錄者的IP地址,從而預防對SSH服務器的暴力破解。—— 維基百科
首先下載Denyhosts,官網地址:https://sourceforge.net/projects/denyhosts/
也可以用wget直接下載源碼
1 wget http://jaist.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz
然後解壓縮
1 tar -zxvf DenyHosts-2.6.tar.gz
進入解壓目錄
1 cd DenyHosts-2.6
執行安裝
1 python setup.py install
進入安裝目錄
1 cd /usr/share/denyhosts/
創建配置文件和啟動文件副本
1 cp denyhosts.cfg-dist denyhosts.cfg 2 cp daemon-control-dist daemon-control
建立符號鏈接
1 ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
設置Denyhosts為開機啟動
1 chkconfig --add denyhosts # 增加denyhosts服務 2 chkconfig denyhosts on # 設置denyhosts在各等級(2、3、4、5)為on(開啟)狀態 3 chkconfig --list denyhosts # 查詢是否設置成功
啟動服務
1 systemctl start denyhosts.service
對於多次登錄失敗的IP,會被記錄到/etc/hosts.deny文件中加以屏蔽,從而限制其繼續登錄
結束語
至此,VPS的安全配置告一段落了。當然還有例如改用SSH密鑰登錄服務器等方法,不過筆者覺得萬一需要在其他電腦上臨時登錄,用密鑰反而不太方便。其實對於普通的個人服務器來說,通過以上的配置,已經能夠抵禦大部分暴力攻擊了。
附:Denyhosts配置文件說明(denyhosts.cfg)
1 SECURE_LOG = /var/log/secure #指定ssh日誌文件 2 HOSTS_DENY = /etc/hosts.deny #記錄阻止登陸系統IP的文件 3 PURGE_DENY = #清理HOSTS_DENY文件的時間 4 BLOCK_SERVICE = sshd #在HOSTS_DENY中定義要阻止的服務 5 DENY_THRESHOLD_INVALID = 5 #系統不存在用戶失敗次數 6 DENY_THRESHOLD_VALID = 10 #除root外,系統存在用戶失敗次數 7 DENY_THRESHOLD_ROOT = 1 #root用戶失敗次數 8 DENY_THRESHOLD_RESTRICTED = 1 #針對WORK_DIR下定義的限制用戶名的失敗次數 9 WORK_DIR = /usr/share/denyhosts/data #將deny的host或ip記錄到WORK_DIR中 10 SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES #來自於allowed-hosts中的可以嘗試,是否報告 11 HOSTNAME_LOOKUP=YES #是否做域名反向解析 12 LOCK_FILE = /var/lock/subsys/denyhosts #保證同時只有一個denyhosts程序運行的鎖文件 13 14 ADMIN_EMAIL = 123@456.789 #設置管理員郵箱,系統開啟了sendmail就會發郵件 15 SMTP_HOST = localhost #SMTP服務器 16 SMTP_PORT = 25 #SMTP端口 17 SMTP_FROM = DenyHosts <[email protected]> #通知郵件的發信人地址 18 SMTP_SUBJECT = DenyHosts Report #發信的主題 19 AGE_RESET_VALID=5d #指定時間沒有失敗登陸記錄,將此主機的失敗計數重置為0,(不適用於root) 20 AGE_RESET_ROOT=25d #root用戶的重置時間 21 AGE_RESET_RESTRICTED=25d #針對有限制用戶的 22 AGE_RESET_INVALID=10d #針對無效用戶的 23 24 DAEMON_LOG = /var/log/denyhosts #程序後臺運行的日誌記錄 25 26 DAEMON_SLEEP = 30s #每次讀取日誌的時間間隔 27 DAEMON_PURGE = 1h #清除機制在 HOSTS_DENY 中終止舊條目的時間間隔
Linux VPS 安全配置:禁用22端口、root用戶以及配置Denyhosts防暴力破解