vi /etc/ssh/sshd_config
0 v, q6 G* G8 Z! F! }$ B+ t
/ t1 [+ L; f' J G% R* W1.修改預設 port (可用多行開啟多個 port)
8 j4 O! Z# {7 I: _+ D; TPort <port>
' a2 o7 e4 Q, c- C
9 K5 l" N' _% @* K2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)- p5 b' y; Y1 b: ^) r* {, N
ListenAddress 192.168.1.10
% M: I4 S4 A3 w9 T% \9 k+ f" G0 q7 R
3.禁止 root 登入8 @5 x9 B( }4 b3 d) O) l: I
PermitRootLogin no
$ \- g" s) a$ r* I8 N2 u: N管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。
% W" i2 _$ ~) Q0 F" j. J" D! E& A6 ~* e
4.禁止使用空密碼登入/ R I+ D9 F" o( P+ U* ~/ s* v `
PermitEmptyPasswords no
$ p. s m3 S1 o4 a0 v& z. K+ s3 D3 N" @6 k+ y/ `
5.僅允許或拒絕特定帳號或群組登入
$ D, x3 H" i$ @" {AllowUsers <user1> <user2> <user3>
! S) ?" t4 H: \! W5 pAllowGroups <group>& k K& D7 v/ [: N
DenyUsers *; C9 z, l# X- `9 s
DenyGroups no-ssh$ E# t F0 O' E' J, i7 h. e
根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。0 @/ g- ^8 S& Z! N3 |& A
4 H$ j( j S" k% N- ]% E' p/ r6.廢除密碼登錄,強迫使用 RSA/DSA 驗證) V) r6 k6 T" v
RSAAuthentication yes; \4 ?1 Q8 C7 {
PubkeyAuthentication yes P4 N. l- w0 p( ?/ l: y3 T; d% ]
AuthorizedKeysFile %h/.ssh/authorized_keys
0 n/ X2 R* n5 I& u2 u+ x) oPasswordAuthentication no8 j7 K; d! p7 g* F h+ h. h
並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。
. D% j* \+ T0 j4 T3 a7 H% F$ B# R! p" M& A; R: F: @! N
7.僅允許 SSHv2% E& b. F/ E( i4 e* C
Protocol 2
6 |# u' g( b9 L
5 I( Y) r( c. ^) }, w' B8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例3 M e$ `" T1 N) ]+ s4 V, [
Match User somebody,handsomebody
# d t7 J0 e: }$ j( Z; o# e- ~PasswordAuthentication no使用 TCP wrappers 限制來源 IP5 J" M! i' f- @6 q* ^
# vim /etc/hosts.deny% @ H0 D: B. [: t
sshd: ALL
f4 m2 q$ Z! p. _# vim /etc/hosts.allow
; ?) p& B9 |! Zsshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線1 n8 H& b' U2 O
. G3 a9 I' a5 O, U# d9.使用 iptables 限制來源 IP6 g# M' z% k' O( F7 w+ K9 L
# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT
3 A( P8 ~9 E& | m. X# iptables -A INPUT -p tcp --dport 22 -j DROP
# Q* L" h" f9 {8 m' r' u設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。- A7 V0 T. A4 e4 x1 [2 s, s9 x
/ g& W5 t @* l. \% h10.時間鎖定
$ R7 N( X' `4 M" o$ T你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。1 D ]! S, n: N9 `# z! j
第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸+ r) w7 ~% ^$ g# i) j6 i R5 i) @2 l
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
7 [; I) L# n" X6 Y& Q' {% @% u # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP7 s1 j% D' d& q4 [/ S8 t
第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸; y% Q# l0 s/ u/ k q6 y
# 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/ X7 Q# S# r* R # iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP" s' G# }0 d7 x8 V: l, b
+ ^: m/ Y: Q" L0 U% N* l. N8 F1 i& X* S
11.檢查相關檔案權限,不安全則不允許登入3 }% h* q. Z: d" s
StrictModes yes. a4 @4 q! h- N7 X6 m- `. w
某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。
& s7 Y3 Z( i+ k( b0 k4 }& O" N' u4 r7 `, q1 |: B
12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a)
* X @4 U1 i7 e ]Banner /etc/ssh/banner # 任意文字檔1 W& Q2 C5 T$ R& I; ^5 \
: p) }. k, S2 p7 P+ ?7 K
13.限制 su/sudo 名單
; f. i9 k1 c: o5 ~8 ^# vi /etc/pam.d/su7 F y+ I/ y4 u$ Q
auth required /lib/security/$ISA/pam_wheel.so use_uid
5 U9 ?6 F9 A# K9 L5 c2 W6 ~ U' B# visudo
& x& ]% S5 t8 }1 I; f. ` %wheel ALL = (ALL) ALL
0 Z8 Y2 l, }' t1 Y0 T# C# gpasswd -a user1 wheel8 z3 i/ {& M; q1 W5 C! O/ Y
! u, n7 W9 s# L8 ~3 v w, F% M* a
14.限制 ssh 使用者名單" Z; C' ~. V. [: k# n8 u, ^: _' q
# vi /etc/pam.d/sshd
* q) i/ L' K4 a* H# P6 ^$ ` auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail3 y W) Z$ T% n: w: x, w5 ?$ L
# echo <username> >> /etc/ssh_users
; x" u, J# U* M! y' L6 t7 F15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線/ u C! b' m3 t& ^* r# q0 w
修改/etc/ssh/sshd_config
' o& X! a% Q: B# u# W#TCPKeepAlive yes j) y" ~2 {5 U7 u
#ClientAliveInterval 0
2 b: P) F* Z; A6 E; i#ClientAliveCountMax 3
5 r2 [- \/ S1 r: v 將#拿掉==>存檔. Y! k" u- K4 R$ l. q1 y
#service ssd restart ==>重啟sshd* v: u$ l4 j* q* X' \5 J T& X/ m
接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:9 x2 U7 o" b2 n) m: O& c8 ~
選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。5 n4 W! c- c# O& S* `' ?
+ Z8 u" f% ^9 _5 c7 Z
|
|