在公網上的Linux,我的一些配置分享
前言
去年的時候,有一篇介紹搭建ss伺服器的文章,由於某些眾所周知的原因,被阿里雲刪除。
後來有段時間使用vps,配合《鳥哥私房菜》,學習實操linux。當時我以為只要root密碼夠複雜,就一切ok,有一兩個月沒有太關注安全的問題。偶然一次使用lastb
命令,著實下了一跳,我的vps每天都有幾萬次的失敗登陸記錄。嘗試登陸的IP,有俄羅斯,越南,巴西。。。。基本上地球上所有國家都有來過。
這個時候我才意識到,如果不做相關的安全方面的措施,在公網的環境下,與裸奔無異。我的vps是CentOS 7,以下所有涉及到的配置檔案,相關命令都是在CentOS 7以下並且生效了的。
安裝 denyhosts
denyhosts 是查詢了幾萬次的失敗記錄後,立即安裝的。維基上面的簡介
DenyHosts是針對SSH伺服器的一個基於日誌的入侵預防安全工具,是用Python編寫的。其通過監測身份驗證登入日誌中失敗的登入嘗試,遮蔽這些登入者的IP地址,從而預防對SSH伺服器的暴力破解。
配置檔案路徑/etc/denyhosts.conf
,裡面可以配置的項很多,也有詳細說明,我只修改了通知的使用者。
sed -i "s/[email protected]/{使用者名稱}@localhost/g" /etc/denyhosts.conf
效果還是很明顯的,掃描從每天從幾萬降到了一千左右。但是這一千左右的失敗登陸也是不能忍的。
PS:把失敗的記錄基本降為0以後,我考慮通過郵件第一時間通知我,有人嘗試登陸我的主機。後來再網上在查詢,好像是不直接支援的,還需要安裝專門傳送郵件的postfix,僅僅為了這個傳送郵件,好像也沒有太大的必要。就放棄了。
使用金鑰登陸
維基:RSA非對稱加密演算法 我也就瞭解到,是大數的質因數分解,也簡單做推算過,目前還是很安全的。有興趣可以去網上找,李永樂老師的講解。
在客戶端生成公鑰和私鑰,然後把公鑰上傳到伺服器,在/home/{你的使用者名稱}/.ssh/authorized_keys
檔案下追加一條記錄。客戶端使用私鑰登陸。相關的教程網上很多,不做贅述。需要注意:
- RSA的版本和SSH版本,現在目前系統都是預設RSA2,SSH2,並且預設禁用低版本的,可以忽略;
- 在生成金鑰的時候,可以不設定密碼,我還是建議可以用一個簡單的密碼,不用太複雜;
- 注意目錄(700)和檔案(600)的
許可權
;追加的時候注意換行
和回車
; - 目前和未來幾年內這個演算法是安全的,但是量子計算機破解就是一兩分鐘,甚至一秒鐘就搞定
這兩天,阿提亞爵士聲稱證明了黎曼猜想。不過看新聞報道,好像是數學家們認為希望不大。如果黎曼猜想被證明了的話,就意味著以素數為基礎的所有加密演算法
都是不安全的。
禁用root使用者
這個比較簡單:
- 修改配置檔案是在:
/etc/ssh/sshd_config
, - 搜尋
PermitRootLogin yes
,一般是註釋的#PermitRootLogin yes
; 去掉註釋,改為no
就可以了。 - 根據個人需要,普通使用者是否可以使用密碼登陸,
PasswordAuthentication
;我修改的是yes
,我認為我可能會在臨時的電腦上用密碼登陸。 - 重啟ssh:
systemctl restart sshd
更改 ssh 埠
把系統預設的ssh埠22,改為一個使用者自定義的,1024
以下是系統保留的,從1024-65535
是使用者使用的。
- 修改配置檔案是在:
/etc/ssh/sshd_config
, - 在檔案中找到
#Port 22
預設是註釋掉的,然後去掉註釋,改為其他埠號, - 千萬一定要注意,記得把自定義的埠,加入到防火牆中,tcp協議,否則可能面臨無法登陸了。
- 重啟ssh:
systemctl restart sshd
禁用 SELinux(Security-Enhanced Linux)
因為這個vps只有我一個人使用,並且也要時不時的折騰折騰,所以為了不必要的困擾,就把這個給禁用了。
- 修改配置檔案是在:
/etc/selinux/config
, - 把
SELINUX=enforcing
修改為SELINUX=disabled
,永久關閉; setenforce 0
臨時關閉,
su,sudo 免密碼
我的密碼是vps廠商自動生成的,非常複雜。為了避免要在使用root許可權時,還要再輸入密碼。並且既然我的賬號都登陸了,就不應該再次輸入密碼了。
- 把使用者加入 wheel 組(wheel),為了免密碼
usermod -aG wheel {使用者名稱}
- su 免密碼,配置檔案
/etc/pam.d/su
,加上這句話auth sufficient pam_wheel.so trust use_uid
,CentOS7是註釋掉的。 - sudo 免密碼,配置檔案
/etc/sudoers
,把所在組 wheel 設定%wheel ALL=(ALL) NOPASSWD: ALL
,
# wheel組 sudo不需要密碼
sed -i 's/^%wheel.*/%wheel ALL=(ALL) NOPASSWD: ALL/g' /etc/sudoers
# wheel組 su 不需要密碼
sed -i 's/^#auth\s\+sufficient\s\+pam_wheel.so\s\+trust\s\+use_uid/auth sufficient pam_wheel.so trust use_uid/g' /etc/pam.d/su
防火牆設定
一般linux發行版本都是預設開啟防火牆的,並且開啟了22埠。 使用哪個埠就開哪個,不用了的埠一定要關閉,並且使用了tcp協議,只開tcp協議。
firewall-cmd --zone=public --permanent --add-port=${my_ssh_port}/tcp
firewall-cmd --reload
禁止Ping
我之前禁用過一段時間,因為網路不太穩定,還需要使用ping命令來看看是網路不通,還是延遲過高。所以就放開了。
- 禁用ICMP協議。
/etc/sysctl.conf
,增加net.ipv4.icmp_echo_ignore_all = 1
,1禁用,0啟用; - 使配置生效
sysctl -p
別名設定
為了操作自己的linux 更加方便,可以做很多自定義的命令。好處是很方便,壞處就是換臺機器可能就不會玩了。
- shell檔案在
/etc/profile.d/
目錄下,對所有使用者生效,使用者登陸執行下面的所有指令碼。注意這個目錄下的指令碼執行順序
是第一個執行的,也就是說 alias 會被後面的覆蓋, - 一些登陸後初始化的指令碼,環境變數設定,都建議放在這個目錄下面
/etc/profile.d/
, PS1
PS(Prompt Sign): 是指命令提示符,當然調整了一下顏色[email protected]:etc#
,
cat > /etc/profile.d/alias.sh <<-EOF
PS1='\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\\$ '
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
alias ls='ls --color=auto'
alias ll='ls -al'
alias lm='ls -al | more'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias mkcd='function _mkcd(){ mkdir \[email protected] && cd \[email protected]; }; _mkcd'
alias cdl='function _cdl() { cd \[email protected] && pwd; ls -alF; }; _cdl'
EOF
結語
- 這些設定大概是半年前做的了,斷斷續續的;有些遺漏或是不準確的地方歡迎指出;
- 再修改配置檔案的時候,建議花一些時間看一下里面的
註釋
。絕大部分配置檔案裡面,註釋非常清楚,並且佔了檔案的大部分內容; - 我把以上的內容,寫成了sh指令碼。執行過無誤,[僅供參考]](https://github.com/MrBenWang/MyBackUp/blob/master/vps/install_env_vps.sh);
- 一年多的時間部落格沒有怎麼更新,這幾天會記錄一下這段時間的積累。