被黑了,SSH服務需要大整頓
問題解決方法:
1.通過內網其它節點ssh遠程連接主節點服務器,改掉默認端口22,改成xxxx。
2.改掉root用戶密碼,添加好普通用戶,
3.加上防火墻限制IP的固定端口訪問。重啟防火墻
4.為了防止有異常程序或xxx在運行,重啟服務器(主節點沒跑什麽服務,就nginx,讀者自己斟酌)
為了防止下次再出現類似的問題,需要加強ssh服務防護和優化,下面是針對ssh服務的說明以及參數詳解和配置實踐。
基本大綱:
1.SSH服務協議說明
2.SSH配置文件相關參數詳細說明
3.常用的SSH服務端遠程登錄配置與實踐
4.更高級的SSH安全策略
5.ssh服務安全加強的建議
一: SSH服務協議說明
SSH 是 Secure Shell Protocol 的簡寫,由 IETF 網絡工作小組(Network Working Group )制定;在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密後在進行數據傳輸。確保了傳遞的數據安全。
SSH是專為遠程登錄會話和其他網絡服務提供的安全性協議。利用 SSH 協議可以有效的防止遠程管理過程中的信息泄露問題,在當前的生產環境運維工作中,絕大多數企業普遍采用SSH協議服務來代替傳統的不安全的遠程聯機服務軟件,如telnet(23端口,非加密的)等。
在默認狀態下,SSH服務主要提供兩個服務功能:
一是提供類似telnet遠程聯機服務器的服務,即上面提到的SSH服務。
另一個是類似FTP服務的sftp-server,借助SSH協議來傳輸數據的.提供更安全的SFTP服務(vsftp,proftp)。
windows服務器的默認遠程管理端口是3389,管理員用戶是administrator。linux的管理用戶默認是root。普通用戶默認有很多,遠程連接默認端口為22。有IT經驗的人都知道,更何況是×××了,所以為了減少不必要的風險,為了系統安全,必須隱藏或更改上述默認配置。
二:SSH配置文件相關參數詳細說明
1)SSH客戶端配置文件
/etc/ssh/ssh——config
#配置文件概要
Host * #選項“Host”只對能夠匹配後面字串的計算機有效。“*”表示所有的計算機。
ForwardAgent no #設置連接是否經過驗證代理(如果存在)轉發給遠程計算機。
ForwardX11 no #設置X11連接是否被自動重定向到安全的通道和顯示集(DISPLAY set)
RhostsAuthentication n #設置是否使用基於rhosts的安全驗證。
RhostsRSAAuthentication no #設置是否使用用RSA算法的基於rhosts的安全驗證。
RSAAuthentication yes #設置是否使用RSA算法進行安全驗證。
PasswordAuthentication yes #設置是否使用口令驗證。
FallBackToRsh no #設置如果用ssh連接出現錯誤是否自動使用rsh。
UseRsh no #設置是否在這臺計算機上使用“rlogin/rsh”。
BatchMode no #如果設為“yes”,passphrase/password(交互式輸入口令)的提示將被禁止。當不能交互式輸入口令的時候,這個選項對腳本文件和批處理任務十分有用。
CheckHostIP yes #設置ssh是否查看連接到服務器的主機的IP地址以防止DNS欺騙。建議設置為“yes”。
StrictHostKeyChecking no #如果設置成“yes”,ssh就不會自動把計算機的密匙加入“$HOME/.ssh/known_hosts”文件,並且一旦計算機的密匙發生了變化,就拒絕連接。
IdentityFile ~/.ssh/identity #設置從哪個文件讀取用戶的RSA安全驗證標識。
Port 22 #設置連接到遠程主機的端口。
Cipher blowfish #設置加密用的密碼。
EscapeChar ~ #設置escape字符。
2)SSH服務端配置文件詳解
/etc/ssh/sshd_config
#配置文件概要
Port 22 # SSH 預設使用 22 這個 port,最好是用別的 port !
Protocol 2,1 # 選擇的 SSH 協議版本,可以是 1 也可以是 2 ,如果要同時支持兩者,就必須要使用 2,1 這個分隔了!
ListenAddress 0.0.0.0
#監聽的主機適配卡!舉個例子來說,如果您有兩個 IP,分別是 192.168.0.100 及 192.168.2.20 ,那麽只想要開放 192.168.0.100 時,
#就可以寫如同下面的樣式:ListenAddress 192.168.0.100 只監聽來自 192.168.0.100 這個 IP 的SSH聯機。如果不使用設定的話,則預設所有接口均接受 SSH
PidFile /var/run/sshd.pid # 可以放置 SSHD 這個 PID 的檔案!左列為默認值
LoginGraceTime 600 # 當使用者連上 SSH server 之後,會出現輸入密碼的畫面,在該畫面中,在多久時間內沒有成功連上 SSH server ,就斷線!時間為秒!
Compression yes # 是否可以使用壓縮指令?
HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私鑰
HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私鑰
HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私鑰
KeyRegenerationInterval 3600 # 由前面聯機的說明可以知道, version 1 會使用 server 的 Public Key ,每隔一段時間來重新建立一次!時間為秒!
ServerKeyBits 768 # Server key 的長度!
SyslogFacility AUTH # 當有人使用 SSH 登入系統的時候,SSH會記錄信息
LogLevel INFO # 登錄記錄的等級---》全部
PermitRootLogin no # 是否允許 root 登入!預設是允許的,但是建議設定成 no!
UserLogin no # 在 SSH 底下本來就不接受 login 這個程序的登入!
StrictModes yes # 當使用者的 host key 改變之後,Server 就不接受聯機
RSAAuthentication yes # 是否使用純的 RSA 認證!?僅針對 version 1 !
PubkeyAuthentication yes # 是否允許 Public Key ?只有 version 2
AuthorizedKeysFile .ssh/authorized_keys #設定若要使用不需要密碼登入的賬號時,那麽那個賬號的存放檔案所在檔名!
RhostsAuthentication no # 本機系統不使用 .rhosts , .rhosts 不安全!
IgnoreRhosts yes # 是否取消使用 ~/.ssh/.rhosts 來做為認證!
RhostsRSAAuthentication no # 針對 version 1 ,使用 rhosts 檔案在/etc/hosts.equiv配合 RSA 演算方式來進行認證!
HostbasedAuthentication no # 這個項目與上面的項目類似,不過是給 version 2 使用的!
IgnoreUserKnownHosts no # 是否忽略家目錄內的 ~/.ssh/known_hosts 這個檔案所記錄的主機內容
PasswordAuthentication yes # 密碼驗證當然是需要的!
PermitEmptyPasswords no # 上面那一項如果設定為 yes 的話,這一項就最好設定為 no ,這個項目在是否允許以空的密碼登入!
ChallengeResponseAuthentication yes # 挑戰任何的密碼認證!所以,任何 login.conf規定的認證方式,均可適用!
PAMAuthenticationViaKbdInt yes # 是否啟用其它的 PAM 模塊!啟用這個模塊將會導致 PasswordAuthentication 設定失效!
#與Kerberos 有關的參數設定!底下不用設定
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no
#有關在 X-Window 底下使用的相關設定
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
PrintMotd no # 登入後是否顯示出一些信息呢?例如上次登入的時間、地點等,預設是 yes ,但是,如果為了安全,可以考慮改為 no !
PrintLastLog yes # 顯示上次登入的信息!可以啊!預設也是 yes !
KeepAlive yes # 一般而言,如果設定這項目的話,那麽 SSH Server 會傳送KeepAlive 的訊息給 Client 端,以確保兩者的聯機正常!在這個情況下,任何一端死掉後, SSH 可以立刻知道!而不會有僵屍程序的發生!
UsePrivilegeSeparation yes # 使用者的權限設定項目!
MaxStartups 10 # 同時允許幾個尚未登入的聯機畫面?
DenyUsers * # 設定受抵擋的使用者名稱
三:常用的SSH服務端遠程登錄配置與實踐
配置文件 /ect/ssh/sshd_config
#常用參數:
Port # 可修改ssh訪問端口,默認為22。默認在本機的所有網絡接口上監聽。端口範圍:0~65535,不能與已有的服務器端口沖突
PermitEmptyPasswords #是否允許密碼為空的用戶遠程登錄。默認為"no"
PermitRootLogin #是否允許ssh遠程登錄root帳號,建議為no
ClientAliveInterval 0 #客戶端連接數做限制,根據需求設置
UseDNS #指定sshd是否應該對遠程主機名進行方向解析,以檢查此主機名是否與其IP地址真實對應。默認值為"yes"。個人建議改成no,否則可能會導致ssh連接很慢
GSSAPIAuthentication no #解決Linux之間使用SSH遠程連接慢的問題
#限制可登錄用戶的辦法如下:
AllowUsers user1 user2 user3 #允許ssh登錄用戶
DenyUsers #禁止ssh登陸用戶
AllowGroups #允許ssh登錄用戶組
DenyGroups #禁止ssh登陸用戶組
#溫馨提示:這裏用虛擬機做測試,以免參數設置有誤,連接不上。可以上真實虛擬機修改
[root@localhost ssh]# cp sshd_config sshd_config$(date +%F) [root@localhost ssh]# cat sshd_config Port 52168 #連接端口改為52168 PermitRootLogin no #不允許ssh遠程登錄root帳號 PermitEmptyPasswords no #不允許密碼為空的用戶遠程登錄 UseDNS no #不進行解析 GSSAPIAuthentication no #解決Linux之間使用SSH遠程連接慢的問題 allowusers [email protected] #允許ywxi用戶使用本機內網地址鏈接 denyusers [email protected] #禁止ywxitest用戶使用本機內網地址連接 [root@localhost ssh]# useradd ywxi #創建用戶,用來測試 [root@localhost ssh]# useradd ywxitest [root@localhost ssh]# passwd ywxi #給ywxi用戶設置密碼,暫時不給ywxitest用戶設置 [root@localhost ssh]# ifconfig |grep 'inet addr' #虛擬機IP地址 inet addr:192.168.1.8 Bcast:192.168.1.255 Mask:255.255.255.0 inet addr:127.0.0.1 Mask:255.0.0.0 [root@localhost ssh]# /etc/init.d/sshd restart #重啟服務,使SSH服務端配置生效 Stopping sshd: [ OK ] Starting sshd: [ OK ] [root@localhost ssh]# grep 52168 /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 52168 -j ACCEPT #添加防火墻規則允許52168端口開放 [root@localhost ssh]# /etc/init.d/iptables restart iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: [ OK ]
以下是客戶端用CRT工具通過sshd服務遠程連接虛擬主機過程:
用root用戶連接,一直會提示密碼驗證失敗
修改配置PermitRootLogin yes 改為yes,註意有allowusers限制用戶時需要把root用戶也允許
修改後,重啟sshd服務設置好端口後,root用戶即可連接
四:更高級的SSH安全策略
限制用戶登錄IP的方法有兩種;
1)修改/etc/hosts.allow和/etc/hosts.deny 這兩個文件,把需要通過的IP寫在/etc/hosts.allow 文件裏 [root@localhost ~]# cat /etc/hosts.allow sshd:192.168.1.11:allow [root@localhost ~]# cat /etc/hosts.deny sshd:ALL [root@localhost ~]# /etc/init.d/sshd restart #重啟服務使配置生效 2)修改/etc/ssh/sshd_config文件 [root@localhost ~]# cat /etc/ssh/sshd_config allowusers [email protected] allowusers [email protected] denyusers [email protected] [root@localhost ~]# /etc/init.d/sshd restart #重啟服務使配置生效
更改SSH監聽的IP,使其監聽內網IP段或指定ip;
1)更改SSH監聽的IP,使其監聽內網IP段 [root@localhost ssh]# cat sshd_config|grep Listen ListenAddress 192.168.1.8:52168 2)通過防火墻限制僅能使用內網IP連接此服務器。限制命令如下 iptables -I INPUT -p -tcp --dport 52168 -s 192.168.1.0/24 -j ACCEPT 3)通過撥號到×××服務器,然後從局域網訪問這些服務器,提升安全性。
五:ssh服務安全加強的建議(僅供參考,工作中根據需求來就好行)
1、不要使用默認端口
2、禁止使用protocol version 1
3、限制可登錄用戶
4、設定空閑會話超時時長
5、利用防火墻設置ssh訪問策略
6、僅監聽特定的IP地址
7、基於口令認證時,使用強密碼策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
8、使用基於密鑰的認證
9、禁止使用空密碼
10、禁止root用戶直接登錄
11、限制ssh的訪問頻度和並發在線數
12、做好日誌,經常分析
13、鎖死sshd服務的配置文件,防止篡改,修改鎖文件命令
被黑了,SSH服務需要大整頓