tid=25799&vi /etc/ssh/sshd_config
" C# z- f& `& t# D3 H+ w7 [) f1 C# U7 K ?4 ?9 p" ?
1.修改預設 port (可用多行開啟多個 port)
3 |8 }0 m1 F) Z& z' t4 w( yPort <port>
/ N6 {& d- } }/ c+ X: J6 B- @( B* h+ R# G) L
2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)
* b( r4 h* W* N* \! vListenAddress 192.168.1.103 H0 O: k; T `% u: w, P9 g0 i
( S% J, O6 N3 X( Y3.禁止 root 登入
! x& z1 L* z" }PermitRootLogin no
% S3 Q) s m9 x管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。
* }# q; `% ^% T, d, x$ Y* d+ i' m: U" j
4.禁止使用空密碼登入
7 v* V7 _, x" W, y, ^! Z6 M' r3 P! XPermitEmptyPasswords no; E/ ?) C! P, {2 l2 X5 l7 K T
- D1 O4 F, w, H3 i5.僅允許或拒絕特定帳號或群組登入
. [. c7 a. n$ CAllowUsers <user1> <user2> <user3>
7 z6 b! p1 M' s4 SAllowGroups <group>; m& ]- A: ] _! E2 Y
DenyUsers *
9 D N' v! T: e# U: HDenyGroups no-ssh* ?' B! J9 y0 M3 L" p% `$ y+ S
根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。' d( H, t- x$ U! e+ f
2 m/ g8 }2 d& D, P6.廢除密碼登錄,強迫使用 RSA/DSA 驗證3 t6 U9 L$ Y* Y C
RSAAuthentication yes
: s1 W3 R; [& [( O3 I* _PubkeyAuthentication yes0 o' ~) t0 s S4 _
AuthorizedKeysFile %h/.ssh/authorized_keys7 @6 s$ c" h: y z( i
PasswordAuthentication no1 `' J9 X* s( W! G5 J1 J/ G1 a( n8 |
並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。0 {6 A3 K# z; b& P
: P" X) m, W, d- R3 X7 @! C7.僅允許 SSHv2
& n5 X8 O# J( YProtocol 2
! E& w1 ]* P6 m, F( ~9 J/ o6 D( y( b
8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例, h$ T6 O7 w) n: v3 Z% j- H9 l( @
Match User somebody,handsomebody- b% F1 M( o8 l' i; i! E! N( Q1 A
PasswordAuthentication no使用 TCP wrappers 限制來源 IP- J" {& T% u& f& {1 G
# vim /etc/hosts.deny% M) S0 O& k' y8 X+ H& h# ^3 V$ J: G2 t2 V
sshd: ALL
& N% [2 \1 l. j! Q. v/ u/ u# vim /etc/hosts.allow3 E2 c( {8 { @. x: S+ U q, J
sshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線8 S7 N; t5 ^( }4 I! a
; `/ `* [4 W# ]. l9.使用 iptables 限制來源 IP5 J* [$ o5 e, p" ^ Y. a5 Z
# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT k4 B) t0 E: g* h8 ?7 h$ E
# iptables -A INPUT -p tcp --dport 22 -j DROP
0 J0 g" K# X j& W設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。
/ S0 }" i, ^% O3 M
% S7 _' T& P6 `( Z' e10.時間鎖定
2 n+ Z, \) E7 J2 _7 `你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。
7 c8 G1 t0 q# M1 y第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸7 E1 ]; S. M1 }' R
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT" _5 Y6 p) r9 G5 u" q- Q
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP
0 D: \, s, N7 S% S1 C. z7 K第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸' P, L( z5 B* W4 m3 I( _
# 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
/ @ j1 U M: }4 o4 p3 s # iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP/ _ b7 j6 v1 P$ u4 O9 c" m
$ U8 v$ @7 s% D7 q11.檢查相關檔案權限,不安全則不允許登入
/ B& Y2 G0 v8 q3 X3 WStrictModes yes; x$ ~! J ]; G0 E( x1 K3 i6 `
某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。
8 H9 y. B9 |* v6 F( ?4 H5 Y! ^: t! @* U; a1 d5 |
12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a); Z" F: k1 E% {5 k3 j. E& J& B+ E* S/ y
Banner /etc/ssh/banner # 任意文字檔
! J9 r6 E. J" ^- e' {, f6 }7 z! t9 S# w8 u& C8 f
13.限制 su/sudo 名單+ C8 g4 q/ w/ _' k$ W4 {! v) A
# vi /etc/pam.d/su
$ T' Y4 g( Q4 D! q6 l2 f' ?5 g. O auth required /lib/security/$ISA/pam_wheel.so use_uid
0 h m7 W. v1 S* ~2 i" J) N' j/ R1 k# visudo
" C3 Z. W$ s9 t* {% d. O %wheel ALL = (ALL) ALL$ v% T# D3 Q4 R2 |$ O
# gpasswd -a user1 wheel
+ r0 e$ Q& G5 ?
: a% u- K; c( T6 i14.限制 ssh 使用者名單 B$ m( A9 e6 c4 a
# vi /etc/pam.d/sshd H! n& b% X. s3 _. T) z
auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail
; j/ ?( U: R- r2 \* f8 n: g# echo <username> >> /etc/ssh_users
3 r3 E9 [$ R( z. k2 Y4 B) t15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線) T$ a8 H9 F* R3 F* d& R
修改/etc/ssh/sshd_config
% s) `" c+ I' x#TCPKeepAlive yes
1 ^2 T+ o1 U8 d+ S H8 e) D" G#ClientAliveInterval 0
9 [6 f( }. l3 S& t9 `$ ?! _+ N#ClientAliveCountMax 3! a' n/ [8 f! B+ e& c
將#拿掉==>存檔
. f8 v, V- k$ f) R#service ssd restart ==>重啟sshd' ~" d$ S. F3 v4 \* r' a# i
接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:
0 M- V0 B- S. R3 Z( ]8 n 選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。
0 j# d" p' H* g6 v& ]# R+ M; Q0 @# j$ M( T1 S- @
|