tid=25799&vi /etc/ssh/sshd_config : G+ M6 o. Z+ M$ X z
P* V% m5 L' @. J% e/ `1.修改預設 port (可用多行開啟多個 port)& r7 o+ r8 A& z, V5 ~6 Q. S' ]$ |
Port <port>
, e: }9 {$ C i! Y
4 V. X. }$ P `9 N2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)
6 o+ \ X0 D" }3 R# W% Q% SListenAddress 192.168.1.107 S7 e; b, M, Q+ P
& ]& \- c% \: X
3.禁止 root 登入
" t; k; f0 \2 `4 u$ E' j: d. GPermitRootLogin no U; X8 s7 b6 O' o9 _
管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。- g4 u$ O3 I D$ v l) C* m
% J$ l+ k+ E4 Z5 ]$ T4.禁止使用空密碼登入
# e8 ~: {2 ?5 ~PermitEmptyPasswords no
4 b# n* ]* A& X: X6 W+ Z' B( j0 t) M/ O
5.僅允許或拒絕特定帳號或群組登入3 b; t, e. O0 K& E# g- ]
AllowUsers <user1> <user2> <user3>% b/ M$ ], S3 M( c
AllowGroups <group>
% l6 K o5 A3 t- Q8 }' c; Z; t% PDenyUsers *
: k O g y- z4 u6 qDenyGroups no-ssh
0 W* c2 w: ]7 a根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。
( ^% j6 a. D1 b1 v" r2 m! t; Q% ?. [1 |
6.廢除密碼登錄,強迫使用 RSA/DSA 驗證5 \9 v1 u4 U. ~& y5 q" S
RSAAuthentication yes
% A, \8 r) n$ M5 c8 g( h+ [7 c8 rPubkeyAuthentication yes: x' G" w5 ^6 Q, Z! j; J
AuthorizedKeysFile %h/.ssh/authorized_keys/ G' P: C0 r' b( H" \1 ^
PasswordAuthentication no
$ w- m$ N" e, E* C6 u( r3 }並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。. N# Q, f4 f; j
! b0 Y3 s8 e" ` }5 Q7.僅允許 SSHv2
) P. J! _3 e# V. C* R: E- L' Z( yProtocol 2& u- I+ m2 ~9 `. d- \/ x
% k% p( t; N& |; V" F+ ]9 M8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例
) a( v3 u2 E1 W, ~7 a- V2 tMatch User somebody,handsomebody
, a# C2 a) D5 R0 Y+ `0 ^PasswordAuthentication no使用 TCP wrappers 限制來源 IP: y! m; |/ Q: m$ X( Y6 I" I
# vim /etc/hosts.deny
# e0 D9 c r( J3 Z! @sshd: ALL
4 V( y2 k4 d: N# n0 f D- H/ N# vim /etc/hosts.allow! t0 I+ }3 Y1 c( j' C# T
sshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線, ]0 N% ^8 Y8 x! l
7 n- B3 E, Z: c- b, F# S) t2 C2 k
9.使用 iptables 限制來源 IP
! @7 o3 H5 S1 O# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT L' h% U' g8 @
# iptables -A INPUT -p tcp --dport 22 -j DROP
- c; F8 d+ d) c6 S設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。0 S- r: V* p$ V8 @/ c
. t! P2 ]% g3 ^3 r
10.時間鎖定) O t1 b/ X( r$ f% w# o2 D4 g
你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。
6 R+ c$ e, {# ^/ }( F& l第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸
f" Y% C& B% ?. e+ D2 ^ # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
* |# \+ E- ~5 _1 ]# J: K% ^! q2 [3 L # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP
* r% c. O7 Z# e, k9 V% J! A& f第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸
- |- U: e* X- C# y3 t # 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
$ I" s9 x: g- K6 S: J+ k3 I7 ] # iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP/ w8 p4 Y' }/ T6 f$ r6 C. }1 d
4 \9 ^3 [. P/ X/ d( ]11.檢查相關檔案權限,不安全則不允許登入
3 |- A0 h- X, Y$ IStrictModes yes3 \1 ]& g7 F/ i, m, [7 d
某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。
2 p+ Q5 P; i6 W, ^! K( j) |1 |8 n; ]2 a; k- q; U" p5 H* E! F
12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a)
( {9 X* g7 n; Y( G( \* ABanner /etc/ssh/banner # 任意文字檔
/ |0 V, x# w. E, _, S7 I
' G2 F1 ?% P$ z; J6 ^13.限制 su/sudo 名單
5 ]7 J* J. U9 D* }- M7 B9 k# vi /etc/pam.d/su: t/ S2 [' t1 I9 _* H1 O" n& i
auth required /lib/security/$ISA/pam_wheel.so use_uid
* E$ o- v9 ~: M# Q5 O. i3 l# visudo
2 n, s% g4 ]; ]. G* \2 Y" W2 Q& l %wheel ALL = (ALL) ALL2 P2 V. U( x- T2 o/ L) N# @; i
# gpasswd -a user1 wheel, i' `! i3 S" S \& N+ P6 c
3 U% k! z2 D4 r( m14.限制 ssh 使用者名單; N! f8 k+ N9 a$ z
# vi /etc/pam.d/sshd9 T; H9 Z9 _7 }6 f
auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail
: _# i6 z# M ~: o% i1 ~5 Q# echo <username> >> /etc/ssh_users
) N+ ~% _, D. D% E0 T15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線+ f* P, G: Y* V
修改/etc/ssh/sshd_config
1 c7 Z1 N3 ~6 T4 W1 r& N) O#TCPKeepAlive yes
0 w5 g5 W! u- [#ClientAliveInterval 0$ o" z( {# S6 I* X4 e( P, R
#ClientAliveCountMax 3& y j- U6 E s: J% a9 x
將#拿掉==>存檔1 q0 _$ u% X! Y1 n& J$ ]1 J4 h
#service ssd restart ==>重啟sshd
+ C5 [0 Y' u# P4 h 接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:) A; e. m/ G7 ~3 O) m3 o6 R" D% O
選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。1 B. l: F* g. T9 b. I
: c( j7 l# Z* ^$ e- |
|