tid=25799&vi /etc/ssh/sshd_config
9 Z! o2 M( M2 F7 [. D! q; Z/ ]# _" W" P- p
1.修改預設 port (可用多行開啟多個 port)2 @- y, i% V, K4 C v4 c+ t
Port <port>! a. Y. j- d" P% S0 R& p: c
8 b1 p& y" ^$ e( g% G. y
2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)9 q8 n- x: c$ }; |5 A* B
ListenAddress 192.168.1.10
7 F. a9 G5 _5 X( W6 i
7 v# e) d* P$ q8 Z3.禁止 root 登入
/ w( ^9 e/ o/ W: ^+ H2 u, k; G7 ~1 rPermitRootLogin no
* `4 P7 w# n* v4 W* n. E2 _管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。
/ c3 k( | r' J5 G$ p M1 V& b9 X& u* U$ Z7 o
4.禁止使用空密碼登入
( U7 x8 N3 l, [% Y6 C2 q- kPermitEmptyPasswords no( ^: P+ G: O+ ^/ Y/ K0 {, D/ m6 w
, \; f0 o! ^0 g5.僅允許或拒絕特定帳號或群組登入6 A0 e2 B* K) V
AllowUsers <user1> <user2> <user3>
6 _8 t: q) z5 Y$ K9 PAllowGroups <group>
% \0 v) L- Y% B. ?6 `7 qDenyUsers *) }- U0 U2 U$ s' ^& W }
DenyGroups no-ssh
8 b; p8 J; H* @, a根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。
4 W) ^1 l2 F7 i$ R1 V s: y' L' f: c
( s; k% U% ^ S% ~+ Q- q' J6.廢除密碼登錄,強迫使用 RSA/DSA 驗證7 b3 N: O* [' B1 m( P- Y
RSAAuthentication yes9 F1 [3 A- a m$ y/ \5 m% I) K
PubkeyAuthentication yes: l- U0 ]5 Y+ x; q- W1 b+ u* A* u
AuthorizedKeysFile %h/.ssh/authorized_keys p) j! h" A% V+ o' [
PasswordAuthentication no
$ N5 d6 c$ z( ?9 K& z3 s% I並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。
0 k& y3 Y: G7 i. e; h5 }9 I3 f/ g1 I% t* l: b
7.僅允許 SSHv2) P) ~3 G' i1 \. a
Protocol 2
% Z- y' Z# Y. q& ]' v" n+ n; _: X1 m9 ]$ n% Y7 Y1 p' |& @/ ?. Z
8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例0 |6 P9 k5 v) |# r- r) z
Match User somebody,handsomebody, d D5 z$ R6 K: }4 c
PasswordAuthentication no使用 TCP wrappers 限制來源 IP
$ ], J! k7 ?4 t9 Y4 ?& T# vim /etc/hosts.deny6 U3 Q- }: ~+ `& x) |& N
sshd: ALL1 L! B* S1 G7 Q& d: g; G
# vim /etc/hosts.allow
! o& V) [ I* T# i' v$ Q- rsshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線3 T1 B8 F+ E# M9 O
, K1 D# K% m: B. U0 o/ ]# M; |* X9.使用 iptables 限制來源 IP
& o: M* F& S9 b0 O# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT
/ `3 _& A7 j9 {5 o" L T5 v3 |6 F# iptables -A INPUT -p tcp --dport 22 -j DROP1 K8 z$ ^2 F7 s4 g
設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。$ b. V* O" |8 H! _' X
1 _) c& W9 F8 W. H3 V9 j4 W" t10.時間鎖定4 f/ l- U# D6 c: y/ S/ ]
你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。
! `8 i; d& r# \. e& e2 R# K9 y第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸1 b& j% B) c( d+ ~& C
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
* r& O, T7 B5 M% d2 X # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP- g! ]$ v7 d5 E% y
第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸
q J6 _. Z# A1 A6 @ # 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- q& v4 v; M. b8 w6 d* e. Y+ M
# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP/ I% W `2 q9 J7 u, h
( }. l; y% v3 u: X4 f7 ^8 L& j; m11.檢查相關檔案權限,不安全則不允許登入$ f3 q! B' N- t: k, K
StrictModes yes- G$ h, g3 [' B1 i
某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。
8 {3 T/ j! g" v$ ]
- R" l8 T5 b6 |6 d7 n' i2 k) o12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a)# d7 e3 z% L4 n W# t
Banner /etc/ssh/banner # 任意文字檔
, P! k3 Z V3 Y$ r7 j
/ B: A3 Q% d2 ~6 q$ G* f13.限制 su/sudo 名單" T" ]) t! ~1 R, G$ r$ P4 m
# vi /etc/pam.d/su
1 _ j$ ]% F( r auth required /lib/security/$ISA/pam_wheel.so use_uid) I' Y. }* K( E4 I9 X
# visudo
/ z, A% }6 M3 v) @0 X( D* l %wheel ALL = (ALL) ALL6 d' O* m+ t; D8 I8 N+ t* R
# gpasswd -a user1 wheel6 ^ r9 ?) H' V# v" {
* _, C3 _+ N: h) A
14.限制 ssh 使用者名單) |2 P+ n+ ^& i# o# Y6 R2 r
# vi /etc/pam.d/sshd
! r0 X/ H' R: @2 G, H* P( _ auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail
" j o$ P3 E# b1 J# echo <username> >> /etc/ssh_users+ ?4 k. R# i5 k; Q
15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線
( ^; ?9 ^; N5 l 修改/etc/ssh/sshd_config
' ~% s( D" r% E; L0 {#TCPKeepAlive yes
$ v* ?* X, K. H1 y7 B$ r/ Q9 G#ClientAliveInterval 0* p( J; D: `5 _* O
#ClientAliveCountMax 3+ t5 I+ l' H7 H! J# i
將#拿掉==>存檔
* P6 u7 w. p$ M% L2 W#service ssd restart ==>重啟sshd
5 C6 J3 Q; Y5 G% c8 N" ~5 j 接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:; t; ?0 k" j6 |4 O0 U- c+ T2 W
選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。& w0 W7 }2 q d" @$ N0 v. z# N
9 [% B- ~) |4 G1 D& Z' ?
|