1. 程式人生 > >在公網上的Linux,我的一些配置分享

在公網上的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檔案下追加一條記錄。客戶端使用私鑰登陸。相關的教程網上很多,不做贅述。需要注意:

  1. RSA的版本和SSH版本,現在目前系統都是預設RSA2,SSH2,並且預設禁用低版本的,可以忽略;
  2. 在生成金鑰的時候,可以不設定密碼,我還是建議可以用一個簡單的密碼,不用太複雜;
  3. 注意目錄(700)和檔案(600)的許可權;追加的時候注意換行回車
  4. 目前和未來幾年內這個演算法是安全的,但是量子計算機破解就是一兩分鐘,甚至一秒鐘就搞定
    ,要有這方面意識。

這兩天,阿提亞爵士聲稱證明了黎曼猜想。不過看新聞報道,好像是數學家們認為希望不大。如果黎曼猜想被證明了的話,就意味著以素數為基礎的所有加密演算法都是不安全的。

禁用root使用者

這個比較簡單:

  1. 修改配置檔案是在:/etc/ssh/sshd_config
  2. 搜尋PermitRootLogin yes,一般是註釋的#PermitRootLogin yes; 去掉註釋,改為no就可以了。
  3. 根據個人需要,普通使用者是否可以使用密碼登陸,PasswordAuthentication;我修改的是yes,我認為我可能會在臨時的電腦上用密碼登陸。
  4. 重啟ssh: systemctl restart sshd

更改 ssh 埠

把系統預設的ssh埠22,改為一個使用者自定義的,1024以下是系統保留的,從1024-65535是使用者使用的。

  1. 修改配置檔案是在:/etc/ssh/sshd_config
  2. 在檔案中找到#Port 22 預設是註釋掉的,然後去掉註釋,改為其他埠號,
  3. 千萬一定要注意,記得把自定義的埠,加入到防火牆中,tcp協議,否則可能面臨無法登陸了。
  4. 重啟ssh: systemctl restart sshd

禁用 SELinux(Security-Enhanced Linux)

因為這個vps只有我一個人使用,並且也要時不時的折騰折騰,所以為了不必要的困擾,就把這個給禁用了。

  1. 修改配置檔案是在:/etc/selinux/config
  2. SELINUX=enforcing修改為SELINUX=disabled,永久關閉;
  3. 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命令來看看是網路不通,還是延遲過高。所以就放開了。

  1. 禁用ICMP協議。/etc/sysctl.conf,增加net.ipv4.icmp_echo_ignore_all = 1,1禁用,0啟用;
  2. 使配置生效sysctl -p

別名設定

為了操作自己的linux 更加方便,可以做很多自定義的命令。好處是很方便,壞處就是換臺機器可能就不會玩了。

  1. shell檔案在/etc/profile.d/目錄下,對所有使用者生效,使用者登陸執行下面的所有指令碼。注意這個目錄下的指令碼執行順序是第一個執行的,也就是說 alias 會被後面的覆蓋,
  2. 一些登陸後初始化的指令碼,環境變數設定,都建議放在這個目錄下面/etc/profile.d/
  3. PS1PS(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);
  • 一年多的時間部落格沒有怎麼更新,這幾天會記錄一下這段時間的積累。