tid=25799&vi /etc/ssh/sshd_config 8 {4 I! r, B9 E7 V0 S
( \: `# [1 z& V+ M1.修改預設 port (可用多行開啟多個 port)/ _: H. S9 N; { J
Port <port># H! s. `% k/ _% K& I
/ o" T' r0 \- J( v, o+ U# D4 E# |2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)
( U e7 |, L, d' Q% q0 l1 ?) ?- z8 OListenAddress 192.168.1.10
0 \8 D" h8 o+ u+ E0 P- W* l' s5 J+ ?* T% D/ A
3.禁止 root 登入6 w9 I* d; C$ E& d2 p# `2 V4 a
PermitRootLogin no
( s3 s7 M9 `! P8 a. c管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。
) [* j! n6 A4 V" b, p- b- t( j
0 E+ s" D8 h2 U, v! k4.禁止使用空密碼登入5 W8 r' a4 p2 X
PermitEmptyPasswords no
; O9 h9 h$ r+ O9 F9 a0 |4 q5 w, i
5.僅允許或拒絕特定帳號或群組登入
& g( Y6 [ w8 ZAllowUsers <user1> <user2> <user3>, G+ Y& m$ l9 s
AllowGroups <group># b3 L S" @7 P: a5 G
DenyUsers *
. m; ^- U5 r- {: u5 JDenyGroups no-ssh
S0 U- Y/ w& s- P根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。
/ u0 u$ \6 k1 b8 E: ]9 N: c5 M6 Y% |# m$ [
6.廢除密碼登錄,強迫使用 RSA/DSA 驗證0 I& s2 E1 U3 r% ]4 K' N: n: K
RSAAuthentication yes8 V, w) L" ~$ d# Y2 q. K
PubkeyAuthentication yes$ ?$ @: j2 N4 z9 k5 q
AuthorizedKeysFile %h/.ssh/authorized_keys- U- N" }8 x/ b) Z8 C* F
PasswordAuthentication no
8 m. v. Z' V( S! c# T0 F8 B# I並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。
4 w- F* C6 \3 U, O% d' \; M6 f" v- H
% l6 K) T+ Z: R0 r7.僅允許 SSHv2# K0 v( H" M* e
Protocol 2
7 G% O8 U; y) |% v5 [1 V. \/ T7 |: Z4 S4 Z
8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例
& F8 v- |2 d5 C2 x, ?; tMatch User somebody,handsomebody
3 x9 N3 Y! Q# T! W. \PasswordAuthentication no使用 TCP wrappers 限制來源 IP
" n* j* z9 w5 `4 ^7 \+ f# vim /etc/hosts.deny
3 j( H& Z: Y& w' psshd: ALL
! j O c7 m* K% e. O$ c6 x# vim /etc/hosts.allow
: \" R x& d+ Y0 Asshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線
% l* X0 t! S$ [+ M5 p* Y0 `0 v0 O/ R& k, K8 n
9.使用 iptables 限制來源 IP
4 O5 ^+ ~$ d; p' a( K. `/ [4 c" p# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT
& ], G6 \/ s3 e2 H3 E$ Q+ C2 L# iptables -A INPUT -p tcp --dport 22 -j DROP$ O" D) l7 h; u1 g5 E1 a
設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。
& o0 B4 j k6 k \8 Q0 o) Z9 G+ G7 H1 r: ]0 i, ^/ U8 v& t
10.時間鎖定7 O( s' S) N6 B) c. V" ^
你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。
. X2 J. ?! x! t第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸/ s" l; W/ t/ J0 X* [8 N% R5 T6 t
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT* u4 y( o3 E6 ?
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP- p# p# ~: E* w, O3 J1 y' ~- h2 i
第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸
1 i9 N* G! ?5 A # 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 ACCEPT( z# x* _# Q, b
# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP
! v& X! y- M9 O3 b p3 C" ~0 O# t
: l: ]. B0 j( _11.檢查相關檔案權限,不安全則不允許登入, g4 B3 k7 w& r, `& w
StrictModes yes
) ^( L0 i) s6 m, I某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。
) c$ z4 a5 ?- W9 k9 h# o4 `; c* t' ?, A
12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a)! O9 V. G. {- p
Banner /etc/ssh/banner # 任意文字檔
9 f u# E1 [& }# k; N
7 E) z( k! F: ]% n5 h; M13.限制 su/sudo 名單
' K' {4 @$ ^" g# vi /etc/pam.d/su0 ]; r3 j" ?' K; D( P/ j- C0 `
auth required /lib/security/$ISA/pam_wheel.so use_uid
0 j2 ]. X: u2 P2 g8 f8 G# visudo
- ?. `; V' R! w% X" F %wheel ALL = (ALL) ALL
: F/ y, A" m- I) T2 t# gpasswd -a user1 wheel
' S. g; C: w0 A z# T; L
2 a8 {' I' }$ n* R# C3 E+ w* [14.限制 ssh 使用者名單. c' ]& U# Y! {" R3 J
# vi /etc/pam.d/sshd
1 u4 J6 ] n! x5 p( f, Q8 | auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail
- x2 E, l3 H8 H# echo <username> >> /etc/ssh_users
) e. c! l- e0 I+ `, D15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線
6 r+ V, w9 b5 Y7 T 修改/etc/ssh/sshd_config; V: u; l% o5 l3 `5 z- j
#TCPKeepAlive yes) p) r- r3 s) ?6 T6 \
#ClientAliveInterval 0
- T- F" h7 J1 v5 |" [- I#ClientAliveCountMax 3
' n5 |3 T |4 A2 }$ K 將#拿掉==>存檔
, _ `' g9 X% N#service ssd restart ==>重啟sshd8 i6 n5 n7 G+ O+ w7 ?
接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:4 N e2 D$ W L! `
選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。0 C7 M( O3 ~% O X+ C
9 ~" @; R0 Z4 g" e; s/ k
|