自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

20個OpenSSH服務器最佳安全實踐

原創(chuàng)
安全 網站安全
OpenSSH是SSH協議的一種實現,它是遠程登錄,通過scp或sftp實現備份和遠程文件傳輸等的推薦安全協議,SSH保證兩個網絡或兩個系統(tǒng)之間數據交互的機密性和完整性。

【51CTO.com獨家翻譯】OpenSSH是SSH協議的一種實現,它是遠程登錄,通過scp或sftp實現備份和遠程文件傳輸等的推薦安全協議,SSH保證兩個網絡或兩個系統(tǒng)之間數據交互的機密性和完整性,它的主要優(yōu)點是通過公鑰加密技術實現服務器身份驗證。但時有OpenSSH零日漏洞爆出,因此OpenSSH服務器本身也需要調整才能提高整體安全性。

默認配置文件和SSH端口

/etc/ssh/sshd_config:OpenSSH服務器配置文件;

/etc/ssh/ssh_config:OpenSSH客戶端配置文件;

~/.ssh/:用戶SSH配置目錄;

~/.ssh/authorized_keys:用戶公鑰(RSA或DSA);

/etc/nologin:如果存在這個文件,sshd會拒絕除root用戶外的其它用戶登錄;

/etc/hosts.allow和/etc/hosts.deny:定義tcp-wrapper執(zhí)行的訪問控制列表;

SSH默認端口:22  

圖 1 SSH會話窗口

1、禁用OpenSSH服務器

工作站和筆記本電腦可以不用OpenSSH服務器,如果你不需要提供SSH遠程登錄和文件傳輸功能,可以禁用并刪除SSHD服務器,CentOS / RHEL / Fedora Linux用戶可以使用下面的yum命令禁用和刪除openssh-server:

# chkconfig sshd off

# yum erase openssh-server

Debian / Ubuntu Linux用戶可以使用下面的apt-get命令禁用和刪除openssh-server:

# apt-get remove openssh-server

你可能需要更新你的iptables腳本,移除ssh例外規(guī)則,在CentOS / RHEL / Fedora下,打開etc/sysconfig/iptables和/etc/sysconfig/ip6tables文件,刪掉與ssh相關的例外規(guī)則,然后使用下面的命令重啟iptables:

# service iptables restart

# service ip6tables restart

2、只使用SSH v2

SSH協議的第一個版本(SSH v1或SSH-1)存在中間人攻擊問題和安全漏洞,它已經被作廢,應該不惜一切代價避免使用SSH v1。打開sshd_config配置文件,如果沒有就增加下面這一行設置:

Protocol 2

這樣啟動sshd后就只會使用SSH協議的第二個版本(SSH v2或SSH-2)了。

3、限制用戶的SSH訪問

默認情況下,所有系統(tǒng)用戶都可以用他們的密碼或公鑰通過SSH實現遠程登錄,但有時你創(chuàng)建的UNIX/Linux用戶是用于ftp或email目的,如果不加限制,這些用戶也可以使用ssh登錄到系統(tǒng),并且可以使用編譯器,腳本語言,如Perl或Python,這些工具已經足夠利害,可以打開任意網絡端口,執(zhí)行任意操作。我的一個客戶端上有過時的PHP腳本,攻擊者可以通過PHP腳本在系統(tǒng)上創(chuàng)建一個新賬號,但攻擊者不能通過該賬號ssh登錄,因為它沒有在允許的用戶列表范圍內(AllowUsers)。

假設我們只要root,vivek和jerry用戶能通過SSH使用系統(tǒng),向sshd_config配置文件中添加:

AllowUsers root vivek jerry

另外,你還可以允許所有用戶通過SSH登錄,但拒絕一部分用戶,這時就需要向sshd_config配置文件中添加:

DenyUsers saroj anjali foo

你也可以配置Linux PAM允許或拒絕通過sshd服務器登錄,你也可以指定一列用戶組有權訪問或拒絕他們訪問ssh。

4、配置空閑超時退出時間間隔

用戶可以通過ssh登錄到服務器,你可以設置一個空閑超時時間間隔避免出現孤兒ssh會話,打開sshd_config配置文件,確保有如下的配置項:

ClientAliveInterval 300

ClientAliveCountMax 0

上面的例子設置的空閑超時時間間隔是300秒,即5分鐘,過了這個時間后,空閑用戶將被自動踢出出去(可以理解為退出登錄/注銷)。

5、禁用.rhosts文件

不要讀取用戶的~/.rhosts和~/.shosts文件,使用下面的設置更新sshd_config配置文件:

IgnoreRhosts yes

SSH可以模擬過時的rsh命令的行為,rsh被公認為是不安全的遠程訪問協議,因此必須得禁用掉。 #p#

6、禁用基于主機的身份驗證

為了禁用基于主機的身份驗證,使用下面的選項更新sshd_config配置文件:

HostbasedAuthentication no

7、禁用root通過SSH登錄

沒有必要使用root用戶通過SSH遠程登錄,普通用戶可以通過su或sudo(推薦)獲得root級別的訪問權,這樣你可以得到完整的審計信息,誰通過sudo在系統(tǒng)上執(zhí)行特權命令就會一清二楚。為了禁止root用戶通過SSH登錄,使用下面的選項更新sshd_config配置文件:

PermitRootLogin no

但也有人認為root用戶通過SSH登錄沒什么不妥,之所以人們一直有“不要用root用戶登錄”的想法,都是不安全的Telnet協議惹的禍。

8、啟用警告橫幅

使用下面的設置更新sshd_config配置文件,設置一個警告橫幅:

Banner /etc/issue

在/etc/issue文件中,可以和你的法律顧問商討一下,列出用戶使用ssh應該遵守的法律法規(guī)和注意事項。

8、防火墻SSH端口:22

你需要為ssh端口22更新iptables或pf防火墻配置,通常,OpenSSH服務器應該只接受來自局域網或受信任的遠程客戶端的連接。

Netfilter(iptables)配置

更新/etc/sysconfig/iptables(Red Hat及基于Red Hat的系統(tǒng))文件,只接受來自192.168.1.0/24和202.54.1.5/29的連接,配置如下:

-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -s 202.54.1.5/29 -m state --state NEW -p tcp --dport 22 -j ACCEPT

如果你還準備讓sshd通過IP V6,那還需要更新/etc/sysconfig/ip6tables(Red Hat或基于Red Hat的系統(tǒng))文件,配置如下:

-A RH-Firewall-1-INPUT -s ipv6network::/ipv6mask -m tcp -p tcp --dport 22 -j ACCEPT

你在實際操作時,請用真實的IP V6地址范圍替換ipv6network::/ipv6mask。

◆BSD PF防火墻配置

如果你使用的是PF防火墻,請更新/etc/pf.conf文件:

pass in on $ext_if inet proto tcp from {192.168.1.0/24, 202.54.1.5/29} to $ssh_server_ip port 
ssh flags S/SA synproxy state

默認情況下,ssh會監(jiān)聽系統(tǒng)上所有網卡和IP地址,限制ssh端口綁定,改變ssh端口(暴力攻擊通常是針對端口22的),假設要綁定到192.168.1.5和202.54.1.5這兩個IP地址,端口改為300,那sshd_config文件需要做如下修改:

Port 300

ListenAddress 192.168.1.5

ListenAddress 202.54.1.5

更好的辦法是使用主動式腳本,如后面會談到的fail2ban或denyhosts。

10、使用強SSH密碼和密語

為你的密鑰使用強用戶密碼和密語有多重要我就不說了,暴力破解攻擊之所以能夠得逞,都是因為你使用了基于字典的密碼,你可以強制用戶避免使用字典中能直接找到的詞作密碼,另外可以借助john the ripper tool工具找出現有系統(tǒng)中存在的弱密碼。下面是一個隨機密碼生成器(放到你的~/.bashrc文件中):

genpasswd() {
 
local l=$1
        
[ "$l" == "" ] && l=20
       
tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs

}

運行它:

genpasswd 16

輸出:

uw8CnDVMwC6vOKgW

#p#

11、使用基于公鑰的身份驗證

使用公/私密鑰對和密碼對私鑰實施保護,如何使用基于RSA和DSA的身份驗證,請參考http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.htmlhttp://www.cyberciti.biz/faq/ssh-password-less-login-with-dsa-publickey-authentication/,永遠不要使用無密鑰密碼登錄。

12、使用基于密鑰鏈的身份驗證

密鑰鏈是一個經過設計的特殊的bash腳本,它讓基于密鑰的身份驗證變得難以置信的方便和靈活,與無密鑰密碼相比,它的優(yōu)勢太多了。關于如何安裝和使用密鑰鏈軟件,請訪問http://www.cyberciti.biz/faq/ssh-passwordless-login-with-keychain-for-scripts/。

13、Chroot SSHD(將用戶鎖定在他們自己的home目錄)

默認情況下,用戶可以瀏覽服務器目錄,如/etc,/bin等,你可以使用基于操作系統(tǒng)的chroot或使用特殊的工具,如rssh,來保護ssh,在OpenSSH 4.8p1和4.9p1中,你不再需要第三方hack工具,如rssh,或是復雜的chroot配置,來將用戶限制在他們自己的home目錄中,新版本中增加了一個ChrootDirectory命令,它可以直接將用戶限制在自己的home目錄中。更多信息請訪問http://www.debian-administration.org/articles/590。

14、使用TCP Wrapper

TCP Wrapper是一個基于主機的網絡ACL系統(tǒng),用于過濾到互聯網的網絡訪問,OpenSSH支持TCP Wrapper,只需要更新你的/etc/hosts.allow文件,下面的例子表示僅允許來自192.168.1.2 和172.16.23.12的ssh訪問:

192.168.1.2 172.16.23.12

關于如何在Linux / Mac OS X 和UNIX類操作系統(tǒng)上安裝和配置TCP Wrapper,請訪問http://www.cyberciti.biz/faq/tcp-wrappers-hosts-allow-deny-tutorial/。

15、禁用空密碼

你需要明確禁止密碼為空的用戶遠程登錄,使用下面的設置更新sshd_config配置文件:

PermitEmptyPasswords no

#p#

16、給SSH攻擊者設置障礙

暴力破解是擊敗加密機制的一種有效手段,暴力破解一般會利用大量的分布式計算機網絡,為了阻止對ssh的暴力攻擊,可以使用下面的軟件:

◆DenyHosts:它是一款基于Python的安全工具,專為保護SSH服務器設計,通過監(jiān)控身份驗證日志中無效的登錄嘗試,阻止掉不懷好意的IP地址,實現對SSH服務器的保護。有關RHEL / Fedora和CentOS Linux下如何安裝DenyHosts的信息,請訪問http://www.cyberciti.biz/faq/rhel-linux-block-ssh-dictionary-brute-force-attacks/。

◆Fail2ban:它也是一個阻止暴力破解SSH的保護工具。

◆security/sshguard-pf:使用pf保護主機免受ssh暴力攻擊。

◆security/sshguard-ipfw:使用ipfw保護主機免受ssh暴力攻擊。

◆security/sshguard-ipfilter:使用ipfilter保護主機免受ssh暴力攻擊。

◆security/sshblock:阻止頻繁的ssh登錄嘗試。

◆security/sshit:檢查SSH/FTP暴力攻擊,阻止攻擊源IP地址。

◆BlockHosts:自動阻止濫用ssh登錄的IP主機。

◆Blacklist:處理暴力攻擊嘗試。

◆Brute Force Detection:它是一個模塊化的shell腳本,解析應用程序日志,檢查身份驗證失敗記錄。

◆IPQ BDB filter:可以看作是一個輕量級的fail2ban。

17、限制端口22上的入站連接速率

netfilter和pf都提供了速率限制功能,因此可以對端口22實施速率限制。

iptables示例

下面的例子展示了60秒內,超過5次連接嘗試,連接將會被丟掉:

#!/bin/bash

inet_if=eth1

ssh_port=22

$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent  --set

$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent 

--update --seconds 60 --hitcount 5 -j DROP
 

從你的iptables腳本調用上面的腳本,下面是另一個配置方案:

$IPT -A INPUT  -i ${inet_if} -p tcp --dport ${ssh_port}

-m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT

$IPT -A INPUT  -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT

$IPT -A OUTPUT -o ${inet_if} -p tcp --sport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT

# another one line example

# $IPT -A INPUT -i ${inet_if} -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 22

-m limit --limit 5/minute --limit-burst 5-j ACCEPT

◆BSD PF例子

下面的設置將限制每個源的最大連接數為20,5秒內最大連接次數為15,如果有人違背該規(guī)則,它將會進入到我們的abusive_ips表中,以后的連接都會被阻止掉,最后,flush關鍵字取消了所有與該規(guī)則匹配的狀態(tài)。

sshd_server_ip="202.54.1.5"

table persist

block in quick from

pass in on $ext_if proto tcp to $sshd_server_ip port

ssh flags S/SA keep state (max-src-conn 20, max-src-conn-rate 15/5, overload flush)

18、使用端口碰撞

端口碰撞(Port knocking)是一個從外部打開防火墻上端口的方法,它在一組預設的關閉端口上產生一個連接嘗試,當連接嘗試的順序被接受,防火墻規(guī)則被動態(tài)修改,允許發(fā)送該連接嘗試的主機連接到指定的端口,下面是ssh使用iptables進行端口碰撞的一個簡單示例:

$IPT -N stage1

$IPT -A stage1 -m recent --remove --name knock

$IPT -A stage1 -p tcp --dport 3456 -m recent --set --name knock2
 
$IPT -N stage2

$IPT -A stage2 -m recent --remove --name knock2

$IPT -A stage2 -p tcp --dport 2345 -m recent --set --name heaven
 
$IPT -N door

$IPT -A door -m recent --rcheck --seconds 5 --name knock2 -j stage2

$IPT -A door -m recent --rcheck --seconds 5 --name knock -j stage1

$IPT -A door -p tcp --dport 1234 -m recent --set --name knock
 
$IPT -A INPUT -m --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 5 --name heaven -j ACCEPT

$IPT -A INPUT -p tcp --syn -j doo

◆fwknop是一個集合了端口碰撞和被動操作系統(tǒng)指紋的實現。

◆多端口碰撞僅適合Netfilter/Iptables。

19、使用日志分析器

使用logwatch或logcheck讀取你的日志,這些工具讓你更容易閱讀日志內容,它們可以遍歷給定時間范圍內的日志,并生成明了的報告,請確保sshd_config配置文件中將LogLevel設置為INFO或DEBUG了。

LogLevel INFO

20、給OpenSSH和操作系統(tǒng)及時打補丁

強烈建議大家使用yum,apt-get,freebsd-update和其它工具給系統(tǒng)打補丁,保持系統(tǒng)更新到最新狀態(tài)。

其它措施

如果想隱藏OpenSSH的版本,你需要修改它的源代碼,并重新編譯,然后修改sshd_config文件,確保有下列配置項:

#  開啟特權隔離

UsePrivilegeSeparation yes

# 防止使用不安全的home目錄和密鑰權限

StrictModes yes

# 開啟反向名稱檢查

VerifyReverseMapping yes

# 設置是否需要端口轉發(fā)

AllowTcpForwarding no

X11Forwarding no

#  指定是否允許密碼驗證,默認是yes

PasswordAuthentication no

最后警告大家,在重啟或重新載入修改之前,先使用下面的命令驗證一下sshd_config配置文件是否無誤:

# /usr/sbin/sshd -t

如果你有文中尚未提及的技巧或軟件,歡迎在評論中反饋,也歡迎你對本文涉及到的技巧和軟件發(fā)表你的看法。

【51CTO.COM 獨家翻譯,轉載請注明出處及作者!】

【編輯推薦】

  1. 編譯安裝openssh,使用RSA登陸
  2. 在windows下使用OpenSSH
責任編輯:許鳳麗 來源: 51CTO.com
相關推薦

2010-03-12 10:48:03

2018-02-28 17:27:28

2011-02-21 10:31:24

2022-09-26 23:13:52

服務器數據安全

2011-08-30 11:19:25

遠程服務器數據中心遷移服務器管理工具

2011-06-02 10:25:10

Web服務器部署

2021-05-19 14:14:29

服務器安全數據

2012-05-14 11:52:45

服務器角色

2011-07-26 10:27:07

分析器操作系統(tǒng)服務器

2020-09-17 07:00:00

DevOps無服務器技術運維

2012-02-07 09:17:13

2024-08-21 08:02:47

2023-03-16 08:01:56

TypeScript開源編程語言

2018-02-07 10:45:19

2022-11-02 12:17:41

2014-06-24 10:41:46

2009-09-17 18:02:06

2023-11-06 08:55:31

2024-06-03 08:37:26

2009-02-01 15:16:28

點贊
收藏

51CTO技術棧公眾號