爲了方便使用,通常服務器都會經過配置遠程訪問來保證隨時配置服務器,可是不正確的遠程訪問配置會對系統產生安全隱患,產生被入侵的風險。css
現代服務器環境每每須要用戶遠程登陸,而遠程登陸自己就具備必定的安全風險————中間人攻擊。
在早期,telnet是一種經常使用的登陸方式,但它過於古老,並且使用明文傳輸,這使得對其的攻擊代價十分之小,極易遭到攔截與僞造。現代遠程登陸已經基本拋棄了telnet,而是經過SSH服務遠程登陸服務器。
SSH會加密全部的傳輸數據,而且能夠防護DNS和IP欺騙,通過SSH壓縮的數據也能夠提升遠程訪問的傳輸效率。
SSH在服務端運行的是sshd服務,sshd服務對應的主配置文件是/etc/ssh/sshd_config
。shell
不少時候,爲了方便記憶,用戶每每會使用一些簡單的密碼。例如本身的生日、某個時間點或者一些其餘內容,但這些密碼其實安全性很低,在撞庫攻擊下很容易就受到攻破。因此建議使用隨機生成的高位強密碼,並週期性更換。
Linux系統自帶的openssl就能夠生成一串強密碼供用戶使用,建議使用32位以上的強密碼,這樣能夠有效的防止撞庫攻擊。
如生成一串十六位的密碼:vim
$ openssl rand -base64 16 WjzyDqedkWf3e5A3tJw/c=
使用強密碼認證仍存在必定的風險,如管理員忘記或遺失密碼,甚至泄露密碼。而密鑰認證則是一種更加安全的認證方式,由於其將密鑰文件存儲在客戶端與服務器中,沒必要輸入密碼就能夠進行登陸,避免了密碼泄露的風險。
這裏以Xshell6爲例,講解經過密鑰認證方式遠程登陸Linux服務器的實現方法。安全
$ mkdir /home/user01/.ssh $ chmod 700 /home/user01/.ssh
而後將公鑰上傳到服務器,而且導入密鑰,在將公鑰上傳後,使用如下命令將公鑰導入到服務器,並修改公鑰文件的權限:bash
$ ssh-keygen && cat /上傳公鑰的路徑/id_rsa_2048.pub >> /home/user01/.ssh/authorized_keys $ chmod 600 /home/user01/.ssh/authorized_keys
$ vim /etc/ssh/sshd_config ##修改如下配置: Protocol 2 #僅容許使用SSH2 PubkeyAuthentication yes #啓用PublicKey認證 AuthorizedKeyFile .ssh/authorized_keys #PublicKey文件路徑 PasswordAuthentication no #不使用口令認證
最後重啓sshd服務:服務器
$ systemctl restart sshd
用戶在shell中的操做記錄會被保存在用戶目錄下的.bash_history
文件中,經過這個文件能夠查詢shell命令的執行歷史,有助於進行系統審計與問題排查。
而且,在遭受到黑客攻擊後,也能夠經過這個文件查詢黑客登陸服務器所執行的歷史命令操做,可是黑客在攻擊會爲了毀滅痕跡而刪除.bash_history
文件,因此咱們要對該文件進行保護。
默認的.bash_history並不會區分不一樣用戶操做命令與執行時間,咱們能夠經過如下方式來讓history命令記錄全部的shell命令的執行時間,編輯/etc/bashrc
文件:app
HISTFILESIZE=4000 #定義保存命令的總數 HISTSIZE=4000 #定義輸出的命令總數 HISTTIMEFORMAT='%F %T' #定義時間格式 export HISTTIMEFORMAT #傳遞變量
而後能夠利用如下方法來實現詳細記錄登錄過系統的用戶、IP地址、shell命令以及詳細操做時間,並將這些信息以文件方式保存在一個安全的目錄,
將如下代碼添加到/etc/profile文件中:ssh
#history USER_IP='who -u am i 2>/dev/null| awk '{print SNF}'|sed -e 's/[()]//g'' HISTDIR=/usr/share/.history if [ -z $USER_IP ] then USER_IP='hostname' fi if[ ! -d $HISTDIR ] then mkdir -p $HISTDIR chmod 777 $HISTDIR fi if [ ! -d $HISTDIR/${LOGNAME} ] then mkdir -p $HISTDIR/${LOGNAME} chmod 300 $HISTDIR/${LOGNAME} fi export HISTSIZE=4000 DT='date +%Y$m$d_%H%M%S' export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.SDT" export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]" chmod 600 $HISTDIR/${LOGNAME}/*.history* 2>/dev/null
tcp_wrappers是Linux中用於分析TCP/IP數據包的軟件,相似的如iptables
,與iptables不一樣的是,iptables經過監視系統運行狀態阻擋惡意攻擊。而tcp_wrappers
能夠實現對系統中提供某些服務的控制。
tcp_wrappers有一個TCP的守護進程叫做tcpd。以ssh爲例,每當有ssh的鏈接請求時,tcpd即會截獲請求,先讀取系統管理員所設置的訪問控制文件,符合要求,則會把此次鏈接原封不動的轉給真正的ssh進程,由ssh完成後續工做;若是此次鏈接發起的ip不符合訪問控制文件中的設置,則會中斷鏈接請求,拒絕提供ssh服務。tcp
但tcp_wrappers仍存在有必定的侷限性,Linux中的一個服務是否可使用tcp_wrappers,取決於服務是否應用了libwrapped庫文件,系統中默認的一些服務,如sshd、portmap、sendmail、xinetd、vsftpd、tcpd等均可以使用tcp_wrappers。工具
咱們能夠經過如下命令來檢查系統中是否安裝有tcp_wrappers
:
$ rpm -q tcp_wrappers
若是輸出有關tcp_warppers的信息,則說明系統中已經安裝了tcp_warppers。
tcp_wrappers有兩個配置文件:/etc/hosts.allow
和/etc/hosts.deny
,
Linux對配置文件的執行是順序的,先讀取/etc/hosts.allow
,一旦知足就應用,而拋棄後面的配置,因此能夠只設定/etc/hosts.allow
文件,而後在/etc/hosts.deny
中設置爲全部計算機都不能登錄。
配置文件準從以下語法:
service:host(s) [:action]
其中,
例如:
ALL:ALL EXCEPT 192.168.123.8
表示除192.168.123.8之外的請求都會被容許或拒絕,取決於以上內容寫在哪一個配置文件裏。
文本 | 做用 |
---|---|
Port 22 | 用來設置sshd監聽的接口,建議修改成5位數字以上的陌生數字端口 |
Protocol 2 | 設置使用的SSH協議版本爲SSH1或SSH2,SSH1存在漏洞,建議不變 |
ListenAddress 0.0.0.0 | 用於設置sshd服務器綁定的IP地址 |
HostKey /etc/ssh/ssh_host_dsa_key | 用於設置服務器密鑰文件的位置 |
KeyRegenerationInterval 1h | 用於設置生成密鑰的週期。能夠防止入侵者利用盜取的密鑰 |
ServerKeyBits 1024 | 用於定義密鑰長度 |
SyslogFacility AUTHPRIV | 用於設置在記錄來自sshd的消息時,是否給出facility code |
LogLevel INFO | 用於設置log文件的消息級別 |
LoginGraceTime 2m | 若是用戶登陸失敗,在切斷連接前。服務器須要等待的時間。 |
PermitRootLogin no | 是否容許root用戶登陸,建議設置爲no |
StrictModes yes | 用於設置SSH在接受登錄請求以前是否檢查用戶根目錄和rhosts文件的權限和屬主。建議設置爲yes |
RSAAuthentication no | 設置是否開啓RSA密鑰認證,只針對SSH1,使用RSA密鑰登陸時,須要開啓 |
PubkeyAuthentication yes | 設置是否使用公鑰驗證,使用公鑰驗證時,須要開啓 |
authorizedKeyFile .ssh/authorized_key | 用於設置公鑰文件路徑,與PubkeyAuthenticatio 配合使用 |
IgnoreUserKnownHosts no | 用於設置SSH在進行RSAAuthentication 安全認證時忽略用戶的$HOME/.ssh/known_hosts 文件 |
IgnoreRhosts yes | 用於設置驗證時是否使用~/.rhosts 和~/.shosts 文件。 |
PassWordAuthentication yes | 用於設置是否開啓密碼驗證 |
PermitEmptyPasswds no | 用於設置是否容許用空密碼登陸系統,必須爲no |
ChallengeResponseAuthenthtication no | 禁用s/key 密碼 |
UsePAM no | 是否使用PAM認證 |
X11Forwarding yes | 用於設置是否容許X11轉發 |
PrintMotd yes | 用於設置是否顯示歡迎登陸信息,建議加入警告信息以震懾攻擊者 |
PrintLastLog no | 是否顯示上次登陸信息 |
Compression yes | 是否壓縮命令 |
TCPKeepAlive yes | 是否防止死連接,經過心跳包的方式來進行鏈接 |
UseDNS no | 是否使用DNS反向解析 |
MaxStartups | 容許幾個還沒有登錄的鏈接,已創建的鏈接不算入其中。設置爲5個能夠防止對服務器進行惡意鏈接 |
MaxAuthTries 3 | 設置最大失敗嘗試登錄次數,合理設置能夠防護撞庫攻擊 |
AllowUser <用戶名> | 指定用戶容許經過遠程登陸訪問,多個用戶以空格分隔 |
AllowGroups <組名> | 指定用戶組容許經過遠程登陸訪問,多個用戶組以空格分隔 |
DenyUsers <用戶名> | 指定用戶禁止經過遠程登陸訪問,多個用戶以空格分隔 |
DenyGroups <組名> | 指定用戶組禁止經過遠程登陸訪問,多個用戶組以空格分隔 |