Mo và th thut bo mt SSH nâng cao
Ngu
n:quantrimang.com
Trong bài này, chúng tôi gii thiu mt s th thut đơn gin giúp bn
nâng cao tính năng bo mt cho dch v Secure Shell (SSH).
File cu hình server SSH được đặt trong thư mc /etc/ssh/sshd_conf. Bn cn
khi động li dch v SSH sau mi ln thay đổi để các thay đổi đó được thc thi.
Thay đổi cng SSH
Mc định, SSH tuân theo các kết ni đến trên cng 22. K tn công thường s
dng phn mm quét cng xem liu các host (máy trm) có s dng dch v
SSH không. Thay đổi cng SSH lên cao hơn 1024 là mt la chn khôn ngoan,
vì hu hết mi chương trình quét cng (gm c nmap) mc định đều rà soát
được các cng cao.
M file /etc/ssh/sshd_config và tìm dòng có ghi:
Port 22
Thay đổi s cng và khi động li dch v SSH:
/etc/init.d/ssh restart
Ch cho phép s dng giao thc SSH 2
Có hai loi giao thc SSH. Nếu ch dùng giao thc SSH 2 thì s an toàn hơn
nhiu vì SSH 1 thường gp phi vn đề bo mt vi kiu tn công man-in-the-
middle và insertion. M file /etc/ssh/sshd_config và tìm dòng sau:
Protocol 2,1
Thay đổi dòng thành protocol 2.
Ch cho phép mt s đối tượng người dùng đăng nhp qua SSH
Bn không nên cho phép người dùng root đăng nhp qua SSH, vì điu này gây
nên mi đe do bo mt ln mà không cn thiết. Nếu mt k tn công nào đó
thu được đặc quyn root khi đăng nhp vào máy, kh năng phá hoi có th gp
my ln người dùng thông thường. Bn nên cu hình server SSH không cho
phép người dùng root đăng nhp. Đầu tiên, tìm dòng ghi:
PermitRootLogin yes
Thay đổi yes thành no và khi động li dch v. Sau đó bn có th đăng nhp li
h thng vi bt k vai trò người dùng xác định nào đó và chuyn sang người
dùng root nếu mun tr thành siêu người dùng.
S khôn ngoan hơn khi to mt user cc b gi hoàn toàn không có đặc quyn
gì trên h thng và dùng tên user đó để đăng nhp SSH. S dng cách thc này
s giúp máy tính không b hi dù tài khon người dùng có b xâm phm. Khi to
người dùng này, hãy chc chn nó phi nm trong nhóm wheel để bn có th
chuyn sang nhóm superuser (siêu người dùng) nếu cn.
Nếu mun to danh sách mt s đối tượng người dùng được phép đăng nhp
vào SSH, bn có th mô t chúng trong file sshd_config. Ví d, nếu mun cho
phép người dùng anze, dasa, kimy đăng nhp qua SSH, cui file sshd_config,
thêm vào mt dòng như sau:
AllowUsers anze dasa kimy
To banner SSH tu biến
Nếu mun mi mt người dùng kết ni ti dch v SSH để xem mt thư nào đó,
bn có th to banner SSH tu biến. Thc hin đơn gin bng cách to mt file
text (trong ví d là file etc/ssh-banner.txt) và đặt bt k kiu thư text nào bn có
vào trong đó. Ví d:
***********************************************************
******
*This is a private SSH service. You are not supposed to be
here.*
*Please leave immediately. *
***********************************************************
******
Khi mun chnh sa hoc ghi file, trong sshd_conf, tìm dòng ghi:
#Banner /etc/issue.net
Không cn bình lun v dòng trên mà hãy thay đổi đường dn ti file text banner
SSH tu biến ca bn.
S dng cơ chế thm định khoá công cng DSA
Thay vì s dng tên và mt khu khi đăng nhp vào SSH, bn có th dùng cơ
chế thm định khoá công cng DSA. Chú ý rng bn có th s dng username,
password và khoá DSA cùng mt lúc. S dng cơ chế thm định khoá công
cng DSA cho phép h thng ngăn chn được kiu tn công theo sách v, vì
bn có th đăng nhp vào dch v SSH mà không cn dùng đến tên và mt
khu. Thay vào đó, bn cn mt cp khoá DSA: mt khoá chung (public) và mt
khoá riêng (private). Khoá riêng được gi trên máy ca bn, còn khoá chung
được đưa lên server. Khi mun đăng nhp vào mt phiên SSH, server s kim
tra khoá. Nếu tt c thông s đều khp, bn được đưa vào h thng. Nếu khoá
không khp, kết ni b ngt.
ví d dưới đây, máy riêng s kết ni ti máy ch được đặt tên là station1
máy chserver1. Trên c hai máy đều có cùng mt thư mc ch (home
folder). Chú ý là kết ni s không hot động nếu thư mc ch trên client và
server khác nhau. Đầu tiên, to mt cp khoá trên máy riêng vi lnh ~$ ssh-
keygen -t dsa. Bn s được nhc cm mt khu cho khoá riêng, nhưng hãy
để trng, chúng ta chưa quan tâm đến phương thc này vi. Mt cp khoá được
to: khoá riêng nm trong ~/.ssh/id_dsa và khoá chung được đặt ti
.ssh/id_dsa.pub.
Tiếp theo, copy ni dung ~/.ssh/id_dsa.pub to server1 vào file
~/.ssh/authorized_keys. Ni dung trong ~/.ssh/id_dsa.pub có dng:
~$ cat .ssh/id_dsa.pub
ssh-dss
AAAAB3NzaC1kc3MAAACBAM7K7vkK5C90RsvOhiHDUROvYbNgr7YEqtrdfFC
UVwMWcJYDusNG
AIC0oZkBWLnmDu+y6ZOjNPOTtPnpEX0kRoH79maX8NZbBD4aUV91lbG7z60
4ZTdrLZVSFhCI/Fm4yROH
Ge0FO7FV4lGCUIlqa55+QP9Vvco7qyBdIpDuNV0LAAAAFQC/9ILjqII7nM7
aKxIBPDrQwKNyPQAAAIEA
q+OJC8+OYIOeXcW8qcB6LDIBXJV0UT0rrUtFVo1BN39cAWz5puFe7eplmr6
t7Ljl7JdkfEA5De0k3WDs
9/rD1tJ6UfqSRc2qPzbn0p0j89LPIjdMMSISQqaKO4m2fO2VJcgCWvsghIo
D0AMRC7ngIe6btaNIhBbq
ri10RGL5gh4AAACAJj1/rV7iktOYuVyqV3BAz3JHoaf+H/dUDtX+wuTuJpl
+tfDf61rbWOqrARuHFRF0
Tu/Rx4oOZzadLQovafqrDnU/No0Zge+WVXdd4ol1YmUlRkqp8vc20ws5mLV
P34fST1amc0YNeBp28EQi
0xPEFUD0IXzZtXtHVLziA1/NuzY= anze@station1.example.com
Nếu file ~/.ssh/authorized_keys đã tn ti, gn thêm ni dung trong
~/.ssh/id_dsa.pub vào file ~/.ssh/authorized_keys trên server1. Bn ch cn thc
hin mt vic là thiết lp chính xác đặc quyn trong file ~/.ssh/authorized_keys
trên server1:
~$ chmod 600 ~/.ssh/authorized_keys
Bây gi cu hình file sshd_conf để s dng cơ chế thm định khoá DSA. Hãy
chc chn rng bn có ba dòng không chú thích sau:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Khi động li dch v. Nếu mi th đã được cu hình chính xác, bn đã có th
s dng SSH cho server và đặt trc tiếp nó vào thư mc ch mà không cn bt
k tương tác nào khác.
Nếu mun ch s dng duy nht mt cơ chế thm định DSA, không cn chú
thích hay thay đổi dòng PasswordAuthentication trong file sshd_config t yes
thành no:
PasswordAuthentication no
Nếu ai đó c gng kết ni ti dch v SSH mà không có khoá chung trên server,
anh ta s b t chi và thm chí không được đưa nn đăng nhp ra vi thông
báo li:
Permission denied (publickey).
S dng các hàm bao TCP để cho phép ch mt s host được kết ni
Phương thc trên s rt hu ích nu bn mun gii hn s host trên mng có
th kết ni ti dch v SSH. Nhưng nó không th s dng hoc kết hp được vi
cu hình các bng IP (iptable). Thay vào đó, bn có th dùng các hàm bao TCP,
c th là sshd TCP. Bn có th đưa ra quy tc ch cho phép mt s host nht
định trên mng con cc b (local subnet) 192.168.1.0/24 và host t xa
193.180.177.13 kết ni ti dch v SSH.
Các hàm bao TCP mc định đầu tiên s xem trong file /etc/hosts.deny danh sách
các host b t chi kết ni ti dch v. Tiếp theo là file /etc/hosts để xem liu có
quy tc nào cho phép mt s host kết ni ti mt dch v đặc bit nào đó không.
Ví d, tôi s to mt quy tc như vy trong tư mc /etc/hosts.deny:
sshd: ALL
Quy tc trên có nghĩa là, mc định tt c các host đều b cm truy cp dch v
SSH. Điu này là cn thiết, vì nếu không tt c các host đây đều có quyn truy
cp dch v SSH. Do hàm bao TCP đầu tiên s xem xét trong file hosts.deny,
nếu không có quy tc nào liên quan đến ngăn chn s dng dch v SSH, bt k
host nào cũng có th đến nôi đến nó. Tiếp theo, to mt quy tc trong /etc/hosts
để cho phép ch mt s host c th (như được định nghĩa trên) s dng dch
v SSH:
sshd: 192.168.1 193.180.177.13
Bây gi, ch có các host trên mng 192.168.1.0/24 và host 193.180.177.13 mi
có quyn truy cp dch v SSH. Tt c host khác đều b ngt kết ni trước khi
được đăng nhp và nhn mt thông báo li như sau:
ssh_exchange_identification: Connection closed by remote
host
S dng iptables để gii hn s lượng host đưc kết ni
Mt la chn khác ngoài các hàm bao TCP là gii hn truy cp SSH vi iptables
(các bng địa ch IP). Song, bn có th s dng kết hp c hai phương thc này
cùng mt lúc. Dưới đây là mt ví d đơn gin v cách cho phép mt s host nht
định kết ni ti SSH:
~# iptables -A INPUT -p tcp -m state --state NEW --source
193.180.177.13 --dport 22 -j ACCEPT
để chc chn rng không có host nào khác được truy cp dch v SSH:
~# iptables -A INPUT -p tcp --dport 22 -j DROP
Ghi li mt s quy tc mi và hoàn chnh công vic.
Mt s mo thi gian SSH
Bn có th dùng các tham s iptables khác để gii hn kết ni ti dch v SSH
trong mt khong thi gian nht định. Kiu thi gian có th là giây, phút, gi,
hoc ngày (/second, /minute, /hour, /day ), như ví d dưới đây.
ví d đầu, nếu người dùng nhp mt khu sai, truy cp vào dch v SSH s b
khoá trong mt phút. Và sau đó người dùng ch được phép gõ thông tin đăng