tid=25799&vi /etc/ssh/sshd_config
; q& B7 w( r6 p6 |
8 \% n& Y8 u% G, W% P0 j }; ^( h* y1.修改預設 port (可用多行開啟多個 port)9 }, Q5 u/ b, r l8 b3 ]
Port <port>. d% x; s v+ f$ ?# D
S* }4 Z$ O* w2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)" b) t4 A, F/ d) F7 n' c; T5 @
ListenAddress 192.168.1.10# J) m9 J' t3 y- Y+ p. _ Q+ |
% x9 K5 P$ c- X/ @% P$ a' [& z6 Y3.禁止 root 登入
% s5 d4 J/ b2 C& m1 U5 P9 IPermitRootLogin no. \& b% m4 C3 H7 q: d r0 D* V" h
管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。# n9 z# P! y G$ [
3 c( {$ M; b! _3 }+ N
4.禁止使用空密碼登入6 E0 d a4 {1 u7 B7 w7 g Y5 A
PermitEmptyPasswords no
) h- Q! |. Z P9 A* ~8 a: D; D/ I+ Z
$ F, p7 t7 v- K" P3 ^9 m5.僅允許或拒絕特定帳號或群組登入5 f. x, e5 P' W
AllowUsers <user1> <user2> <user3>
# T9 z- \, P+ s) Y$ l XAllowGroups <group> ~! x! c8 L: e# n/ x6 Q
DenyUsers *1 g4 W$ L" f, |9 j" ?$ _
DenyGroups no-ssh) S# b9 c& m# A, o/ e. O8 m
根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。+ e& M' v( I9 H/ r6 X
2 b! U$ ?) _ a! h
6.廢除密碼登錄,強迫使用 RSA/DSA 驗證! `! ~9 O( J7 a( j* L
RSAAuthentication yes0 b% t- b3 F4 I F+ w f6 d+ R
PubkeyAuthentication yes, S3 e* w i8 K' `" ~; P/ o( M$ a
AuthorizedKeysFile %h/.ssh/authorized_keys) c& }' V8 ?1 f2 ^
PasswordAuthentication no4 i% A) i- D- S! R( ~7 [% [* }
並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。
" A( e# e# _2 O; o2 g" T2 s
! n3 q3 L3 ^9 @) P7.僅允許 SSHv2* _/ x! a# [/ o* K5 J
Protocol 2
$ S. e( [6 Q6 l) {3 @4 z4 T% ~* ~9 f [+ I) P4 D
8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例
. C+ `. ^) Z; m& kMatch User somebody,handsomebody7 w3 Q1 a# ~" }& V% }- {
PasswordAuthentication no使用 TCP wrappers 限制來源 IP
( [8 o( C z) b- Z/ @/ Q# vim /etc/hosts.deny2 P5 C* d* t' O
sshd: ALL8 l# p: m ]2 @* Y' f
# vim /etc/hosts.allow
Q$ r6 I" a+ \& g) Qsshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線
& B- g" B9 [6 ?3 ^$ e4 @7 M$ I6 @ O0 j4 X8 k) n# B6 F: c" t$ W
9.使用 iptables 限制來源 IP
( R( b9 z& c+ v" j4 d# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT
" b; t" O. q& I# iptables -A INPUT -p tcp --dport 22 -j DROP& q: g, t% a R9 p2 ~
設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。' c: @* n+ G: S8 t8 n/ p8 N$ ~
! K4 @. y$ t# `: M& ^. ^
10.時間鎖定
" \9 Q q q. s( Z/ j/ |3 Z" d你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。- m7 d6 {2 v- [! P3 M
第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸5 }) O1 f0 i& C4 C/ t
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT, [' S5 K1 q' C# m
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP
8 W- W/ O) Y$ M第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸
2 r1 m t8 j' k& W% s7 F # 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
4 n9 C9 [. R, n9 `* x$ G* M+ w # iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP
7 J& {& V" O- j2 L: a W( a5 E$ { i" X
11.檢查相關檔案權限,不安全則不允許登入0 e& V# {7 E4 q, }) J
StrictModes yes n/ D/ z" L6 `# o
某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。
; P: \) t( `5 Z" @8 ^/ D1 }5 [/ c0 N9 {/ b% ?8 \
12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a)
1 ?$ M% O/ c# \Banner /etc/ssh/banner # 任意文字檔
1 M r9 o% p) s" W
7 z* {, b1 P4 ~6 i13.限制 su/sudo 名單
7 q1 P, c! S# v5 W# vi /etc/pam.d/su
7 q/ `* W: G& F3 D% W, ^ auth required /lib/security/$ISA/pam_wheel.so use_uid
# M1 \# O, F O& {# P! h& r# visudo
. b, K$ N2 F$ @" @ S4 [; a" k %wheel ALL = (ALL) ALL' k* S0 q; j1 T* \# ?% E" g
# gpasswd -a user1 wheel4 F! S# F& j! r P
* a! X. q5 a2 @ y3 M% ^" ]0 o: Y7 V& P
14.限制 ssh 使用者名單
9 S- }' E1 g. g6 }5 `# vi /etc/pam.d/sshd
" L" v# N8 Y* B4 i auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail9 t2 H% I# H4 E- x0 E" M/ ?
# echo <username> >> /etc/ssh_users8 M0 ^/ f7 R$ j$ S+ Y8 y
15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線
6 u* k; E0 H) k5 Z3 J 修改/etc/ssh/sshd_config
0 J8 J. w+ d m! j#TCPKeepAlive yes/ y& n+ l! c& Z/ |( b: f
#ClientAliveInterval 0
6 |0 Q4 _2 v |; c#ClientAliveCountMax 3$ U! ?. h) k8 }
將#拿掉==>存檔
6 a; B# `% \: T- g f* k; k#service ssd restart ==>重啟sshd# p$ T. f$ Z0 K( k" @5 p
接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:: [1 |! d# j- L) P( z7 J0 k
選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。
' e+ N2 G, i6 j* {% I1 y: z' v1 S/ ?: ^: G) z; ?6 e! Q1 s
|