Cách sử dụng Port Knocking trên Ubuntu để ẩn cổng SSH

theanh

Administrator
Nhân viên
Tất cả các bạn đều biết những bộ phim xã hội đen cũ, trong đó một gã sử dụng trình tự gõ cửa để vào? Port knocking chính xác là như vậy, chỉ dành cho máy chủ của bạn. Thay đổi cổng ssh mặc định của bạn không đảm bảo rằng bạn sẽ không bị hack. Tin tặc thường sử dụng các công cụ để tự động quét các cổng mở trước khi chúng tấn công máy chủ. Port Knocking là một cách mà bạn có thể tự bảo vệ mình khỏi các trình quét cổng., nó từ chối truy cập vào một cổng được bảo vệ cho đến khi máy khách truy cập vào một trình tự các cổng khác theo đúng thứ tự ngay từ đầu.

Cài đặt port knocking trên Ubuntu rất dễ dàng. Tôi sẽ chỉ cho bạn trong bài viết này cách cài đặt và thiết lập port knocking. Các bước trong hướng dẫn này cũng có thể áp dụng cho Debian 8.


Bước 1: Đảm bảo rằng tất cả các gói bắt buộc đã được cài đặt​

Tất cả các lệnh bên dưới phải được chạy dưới dạng người dùng root. Tôi không muốn thêm sudo vào tất cả các lệnh, vì vậy tôi sử dụng:
Mã:
sudo su
để trở thành người dùng root. Bước đầu tiên là cập nhật danh sách gói Ubuntu:
Mã:
apt-get update
Sau đó cài đặt máy chủ SSH (nếu bạn chưa cài đặt).
Mã:
apt-get install openssh-server
Bây giờ hãy cài đặt phần mềm knockd, đây là chương trình nền kiểm soát việc gõ cổng.
Mã:
apt-get install knockd
Mã:
Lấy:1 http://security.debian.org wheezy/updates Release.gpg [1.554 B]
Lấy:2 http://security.debian.org wheezy/updates Release [102 kB]
Lấy:3 http://security.debian.org wheezy/updates/main amd64 Packages [336 kB]
Nhấn http://mirrors.digitalocean.com wheezy Release.gpg
Nhấn http://mirrors.digitalocean.com wheezy Phát hành
Lấy:4 http://security.debian.org wheezy/updates/main Translation-en [195 kB]
Nhấn http://mirrors.digitalocean.com wheezy/main Gói amd64
Nhấn http://mirrors.digitalocean.com wheezy/main Translation-en
Đã tải xuống 635 kB trong 1 giây (358 kB/giây)
Đang đọc danh sách gói... Xong
root@howtoforge:~#
root@howtoforge:~# apt-get install openssh-server
Đang đọc danh sách gói... Xong
Đang xây dựng cây phụ thuộc
Đang đọc thông tin trạng thái... Xong
Các gói bổ sung sau sẽ được cài đặt:
 openssh-client
Các gói được đề xuất:
 ssh-askpass libpam-ssh keychain monkeysphere rssh molly-guard ufw
Các gói sau sẽ được nâng cấp:
 openssh-client openssh-server
2 đã nâng cấp, 0 mới cài đặt, 0 cần xóa và 32 không nâng cấp.
Cần lấy 1.364 kB tệp lưu trữ.
Sau thao tác này, 0 B dung lượng đĩa bổ sung sẽ được sử dụng.
Bạn có muốn tiếp tục [Y/n] không?
Nhấn Y rồi enter để tiếp tục.



Sau khi cài đặt gói, bạn phải cài đặt tường lửa hạt nhân iptables. Chạy:
Mã:
apt-get install iptables

Bước 2: Thêm quy tắc vào iptables​

Đầu tiên, chúng tôi xóa các quy tắc tường lửa hiện có và đảm bảo rằng các kết nối đi không bị hủy.
Mã:
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
iptables --policy OUTPUT ACCEPT
Chúng tôi muốn đảm bảo cho phép tất cả các kết nối đã thiết lập và các phiên đang diễn ra đi qua tường lửa, nếu không, tường lửa sẽ chặn phiên SSH hiện tại:
Mã:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Lưu ý: Quy tắc trên không có khoảng trắng ở cả hai bên của dấu phẩy trong STABLISHED,RELATED.

Sau đó sử dụng quy tắc sau để chặn cổng 22 (SSH) đến:
Mã:
iptables -A INPUT -p tcp --destination-port 22 -j DROP
Sau khi thiết lập quy tắc iptables, bạn có thể tự động hóa quy trình khôi phục khi khởi động lại bằng iptables-persistent. Chúng ta có thể tải xuống quy tắc này từ kho lưu trữ mặc định của Ubuntu:
Mã:
apt-get install iptables-persistent
Mã:
Các quy tắc iptables hiện tại có thể được lưu vào tệp cấu hình ?
 ? /etc/iptables/rules.v4. Sau đó, các quy tắc này sẽ được tự động tải ?
 ? trong quá trình khởi động hệ thống. ?
 ? ?
 ? Các quy tắc chỉ được lưu tự động trong quá trình cài đặt gói. Xem trang hướng dẫn ?
 ? của iptables-save(8) để biết hướng dẫn về cách giữ các quy tắc ?
 ? file up-to-date. ?
 ? ?
 ? Lưu các quy tắc IPv4 hiện tại?
Mã:
Các quy tắc iptables hiện tại có thể được lưu vào tệp cấu hình ?
 ? /etc/iptables/rules.v6. Sau đó, các quy tắc này sẽ được tự động tải ?
 ? trong quá trình khởi động hệ thống. ?
 ? ?
 ? Các quy tắc chỉ được lưu tự động trong quá trình cài đặt gói. Xem trang hướng dẫn ?
 ? của ip6tables-save(8) để biết hướng dẫn về cách giữ cho các quy tắc ?
 ? file up-to-date. ?
 ? ?
 ? Lưu các quy tắc IPv6 hiện tại?




Trong quá trình cài đặt, chương trình sẽ nhắc bạn lưu các quy tắc iptables hiện tại (ipV4 và ipV6), chỉ cần chọn Có cho cả hai.



Lưu bộ quy tắc hiện tại vào một tệp bằng lệnh iptables-save. Tệp này có thể được iptables-restore sử dụng sau đó để khôi phục lại cùng một thiết lập iptables:
Mã:
iptables-save
Mã:
# Được tạo bởi iptables-save v1.4.14 vào Thứ Ba, ngày 23 tháng 2 lúc 04:59:28 năm 2016
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17:1976]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
COMMIT
# Đã hoàn tất vào Thứ Ba, 23/02/2016 04:59:28
Bây giờ, bạn sẽ vẫn kết nối với kết nối hiện tại của mình trong khi chặn các kết nối khác trên cổng SSH.

Tiếp theo, chúng ta phải configureknockd.

Để cấu hình dịch vụ, chúng ta sẽ phải chỉnh sửa tệp cấu hình /etc/knockd.conf. Mở tệp bằng nano:
Mã:
nano /etc/knockd.conf


Bạn sẽ thấy các phần trông như thế này.
Mã:
[tùy chọn]
 UseSyslog

[openSSH]
 sequence = 7000,8000,9000
 seq_timeout = 5
 command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 tcpflags = syn

[closeSSH]
 sequence = 9000,8000,7000
 seq_timeout = 5
 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 tcpflags = syn
  • Trong phần "tùy chọn", chúng ta thấy một tên chỉ thịUseSyslog.logfile khá rõ ràng – nó ghi lại tất cả các lần thử knock
  • Ungerneath, chúng ta có hai phần:eek:penSSH vàcloseSSH. Phần đầu tiên sẽ cho phép knocker truy cập vào cổng 22 (SSH), và phần thứ hai sẽ đóng cổng khi knocker hoàn tất.
  • knockd tự động thay thế %IP% bằng địa chỉ IP của máy khách đã gửi knock, do đó bạn chỉ có thể mở cổng cho máy khách được ủy quyền.
Mã:
sequence = 9000,8000,7000
Điều này có nghĩa là tập hợp các quy tắc này sẽ khớp nếu cùng một IP yêu cầu kết nối trên cổng 7000, tiếp theo là cổng 8000, cuối cùng là cổng 9000. Rất nên thay đổi các cổng mặc định và thứ tự của chúng vì thứ tự mặc định cũng được những kẻ tấn công biết rõ.
Mã:
seq_timeout = 5
Tùy chọn "seq_timeout" định nghĩa theo giây khoảng thời gian bạn có để cung cấp tất cả các số cho lệnh knock. Giá trị mặc định này sẽ ổn và không thành vấn đề nếu bạn tự động tạo lệnh knock.
Mã:
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
Chỉ định lệnh sẽ được thực thi khi máy khách thực hiện lệnh knock cổng chính xác. Tất cả các trường hợp của %IP% sẽ được thay thế bằng địa chỉ IP của trình knock.
Mã:
tcpflags = syn
Chú ý đến các gói phải được sử dụng để đặt cờ này, trong trường hợp này là các gói syn. Khi sử dụng cờ TCP, knockd sẽ BỎ QUA các gói tin TCP không khớp với cờ.

Bây giờ hãy bật knockd. Chỉnh sửa tệp /etc/default/knockd bằng nano:
Mã:
nano /etc/default/knockd


và thay đổi:
Mã:
START_KNOCKD=0
thành
Mã:
START_KNOCKD=1
sau khi lưu và thoát. Nếu bạn có nhiều bộ điều hợp mạng hoặc gặp sự cố khiến knockdis không tự động khởi động trong quá trình khởi động hệ thống, bạn có thể chỉ định thủ công giao diện mạng để lắng nghe bằng cách bỏ chú thích và sửa đổi dòng thứ hai KNOCKD_OPTS.

Sau đó, hãy khởi động knockd theo cách thủ công:
Mã:
service knockd start
Điều này sẽ khởi động daemon và cho phép bạn thay đổi các tập hợp quy tắc iptables bằng cách gõ vào chuỗi các cổng.

Bạn đã cài đặt các gói cần thiết, nếu bạn bị ngắt kết nối khỏi máy chủ, để kết nối lại, bạn phải gõ các cổng mà bạn đã xác định ở bên phải sequence thiết lập kết nối SSH.


Bước 3: Truy cập máy chủ khi knockd đang chạy​

Nếu bạn đã làm theo các bước trên, thì bạn sẽ không thể kết nối trực tiếp với máy chủ SSH nữa nếu không có port knocking.

Bạn sẽ không nhận được phản hồi nào từ máy chủ và máy khách SSH sẽ hết thời gian chờ. Nguyên nhân là do daemon SSH của chúng ta hiện đang bị iptables chặn. Gõ ctrl-C để kết thúc nỗ lực SSH nếu nó không tự động hết thời gian.


Kiểm tra việc gõ bằng máy khách telnet​

Đối với người dùng Linux: Cài đặt gói telnet bằng apt.

Đối với người dùng Windows: bạn có thể cài đặt máy khách Telnet bằng cách truy cập phần "Programs", tìm kiếm "Turn windows features on or off", từ đó bật Telnet Client.

Gõ lệnh sau vào dấu nhắc lệnh (thay thế chuỗi cổng bằng chuỗi tùy chỉnh của bạn):
Mã:
telnet youripaddress 7000
telnet youripaddress 8000
telnet youripaddress 9000
Bạn phải thực hiện tất cả những điều này trong 5 giây vì đây là giới hạn thời gian áp dụng cho cấu hình. Bây giờ, hãy thử kết nối với máy chủ của bạn qua SSH. Bạn sẽ có thể truy cập kết nối.

Chạy các lệnh trên theo thứ tự ngược lại để đóng máy chủ SSH.
Mã:
telnet youripaddress 9000
telnet youripaddress 8000
telnet youripaddress 7000
Phần tốt nhất của port knocking là bạn có thể cấu hình nó cùng với xác thực khóa riêng. Nếu bạn cấu hình cả hai, thì về mặt lý thuyết sẽ không có khả năng ai đó có thể truy cập hoặc kết nối cho đến khi và trừ khi họ biết cả hai cổng và khóa riêng.
 
Back
Bên trên