tid=25799&vi /etc/ssh/sshd_config $ M8 H& N2 A* l% {/ t
8 {! S6 I4 ` M& V0 t4 |0 U1.修改預設 port (可用多行開啟多個 port), e8 V/ p- x `' s5 A; f
Port <port>
8 b: `5 d. H$ q8 p/ E" ~. ?% M. d) K9 t2 A8 u
2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)% A3 ~! Z g7 C
ListenAddress 192.168.1.10
8 q3 _$ U- ?, |# n7 _; {' M9 q+ [1 T
3.禁止 root 登入- G& _7 ]; U& u4 k% M4 I" S" Y
PermitRootLogin no, s* J6 Q3 x" }- O# L3 U' G
管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。3 U7 k& Z" Q# n% i j. y& X6 @
( k% a, [. Z, [4.禁止使用空密碼登入# U1 v8 Z5 T \+ |
PermitEmptyPasswords no2 y; z2 R5 B c& j6 J
9 j. }' {" r, ]8 `. [. E
5.僅允許或拒絕特定帳號或群組登入
$ ~5 X" |( v; |+ x" G/ RAllowUsers <user1> <user2> <user3>
7 Y+ u9 x; _" _: G& uAllowGroups <group>$ c m6 b; b" x! E5 ~2 R4 t- f
DenyUsers *; d! J$ R, a0 {5 x+ l, k
DenyGroups no-ssh
. U1 \5 c+ s* |& N根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。% n6 l1 Q- ]& K: G. Q- ~2 P2 h* r
" J1 `4 ^1 L( E/ I
6.廢除密碼登錄,強迫使用 RSA/DSA 驗證
9 G. U8 ]! x# k! K6 rRSAAuthentication yes
4 @9 h7 P% q" V" @6 kPubkeyAuthentication yes X. N/ G3 R6 g2 `' T! U6 H
AuthorizedKeysFile %h/.ssh/authorized_keys+ s& h3 l% f* w; k9 m- H
PasswordAuthentication no
8 |- r |* z: v+ h並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。
5 H% ~" K, K- R( S
$ E* J7 m. V* n) X) V4 `5 [7.僅允許 SSHv2
E0 c. B- E' X% m" v! kProtocol 2
+ ?+ F, j- v' Q) C+ w& D' }4 ]- Q. v4 i- u; |
8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例
' }% f% P& W8 [6 f- u; U' [Match User somebody,handsomebody, x& E0 I, [: ~9 q+ f7 Q- t
PasswordAuthentication no使用 TCP wrappers 限制來源 IP
1 O3 `/ ?3 E9 j9 m) \$ W; T# vim /etc/hosts.deny+ a( d7 l. T a4 B
sshd: ALL3 C: q- z0 [5 @& c
# vim /etc/hosts.allow4 g' B# ?" Z( L9 f
sshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線
?. }% c; M& L+ D5 [/ D9 s, B
# N) U4 X$ d9 ?( ~8 R9.使用 iptables 限制來源 IP- m3 T8 t' ~6 g! K7 F% {6 f. X" g; I
# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT( Q% X1 w, Y1 m4 M0 P C, R
# iptables -A INPUT -p tcp --dport 22 -j DROP |4 T% W* W3 r4 ?
設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。! W3 M& o$ k0 s7 a/ J
$ ]( b/ f4 \3 x6 N6 G3 b( P10.時間鎖定2 X3 l" J/ c- [5 D! L: e0 }8 r
你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。
8 Q; ^9 G0 |0 R: V第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸
% G N* h4 r1 W: f # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
; [# T7 u$ J' r1 K # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP
' i& X* }% I9 h, ?0 M第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸
( O% ?5 I w; F3 G # iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT1 ^5 Q5 ]1 t6 \" J, l
# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP- s2 {5 Z0 g+ [8 ~1 v( D8 S
" Z' O! r" J2 ?8 n- L11.檢查相關檔案權限,不安全則不允許登入
0 W" Z" g! b* hStrictModes yes) I8 H) U* H* o/ i1 B, L1 m: }
某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。. c( U1 ^9 `* E2 O
3 u8 ~' }8 i8 C) f1 |
12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a)
0 p% v; H3 S8 i& x- x9 zBanner /etc/ssh/banner # 任意文字檔% P! H$ z. k2 }4 ]$ N2 J$ y0 E% @6 `
- w% f, a. n$ d, t: b% D! c13.限制 su/sudo 名單
6 H! e7 C: p# g! c7 A9 a1 N# vi /etc/pam.d/su
+ `- @( o# [: P' s auth required /lib/security/$ISA/pam_wheel.so use_uid3 |- V; t3 M. c( p
# visudo" n- F% m ?- ~/ y n6 \$ o* \6 O
%wheel ALL = (ALL) ALL0 C7 | j( C4 h" n/ j$ V/ p7 D8 _
# gpasswd -a user1 wheel
9 b& D6 a% t( n
; ^+ q, ~' s' k4 t& c' m8 M14.限制 ssh 使用者名單% _) B0 x- [; r0 V( m8 t# R
# vi /etc/pam.d/sshd
* r% `/ o! E3 d# K% G& T0 l auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail! Q5 l3 W/ b4 f2 G* q, L
# echo <username> >> /etc/ssh_users
, k- ~# f$ c$ c+ P8 p15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線/ I( T. t, E) j4 }: a2 V- M
修改/etc/ssh/sshd_config& X0 o0 y- l2 f
#TCPKeepAlive yes
) H3 r" e8 V" I! c#ClientAliveInterval 0
4 ?9 h2 K, r9 w#ClientAliveCountMax 3
* K U$ V, i2 C4 z( q 將#拿掉==>存檔" F) @4 C$ q, @
#service ssd restart ==>重啟sshd$ `& Q! z& y2 t, J
接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:6 a8 x' r2 D1 b& I0 ]0 {
選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。
2 c+ u/ f8 G+ m: E% D' u
( D1 d1 B/ T9 n& P* `6 E6 D, g |