Thông thường chúng ta vẫn sử dụng giao thức SSH để kết nối giữa client và server. Để thực hiện được việc này chúng ta cần mở một port trên server để cho phép kết nối này. Như vậy hacker có thể sử dụng các kỹ thuật để biết port này và sử dụng các phương pháp tấn công để SSH vào server. Trong bài viết này tôi sẽ giới thiệu một kỹ thuật được sử dụng để ẩn port có tên là port knock
.
Cách thức hoạt động của port knock
Port knocking hoạt động bằng cách xem log lưu lượng các gói tin vào ra trên filewall hoặc lưu lượng gói tin trên một interface. Dựa vào đây chúng ta sẽ cấu hình chuỗi các sự kiện theo quy tắc. Nếu chuối sự kiện này đúng thì sẽ thực hiện thay đổi rule của firewall.
Ví dụ cấu hình port knock cho port 22. Mặc định firewall sẽ không mở port 22 để cho phép kết nối SSH. Khi cấu hình port knock ta để sự kiện là khi nhận được lần lượt 3 gói tin SYN gửi đến các port 7000, 8000 và 9000 thì firewall sẽ được thay đổi để mở port 22. Và khi nhận lần lượt 3 gói tin SYN đến các port 9000, 8000, 7000 thì firewall sẽ xóa rule cho phép SSH.
Cài đặt
Cài đặt iptables
Port knock hoạt động dựa trên iptables nên ta cần cài iptables trên server.
Trên Ubuntu sử dụng ufw làm firewall nên để cài iptables ta cần disable ufw trước
ufw disable
Cài đặt iptables
apt-get install iptables iptables-persistent
Cho phép giữ các phiên đang kết nối để việc thực hiện không bị gián đoạn (trong trường hợp bạn đang SSH vào server)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Đổi policy mặc định của iptables thành DROP
iptables --policy INPUT DROP
Lưu lại cấu hình
netfilter-persistent save
netfilter-persistent reload
Cài đặt knockd
Install knockd
apt-get install knockd -y
Enable knockd để start knockd mỗi lần reboot.
vi /etc/default/knockd
Trong file này ta sửa lại 2 dòng
START_KNOCKD=1
KNOCKD_OPTS="-i ens3"
Trong đó ens3
là tên của interface lắng nghe kết nối trên server
Tiếp tục sửa file /etc/knockd.conf
vi /etc/knockd.conf
Sửa file này lại như sau
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 15
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 15
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
Trong đó:
- logfile: là file log của dịch vụ knockd
- sequence: Thứ tự các port nhận kết nối trước khi mở port SSH
- seq_timeout: thời gian đợi để nhận đủ các gói tin đến các port liệt kê ở sequence
- command: command sẽ được thực hiện khi nhận đủ gói tin đến các port liệt kê ở sequence trước khoảng thời gian seq_timeout
- tcpflags: cờ của mỗi gói tin gửi đến các port trên
Như vậy khi client gửi liên tiếp 3 gói tin với cờ SYN được bật đến các port 7000, 8000 và 9000 của server thì câu lệnh mở port SSH sẽ được thực hiện. Và khi ta thực hiện liên gửi 3 gói tin SYN đến lần lượt 3 port 9000, 8000, 7000 thì port SSH này sẽ được đóng lại.
Test lại
Để đảm bảo rằng cấu hình đã thành công chúng ta thực hiện kiểm tra lại
SSH đến server
ssh root@10.10.1.10
ssh: connect to host 10.10.1.10 port 22: Connection refused
Không thể SSH đến server
Sử dụng nmap để kiểm tra xem port SSH có mở
nmap 10.10.1.10
Starting Nmap 7.60 ( https://nmap.org ) at 2019-10-11 16:21 +07
Nmap scan report for 10.10.1.10
Host is up (0.00011s latency).
All 1000 scanned ports on 10.10.1.10 are filtered
MAC Address: 52:54:00:AB:22:F8 (QEMU virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 11.38 seconds
Ta không thấy port SSH đâu
Thực hiện telnet lần lượt đến 3 port 7000, 8000 và 9000
telnet 10.10.1.10 7000
telnet 10.10.1.10 8000
telnet 10.10.1.10 9000
Sử dụng nmap để kiểm tra lại
nmap 10.10.1.10
Starting Nmap 7.60 ( https://nmap.org ) at 2019-10-11 16:22 +07
Nmap scan report for 10.10.1.10
Host is up (0.00040s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
22/tcp open ssh
MAC Address: 52:54:00:AB:22:F8 (QEMU virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 18.30 seconds
Ta thấy port SSH lúc này đã là open
SSH lại vào server
ssh root@10.10.1.10
root@10.10.1.10's password:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-142-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
131 packages can be updated.
84 updates are security updates.
New release '18.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Tue Oct 8 00:13:34 2019 from 10.10.1.1
root@ubuntu:~#
Tôi đã thực hiện login thành công.
Đến đây việc cấu hình đã thành công. Hy vọng đây sẽ là kỹ thuật nhỏ giúp server của bạn an toàn hơn.
Leave a Reply