vi /etc/ssh/sshd_config
& T4 D+ f4 T5 ~% _/ m, |9 g% ^1 B/ o9 ]
1.修改預設 port (可用多行開啟多個 port)
/ g H* r2 o3 E8 G9 [1 DPort <port>6 K! f* s! o% Z7 p3 u
9 Q1 y0 X, e# n4 F, ^
2.僅監聽特定 ip (適用於多網卡/多 IP 的情形)6 S0 t+ n' S1 w
ListenAddress 192.168.1.10
4 m& [* B4 ^9 \: h, r
1 B/ F# Z5 _# V5 x3.禁止 root 登入
" u8 q: s8 N. p9 o1 B: F! BPermitRootLogin no
) M6 _2 c; j0 J管理者必須先以個人帳號登入,再 su 成 root,或利用 sudo 工作。
, [# g' ?' I4 z5 |$ B D, S2 E$ u* N$ z5 L
4.禁止使用空密碼登入5 p; _9 V/ m' p; u
PermitEmptyPasswords no
3 E# F* L5 M1 b- U- ~) o
# n# A4 |( o1 K) e0 H1 A3 }5.僅允許或拒絕特定帳號或群組登入4 J) @# ~2 C) S$ ], Y
AllowUsers <user1> <user2> <user3>! S5 L. x6 P `
AllowGroups <group>8 [8 H2 |2 G+ f8 g L
DenyUsers *
1 w r8 |9 f) B, N+ ?) lDenyGroups no-ssh, _6 L% I x, T) C
根據實驗,對於同一帳號而言,如果同時 Allow 跟 Deny 的話,結果會是 Deny 的。
, K: v; Q. a; u. q" i! G+ @' ]1 r% v# Z, o2 q
6.廢除密碼登錄,強迫使用 RSA/DSA 驗證( S8 K0 T* |* Q- X) K
RSAAuthentication yes q6 U G1 X% }; T9 r* d- n
PubkeyAuthentication yes# z1 y) t5 E* ^- f! N: l; i
AuthorizedKeysFile %h/.ssh/authorized_keys1 R _* g4 A6 q
PasswordAuthentication no
* L- X3 Y, ?& `6 A9 {) J- W並確保 user 的 ~/.ssh 權限為 700,同時將該 user 的 public key 加入其 ~/.ssh/authorized_keys 中。Public key 的產生方式可搜尋 ssh-keygen。
9 b1 l$ e( S9 J4 p9 \( |6 C4 I X2 b, V9 L8 Z$ _
7.僅允許 SSHv2$ ^9 g" w0 y; m+ ^# \
Protocol 2- O% @- z' M6 c
" s* z9 \' a* O/ S$ \* C. H u
8.限制特定使用者、群組、主機或位址的登入行為,這裡以限制 somebody 與 handsomebody 不可使用密碼登入為例
3 M2 A; H; N7 [# Q. YMatch User somebody,handsomebody
# ^9 n# F" b. j4 F. [$ W. fPasswordAuthentication no使用 TCP wrappers 限制來源 IP9 q1 L. G$ m- p, H
# vim /etc/hosts.deny2 h; l. z* j% Y
sshd: ALL
3 H/ |+ {" T s$ K+ @; Q, ]! G# vim /etc/hosts.allow
2 I+ Y/ s8 P% g" K3 O n& p0 T$ psshd: 192.168.1 1.2.3.4 # 僅允許 192.168.1.* 與 1.2.3.4 連線
' W t6 x$ K) x* P- w; q$ l: f3 p, a1 l! F0 l+ B9 ^
9.使用 iptables 限制來源 IP
) V3 [% @: t. U# iptables -A INPUT -p tcp -m state --state NEW --source 1.2.3.4 --dport 22 -j ACCEPT+ f! P6 x( c, m" R$ K0 K
# iptables -A INPUT -p tcp --dport 22 -j DROP @" T" {, v! }8 ]; ?8 L6 b
設定會立即生效,若希望重開機後還能保存,需要手動儲存 iptables 的設定。
h: ? F0 b" a4 R, B4 K; G# F8 b& N; m" I- q- d! g( s, b6 x! l
10.時間鎖定
) d, q6 i2 i2 N! @& T你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用 /second、/minute、/hour 或 /day 開關。- f. y: c/ E, J4 m U$ o3 [
第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸- W2 v6 I/ N4 R- S9 [: \0 H
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT, t6 V# D' e2 r3 N8 M2 o% D
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP
4 `" l. B2 G& ?7 j! X6 g第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸/ g1 z6 X' c- Y! 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
$ l6 y5 e: L- c! w # iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP: }8 w8 J4 y+ j4 A1 R' ]. @7 ^
k ~: v! ]2 o7 L4 A
11.檢查相關檔案權限,不安全則不允許登入
5 C- o# m$ m# w5 [' QStrictModes yes, P5 Z: @2 r/ X: ?. C. f& x
某些相關檔案權限設定若有錯誤時,可能造成安全性風險。如使用者的 ~/.ssh/authorized_keys 權限若為 666,可能造成其他人可以盜用帳號。3 K- E2 H4 F5 M/ p9 j/ K" c1 B
1 |: R8 L( j3 R' Y T+ Q
12.自訂使用者登入時顯示的 banner (話說這跟安全性有什麼關係...? 大概可以用社交方式嚇跑壞人吧...= =a): a' _9 N: W) f" D7 j2 H- j/ O$ S
Banner /etc/ssh/banner # 任意文字檔) k: F! G- C. h: v- F" l0 L9 r4 j
( z7 i* O0 ?" a5 E8 j( j
13.限制 su/sudo 名單
; i7 V5 A% K4 K: I# vi /etc/pam.d/su
" w! a4 [3 ~+ A# ]% b) B auth required /lib/security/$ISA/pam_wheel.so use_uid
2 d0 o4 _ x6 ?9 m3 f8 J @' T# visudo
2 a0 G9 `0 i0 x$ D8 K0 S k9 U %wheel ALL = (ALL) ALL$ |% N8 w1 n: |2 ]: h
# gpasswd -a user1 wheel
' s4 w: e! v/ P( T. ^, F9 y. Z
* ~: X/ b+ H; ~; p$ N0 W' q* P14.限制 ssh 使用者名單/ N) N; v0 L0 y# p
# vi /etc/pam.d/sshd
7 p; ^5 {* Y) J) y4 m1 g- A% p) r auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail2 E0 l% p: c/ D7 o' w, A Z* p. g
# echo <username> >> /etc/ssh_users
/ U2 b. P! G3 h% `9 A! c# Q15.防止SSH連線逾時(timeout),讓PuTTY 與 SSH 一直保持連線) [6 Y; t7 r9 p2 N4 @; _
修改/etc/ssh/sshd_config' f- |% r& M7 p
#TCPKeepAlive yes; x) Q2 Z" Y* a2 d, }
#ClientAliveInterval 0& i8 W) g5 v2 k9 h
#ClientAliveCountMax 3
/ X- T' I" V% o- Q' h" u7 { 將#拿掉==>存檔$ w; q+ k# w6 n/ j7 b
#service ssd restart ==>重啟sshd9 G: p; v$ \7 L% q0 W5 }
接下來修改 Pietty 的參數,進入”PuTTY 連線設定”:
+ D: l( @9 i b. \1 H0 k 選擇「Connection」項目,將「Seconds between keepalives [0 to turn off]」右邊的欄位輸入每隔幾秒,傳送一個null封包以保持連線。3 {/ }& T2 T7 ~! ]7 F G$ o
/ ]$ Z2 G' O5 G4 _ X |
|