tid=25799&vi /etc/ssh/sshd_config 1 z' y4 H5 T# i, ~% }2 r' T3 x! x/ E3 G
% W& k" d8 z9 W# l) x$ z
1.修改預設 port (可用多行開啟多個 port); J) j2 G7 u4 O, V
Port <port>
9 q1 v* E% ?' \# R8 S6 @2 U/ Q) U6 P0 C) E7 r
2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)* f: s; m* ^4 ]
ListenAddress 192.168.1.10
, o/ q+ o/ @7 S: R/ m
) u) ^( [, t4 ]3.禁止 root 登入) } X/ x0 P! q4 L; L8 i+ U
PermitRootLogin no- C( u. \) i, O) ^7 _
管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。( }1 m$ E# Y+ T
^# `2 g1 ^4 [8 W3 \+ f7 z# K
4.禁止使用空密碼登入
4 ^2 m* b& k) i4 P! c' vPermitEmptyPasswords no( Z/ m0 N2 p' g: O7 N
! W# H2 f0 E% h1 J, M
5.僅允許或拒絕特定帳號或群組登入
* L8 _* Y! e5 O m2 y: fAllowUsers <user1> <user2> <user3>
7 F/ g( N# m1 o& YAllowGroups <group>9 Y# ?& L- C: k) G3 ?. n, c9 k+ r
DenyUsers *- r* Z$ M7 E3 r6 J* P
DenyGroups no-ssh
. Y, l# @( p2 _根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。% l! m1 M/ c* L+ D0 W7 W% T2 B9 s
E8 f5 L' r8 u( E z7 X: r6.廢除密碼登錄,強迫使用 RSA/DSA 驗證. ?% l0 Z; o' l& R2 J
RSAAuthentication yes$ W7 `% o" n$ l3 T
PubkeyAuthentication yes
# q1 x6 y2 u u" x# `AuthorizedKeysFile %h/.ssh/authorized_keys" }6 M' P7 |* Q8 l; t" P, Y' t& H% T, T
PasswordAuthentication no6 v6 c. ]3 m! u8 L& I$ O; E9 ]
並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。
6 i4 l N, K9 @
; ^) m( G% @: p+ f7.僅允許 SSHv2
! z! Y# v+ @" [4 B! `" ^) F7 wProtocol 2
; W( B3 E8 R! c) A( \4 z& O* t* l2 c& }
8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例8 j) r0 ]( R+ Q4 T% d% H
Match User somebody,handsomebody6 b7 c' e5 f# K
PasswordAuthentication no使用 TCP wrappers 限制來源 IP
& n' G: ~4 p, w, w) K/ |" r# vim /etc/hosts.deny
: v! S, @9 j& y$ q, Fsshd: ALL" n, X+ W* s+ J2 C8 _) D6 R; j
# vim /etc/hosts.allow& K! F8 u9 q: A. l2 C0 f. i
sshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線
, ], ~" t7 p6 S: R. k( {. Q: F8 P. T& ^2 M& a5 F
9.使用 iptables 限制來源 IP
4 g" [2 ^7 E ^# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT0 W4 c# R, x* ^
# iptables -A INPUT -p tcp --dport 22 -j DROP
. |, W! M+ n) f! o+ l設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。# b$ z5 C& P" D0 ], E
3 Y3 _" r( d: A( r+ [
10.時間鎖定% ]* @. ]$ t& s8 Z b, z' \, Q
你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。
% C; |2 x+ z$ _2 U2 o9 E8 U$ X第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸, ? j: m; } A) e" W2 o6 O' D
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
% s: c/ u( w3 N" K1 G6 a8 r' O # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP. d3 a0 z' ]$ t3 f
第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸! y2 P* q, i+ q2 D
# 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
' h3 M( m: @% I% x # iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP: |( D& p3 I% K
1 t: F0 L' W+ G( x+ a4 J+ R* ?! C
11.檢查相關檔案權限,不安全則不允許登入
& ^% F) ^6 ?7 D F4 IStrictModes yes
' G6 A4 U" t. L0 a2 b某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。
4 _8 X3 v4 Y& U G& g- A5 {! _, d! P( p$ F( s, o( L; n' }
12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a)7 k J2 t- X3 ~: |2 V9 q8 [9 g
Banner /etc/ssh/banner # 任意文字檔" ?- x* a# M8 p( r5 r P
- K, T) o1 ^0 i& x
13.限制 su/sudo 名單
$ f$ h2 O& {7 B/ @* d* F# vi /etc/pam.d/su
( v2 ^% l* ]: K auth required /lib/security/$ISA/pam_wheel.so use_uid
" H; A1 i; P& r/ q L( U% G# visudo
5 {! L+ B4 T" ]3 C) I %wheel ALL = (ALL) ALL
4 @3 {* D. I2 x. O) y. R5 Q# gpasswd -a user1 wheel
" g# W/ H' P1 r
- m: Z; Z! v8 C6 T14.限制 ssh 使用者名單% r% K9 o. P( N3 Q1 w+ `
# vi /etc/pam.d/sshd) r3 {' O# \5 R* P' i" A7 M; O
auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail
$ O2 U. Y B2 j0 L# echo <username> >> /etc/ssh_users
* u) {3 V1 A8 i" g15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線
/ D: O6 F( u: q' m% A 修改/etc/ssh/sshd_config ]. A& p. E. @3 d+ N- }, g& f+ b: f9 f
#TCPKeepAlive yes8 l( X! G$ w) i9 m5 X
#ClientAliveInterval 0# }" C2 V# K% b9 N) `& ?4 c1 z
#ClientAliveCountMax 3
2 G( x* j1 x. N 將#拿掉==>存檔
/ v5 @7 ~8 I- S+ L" ^#service ssd restart ==>重啟sshd& V* j/ L, O6 X; R' v- w# ~) i
接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:, M' p; X: N5 y2 L* l
選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。( T1 Y, ~0 n6 i& f% P8 j
/ P- ]( z0 K/ v; n |