一、禁止ROOT用戶遠程登錄
linux中root用戶是超級管理員,可以針對root用戶暴力破解密碼,這樣很不安全,工作中我們一般禁止root用戶直接遠程登陸,開設一個或多個普通用戶,只允許登陸普通用戶,如果有需要用root用戶,可以su切換root 或者sudo來擁有root權限執行命令。
1、需要編輯/etc/ssh/sshd_config。
vim /etc/ssh/sshd_config
2、找到 PermitRootLogin
改為 PermitRootLogin no
3、保存退出配置文件后,重啟sshd服務
systemctl restart sshd.service
二、設置只有指定用戶組才能使用su命令切換到root用戶
1、新建普通用戶,比如baby
2、修改密碼
3、將帳號加入wheel組
4、設置只允許這個組的帳號,使用su命令切換到root
vi /etc/pam.d/su
找到#auth required pam_wheel.so use_uid
去掉行首的注釋符 # 保存退出;
接着vi /etc/login.defs
在最末添加SU_WHEEL_ONLY yes 保存退出即可。
或者執行
現在,再建立新的普通帳號,是無法使用su命令切換到root組了。
三、對一些關鍵文件進行保護
有時候你發現用root權限都不能修改某個文件,大部分原因是曾經用chattr命令鎖定該文件了。
chattr命令的作用很大,其中一些功能是由Linux內核版本來支持的,不過現在生產絕大部分跑的linux系統都是2.6以上內核了。
通過chattr命令修改屬性能夠提高系統的安全性,但是它並不適合所有的目錄。
chattr命令不能保護/、/dev、/tmp、/var目錄。
lsattr命令是顯示chattr命令設置的文件屬性。與chmod這個命令相比,chmod只是改變文件的讀寫、執行權限,更底層的屬性控制是由chattr來改變的。
1、防止系統中某個關鍵文件被修改
chattr +i /etc/passwd /etc/group /etc/shadow /etc/gshadow
如果需要改動時可以使用
chattr -i /etc/passwd /etc/group /etc/shadow /etc/gshadow
2、讓某個文件只能往里面追加數據,但不能刪除,適用於各種日志文件
chattr +a /var/log/messages
四、設置密碼過期時間、修改間隔時間、到期警告時間
對於新添加的用戶,用戶密碼過期時間是從/etc/login.defs中PASS_MAX_DAYS提取的,普通系統默認就是99999,而安全操作系統4.0是90。更改此處,只是讓新建的用戶默認密碼過期時間變化,已有用戶密碼過期時間仍然不變。
chage [options] user
chage:密碼失效是通過此命令來管理的。
參數意思:
-m 密碼可更改的最小天數。為零時代表任何時候都可以更改密碼。
-M 密碼保持有效的最大天數。
-W 用戶密碼到期前,提前收到警告信息的天數。
-E 帳號到期的日期。過了這天,此帳號將不可用。
-d 上一次更改的日期
-i 停滯時期。如果一個密碼已過期這些天,那么此帳號將不可用。
-l 例出當前的設置。由非特權用戶來確定他們的密碼或帳號何時過期。
個人設置的參數:過期時間:90;修改間隔:7;到期警告時間:7
五、安裝DenyHosts
當你的linux服務器暴露在外網當中時,服務器就極有可能會遭到互聯網上的掃描軟件進行掃描,然后試圖連接ssh端口進行暴力破解(窮舉掃描)。如果遇到這個問題,一款非常有用的工具DenyHosts可以阻止試圖猜測SSH登錄口令。DenyHosts是用Python寫的一個程序,它會分析SSHD的日志文件(Redhat為/var/log/secure等),當發現同一IP在進行多次SSH密碼嘗試時就會記錄IP到/etc/hosts.deny文件,從而達到自動屏蔽該IP的目的。
1、檢查安裝環境:
1) 判斷系統安裝的sshd是否支持tcp_wrappers(默認都支持),命令如下:
ldd /usr/sbin/sshd |grep libwrap.so.0
如果有輸出:libwrap.so.0 => /lib64/libwrap.so.0 則為支持
2)判斷是否有python(centos默認都有):
python -V
只要系統Python版本不小於2.3版本即可(本機版本為Python 2.6.5)。
2、安裝DenyHosts
1)下載DenyHosts-2.6.tar.gz並上傳到服務器,
wget http://imcat.in/down/DenyHosts-2.6.tar.gz
2)安裝
①解壓
tar -zxvf DenyHosts-2.6.tar.gz
②安裝
cd DenyHosts-2.6 python setup.py install
程序腳本自動安裝在:/usr/share/denyhosts目錄
庫文件安裝在:/usr/lib/python2.6/site-packages/DenyHosts目錄下
denyhosts.py默認安裝在:/usr/bin/目錄下
3)設置啟動腳本
cd /usr/share/denyhosts/ cp daemon-control-dist daemon-control chown root daemon-control chmod 700 daemon-control
##將denyhosts.cfg-dist中不是以"#"開頭的行,寫入denyhosts.cfg文件
grep -v "^#" denyhosts.cfg-dist > denyhosts.cfg
編輯denyhosts.cfg
vi denyhosts.cfg
具體配置項可參考以下的配置:
############ THESE SETTINGS ARE REQUIRED ############
##分析源文件
SECURE_LOG = /var/log/secure
##禁止sshd登陸的IP存放文件
HOSTS_DENY = /etc/hosts.deny
##過多久后清除已經禁止的IP
PURGE_DENY = 1d
##監控的服務名
BLOCK_SERVICE = sshd
##表示允許無效用戶登錄失敗的次數
DENY_THRESHOLD_INVALID = 3
##表示允許普通用戶登錄失敗的次數
DENY_THRESHOLD_VALID = 3
##表示允許root用戶登錄失敗的次數
DENY_THRESHOLD_ROOT = 3
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/share/denyhosts/data
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
##是否做域名反解
HOSTNAME_LOOKUP=NO
LOCK_FILE = /var/lock/subsys/denyhosts
4)將denyhosts添加到系統服務並自動啟動
①自啟動
vi /etc/rc.local
在末尾添加以下行
/usr/share/denyhosts/daemon-control start
②添加至系統服務
ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts chkconfig --add denyhosts chkconfig --level 345 denyhosts on
5)啟動denyhosts
service denyhosts start
6)查看denyhosts是否運行成功
service denyhosts status
顯示:DenyHosts is running with pid = XXXX,即運行成功。
7)至此,denyhosts也就配置完成了;此外將sshd的默認端口修改掉,再結合denyhosts可以防止大部分sshd的暴力破解了。
3、將自己的IP加入白名單
如果自己的IP曾經登陸失敗過,並且超過了你配置文件中的閥值,安裝好denyhosts后,只要一登陸, 自己的IP就會被加到/etc/hosts.deny里。所以可以將IP加入白名單hosts.allow,當hosts.allow和 host.deny相沖突時,以hosts.allow設置優化。
加入白名單:
vim /etc/hosts.allow
添加 sshd:127.0.0.1(冒號后跟要加入的IP)
在網上還看到另一種方法,親測可行:https://www.cnblogs.com/jackrebel/p/3935592.html
六、禁止系統響應任何從外部/內部來的ping請求
攻擊者一般首先通過ping命令檢測此主機或者IP是否處於活動狀態 ,如果能夠ping通 某個主機或者IP,那么攻擊者就認為此系統處於活動狀態,繼而進行攻擊或破壞。如果沒有人能ping通機器並收到響應,那么就可以大大增強服務器的安全性,linux下可以執行如下設置,禁止ping請求:
修改文件 /etc/sysctl.conf,在文件末尾增加一行:
net.ipv4.icmp_echo_ignore_all = 1
如果已經有 net.ipv4.icmp_echo_ignore_all 這一行了,直接修改 = 號后面的值即可的 0 表示允許,1 表示禁止。
修改完成后執行 sysctl -p 使新配置生效(重要)。