vi /etc/ssh/sshd_config
: v4 `4 Y3 {: l8 W# f; B* T9 m# f1 X* R5 x6 v6 H$ ]6 P L! \
1.修改預設 port (可用多行開啟多個 port)4 ?* S k. @1 a% }' ]; m
Port <port>
9 l- Y# w; f6 q( @; \) y- n! Y* @( Y* ^, D5 _
2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)+ C7 }% r y: c! u6 B4 j# `
ListenAddress 192.168.1.10( ]2 K! O2 j* H
. o7 y, K" @2 l- S% F3.禁止 root 登入
7 t! z1 ^# G5 R; a( CPermitRootLogin no2 v" {3 R5 ?. o% V4 A5 M) @
管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。1 f# j7 S- ^& q% d! }0 E3 N
" f2 L4 s% a& g6 a- X5 W* v, W
4.禁止使用空密碼登入
& v% r* t# T; V2 x' p3 ?6 |8 \" sPermitEmptyPasswords no0 c4 b& h) M( I, C S1 M' R# L
5 U; W9 r; j! s; P+ B9 J6 h
5.僅允許或拒絕特定帳號或群組登入& C: A; S5 Q% y) E$ I" }# A
AllowUsers <user1> <user2> <user3>
6 Y" H# y |2 u( `# L) wAllowGroups <group>
- U- S! r4 `/ J/ Y* t/ E# XDenyUsers *# _" c& Q! g! _7 q3 i& |
DenyGroups no-ssh" d5 l- d; ~) r$ }0 S3 G6 P4 r$ z
根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。0 b# O& k0 D. X* |0 i: t
. ^; N5 E' i* C4 l% Q: }) @6.廢除密碼登錄,強迫使用 RSA/DSA 驗證* G$ ^" R$ y1 W$ `+ B0 c! {
RSAAuthentication yes7 @; L" X& V) d+ e3 c2 I
PubkeyAuthentication yes" c7 q L4 u" E, M' R7 |
AuthorizedKeysFile %h/.ssh/authorized_keys; ?5 I! B( u8 ^
PasswordAuthentication no
; m' I: D! E& b/ x並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。) k6 q& S' n# o* i! w
. s4 c* W- B: C7 g7.僅允許 SSHv2
% Y3 g5 k0 j$ pProtocol 2
* b G+ M# P3 o2 B. T# {* ^5 R# N) u S+ z3 ^+ U) V1 s% i$ M8 d
8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例
# C$ r; M7 h9 C9 o# zMatch User somebody,handsomebody D8 f$ r j2 f$ h3 J' c6 g; j2 H
PasswordAuthentication no使用 TCP wrappers 限制來源 IP- t& t5 o# C# B; F3 ]
# vim /etc/hosts.deny# h2 q' w4 E6 v0 I P: }7 I6 g
sshd: ALL
! `3 m" u! K) z" _% _0 K# vim /etc/hosts.allow; h1 Q5 c2 @5 S/ C( r
sshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線
1 U" d; ^' [3 ?( p" U3 `! q; F. s5 \
9.使用 iptables 限制來源 IP4 K% P E9 o8 p2 M/ ^
# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT
* {. B# X+ V, _4 P# iptables -A INPUT -p tcp --dport 22 -j DROP
7 K+ A3 V+ V: X9 Y* L! z9 |/ X設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。
+ F4 f- [8 c7 @+ A' S5 t6 o1 f! E- _3 [% }4 P
10.時間鎖定
& n m2 s. G' _5 D( ^" y你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。7 [; ^" h% _! i3 G
第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸
" k- n: q6 S' g+ U+ B # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
0 A+ b8 o2 k" Z5 @8 } # iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP8 m! m# h' p7 F, O, o7 P# p$ c
第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸7 H8 U' Y: W3 D" U9 Z
# 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% W& d- L/ t+ D4 {0 U, J. V
# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP
/ {" S" r/ m7 ^
$ f) g4 Y1 z+ a7 j11.檢查相關檔案權限,不安全則不允許登入
% C! V* u( z9 E S% C# i( FStrictModes yes
9 s7 Z2 r+ N/ X2 ?3 i某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。
6 L8 z" z5 Y: ~( w& ~# q$ h$ x7 }) U, g: }; w9 X) P Z' ?9 w' o6 K1 I
12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a)
; z) Q4 n; `+ P9 _Banner /etc/ssh/banner # 任意文字檔
: v5 u% |) H! i+ m: [6 g( e' c. a* e6 t2 I! s& C
13.限制 su/sudo 名單1 i* W( ^/ I( T7 w
# vi /etc/pam.d/su
" E" d, b' e! W: T auth required /lib/security/$ISA/pam_wheel.so use_uid
' V* A6 B& f- t. K' k# @# visudo1 U) o; D6 E5 q9 I
%wheel ALL = (ALL) ALL
" ~& ^- q d, d" s# gpasswd -a user1 wheel
& n$ h& H% l, b1 n! ]3 G$ i9 E/ L: J- x5 B( p ~& J$ M
14.限制 ssh 使用者名單; w! v; O5 k$ t2 P9 a6 O
# vi /etc/pam.d/sshd
* E! p' h& _; v) w7 W auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail0 D7 ~. T5 u( g/ h9 a
# echo <username> >> /etc/ssh_users
. U4 g2 R/ E5 f15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線: j. l/ H ~: |) U
修改/etc/ssh/sshd_config1 a' l1 H# o2 L& Y
#TCPKeepAlive yes
# [" C2 [, X0 \$ D1 X1 n- w#ClientAliveInterval 0" z' w" B' Q0 s" I* X
#ClientAliveCountMax 3
& j2 L3 [- }) N" m0 R2 b 將#拿掉==>存檔
. U- t$ p& ]/ x/ k( Q6 b' d#service ssd restart ==>重啟sshd3 n$ q6 q3 W o1 d- `1 l/ x
接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:
6 @7 J( j" ~7 M6 @# P 選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。0 q( Z: H/ r- _' J% K% {% h
k! C" n" H. q! P |
|