vi /etc/ssh/sshd_config
' h6 t3 j2 ~+ R4 o& o; h7 H2 e o {: Y; ~ Z7 ^+ X; \+ D
1.修改預設 port (可用多行開啟多個 port)
' G" Z* m! w$ E' b6 O# APort <port>
H) X/ t, _2 l$ p! `* M6 E* H' [5 C8 l9 j3 B
2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)
6 K+ O% R2 J3 v0 D TListenAddress 192.168.1.10: O8 I, \0 H0 h$ m' e, o( L
8 J) Y1 F; X1 P* D: `
3.禁止 root 登入
4 z) v7 G1 {' ?7 KPermitRootLogin no
0 o8 t! t, g7 A; S管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。
0 W. L6 i! x/ A
5 ~3 F: `8 H; C& B' y3 i- [7 O) p) M4.禁止使用空密碼登入
0 d" f! w* h, _& J3 D9 l0 b4 EPermitEmptyPasswords no6 k* b3 x6 K0 O. T& h2 E: u
) y6 j% J; |& p! U% i) a1 a- A
5.僅允許或拒絕特定帳號或群組登入 |8 I+ n5 E V T
AllowUsers <user1> <user2> <user3>. A+ G* D$ Z4 W3 \! O
AllowGroups <group>
4 A ` T$ y8 d+ N7 r M' jDenyUsers *
7 Z+ ]8 ~' }1 J" sDenyGroups no-ssh
! T1 g% Y1 m3 x6 D: m J根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。( t1 S9 s$ [7 c/ y
1 X$ Y6 P8 F5 R( i- ?7 e6.廢除密碼登錄,強迫使用 RSA/DSA 驗證: u+ ?' P& k4 h1 I1 L d3 C
RSAAuthentication yes
$ R7 u1 I, T, I7 EPubkeyAuthentication yes6 }& n' y6 V9 Q5 Y
AuthorizedKeysFile %h/.ssh/authorized_keys
; g! j2 I( Q$ _PasswordAuthentication no
- a+ N+ s" q& `. X7 E- u0 I# n* h並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。
2 Q. [# D. t2 Y
; h7 `) Q6 g. u/ \0 N: f- b7.僅允許 SSHv27 ^3 ]7 j! L4 n& W1 x/ T; J
Protocol 2
0 _* V* d- N4 L; N/ d# ?. o' E u% j4 \, j6 I7 ~* B2 @8 O' Q
8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例
N( ~+ y2 e9 k0 C" ^- `Match User somebody,handsomebody% G! B6 x; s' U' ]$ |, h7 v
PasswordAuthentication no使用 TCP wrappers 限制來源 IP
1 m' U# ^% l* n$ Q5 i# R# vim /etc/hosts.deny. g7 I2 z. t4 ]0 s* G
sshd: ALL' A5 i' v3 |; s4 Y* d) w5 x
# vim /etc/hosts.allow
4 @! r5 s" W5 |2 s/ ~sshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線8 A" f8 P9 D) m5 n# ~+ f# G1 @
) c! X. W d- O2 U
9.使用 iptables 限制來源 IP5 I* k$ a4 b% q( q
# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT
; u R& z% ^7 d/ ^" h# iptables -A INPUT -p tcp --dport 22 -j DROP; _* O$ O" h; ^$ l
設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。
7 n: S7 s% j1 q x
+ }5 P2 M! y/ T, K$ E K3 ]8 y1 R10.時間鎖定3 U8 A, D6 S1 ^4 r2 {9 Z( T
你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。
* _+ Q$ A& q0 C/ \: J5 g第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸. l* G$ H, C& Y5 @1 P0 t4 l% d" p
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
0 l( k7 R8 c. o& p3 a$ X1 R J$ x # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP; k# C0 @; d( f0 E3 ^7 d
第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸; N7 n0 y9 E. [2 L6 H
# 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
7 X. m( O: {# b. l9 ?, ^ # iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP
1 i! ?$ e# L) \4 t
5 Y) [1 E- X5 g, ^1 \. }11.檢查相關檔案權限,不安全則不允許登入6 V3 N; y/ M: d: s( w. F
StrictModes yes" p4 m& L. R8 @, X1 j* Y/ J
某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。
7 w; x* `. @6 O; _
* |( U6 `! Q% i% Q, p12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a)5 ^+ f$ c+ I4 Y5 ]) z
Banner /etc/ssh/banner # 任意文字檔
+ g* W# o: F1 V. }% x6 V& Y6 t: _5 q8 M/ M6 f* o8 k) `$ z. t. c
13.限制 su/sudo 名單$ D1 M4 E/ u. z O: E
# vi /etc/pam.d/su
4 H2 S0 Y9 z; q( v! Q; N$ x auth required /lib/security/$ISA/pam_wheel.so use_uid9 Q0 m% x/ @6 |: h \* l
# visudo+ B4 m2 n6 n { S S/ n" m% f
%wheel ALL = (ALL) ALL+ i4 D# L0 a7 y
# gpasswd -a user1 wheel7 Q4 F" u& k$ T% T/ R& ?9 x
- V4 g! m, Y) f3 v; I* n14.限制 ssh 使用者名單
- `- r. {* \2 P' [" j6 G# vi /etc/pam.d/sshd
0 i6 z$ B3 U: K3 F3 ~/ c- ^ auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail
: ]& p+ l7 Z0 c# \# echo <username> >> /etc/ssh_users' G/ K# t% }# L. F5 z
15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線; v) f& ^! t7 q% ?; F% H$ Y4 Q! V
修改/etc/ssh/sshd_config) b+ {! \9 E+ x& w$ r' s. @# e( z* u
#TCPKeepAlive yes6 F# N9 q5 o; v5 a1 z
#ClientAliveInterval 0
- ]( j* m) P) K: t! k#ClientAliveCountMax 3
. Y$ P$ [) E/ I 將#拿掉==>存檔
# o# ]" w: P1 E& n#service ssd restart ==>重啟sshd% V+ T/ M& q" n! Q
接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:) u2 d$ r4 ]; f( K S1 F
選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。8 p* Y" {; B! P/ K& N$ d& ]* }
& c/ Q }' x9 T, K3 ~4 q9 t7 f
|
|