Danh mục sản phẩm
Hướng dẫn cấu hình Port Knocking trên MikroTik để chống quét cổng và bảo vệ IP public
Port knocking trên MikroTik là gì?
Mọi địa chỉ IP public đều bị bot và các dịch vụ như shodan.io quét liên tục. Cổng nào đang mở (Winbox 8291, SSH 22, HTTPS 443...) đều có thể trở thành mục tiêu dò mật khẩu hoặc khai thác lỗ hổng đã biết.
Port knocking xử lý theo hướng ngược lại: router không mở cổng nào cho người lạ, mà chỉ "lắng nghe" các lần kết nối thử. Nếu một IP gõ đúng chuỗi cổng theo đúng thứ tự, router thêm IP đó vào một address-list tin cậy (ví dụ secured) và rule firewall sẽ cho IP này đi qua. Ví dụ: thay vì vào thẳng cổng 443, quản trị viên phải gõ lần lượt cổng 888, 555, 222 rồi mới truy cập được cổng chính.
Hình 1: Không có port knocking, cổng quản trị lộ ra Internet. Có port knocking, bot chỉ thấy cổng đóng, còn IP của quản trị viên được cấp quyền sau khi knock đúng.
⚡ Tóm tắt nhanh
- Mục đích: ẩn cổng quản trị của router, chỉ cấp quyền cho IP đã knock đúng chuỗi.
- Chuỗi mẫu trong bài: TCP 888, rồi 555, rồi 222. Mỗi bước có timeout 30 giây; danh sách
securedcó hiệu lực 30 phút. - Phạm vi: bảo vệ các dịch vụ chạy trên chính router (chain
input), như Winbox 8291, SSH 22, HTTPS 443. - Cơ chế: mỗi rule knock dùng
action=add-src-to-address-list; rule này không dừng việc xử lý gói, nên gói knock vẫn rơi xuống rule drop cuối và client không nhận được phản hồi nào. - Nên kèm blacklist để tránh việc quét cổng ngẫu nhiên vô tình trúng chuỗi knock.
- Passphrase (Layer7) là tuỳ chọn, tốn nhiều tài nguyên router, chỉ nên dùng khi thật sự cần.
Nguyên lý hoạt động: 3 lần knock rồi mới vào
Router xử lý firewall từ trên xuống dưới. Mỗi lần knock đúng chỉ làm một việc: thêm IP nguồn vào một address-list. Rule knock sau chỉ có tác dụng với IP đã nằm trong list của bước trước.
Hình 2: Luồng xử lý 3 bước. Gõ sai thứ tự, thiếu bước hoặc quá hạn timeout thì IP không được chuyển sang danh sách kế tiếp.
Cách cấu hình port knocking trên MikroTik
Bước 0: Chuẩn bị
Bài dùng giả định router đã có firewall chặn (drop) mọi kết nối input từ WAN, và các rule knock phải nằm trên rule drop đó. Ngoài ra cần:
- Một interface-list tên
WANchứa cổng nối Internet. Nếu chưa có, tạo như sau (thayether1bằng cổng WAN của bạn):
/interface list add name=WAN /interface list member add list=WAN interface=ether1
- Một đường truy cập dự phòng (từ LAN hoặc cổng console) để khỏi bị khoá ngoài khi thử nghiệm.
Bước 1: Tạo 3 rule knock và rule cho phép
Lần knock thứ nhất lắng nghe cổng 888 và thêm IP nguồn vào address-list 888 trong 30 giây:
/ip firewall filter add chain=input in-interface-list=WAN protocol=tcp dst-port=888 action=add-src-to-address-list address-list=888 address-list-timeout=30s comment="knock 1"
Lần knock thứ hai chỉ áp dụng cho IP đã nằm trong list 888. Bạn có thể lặp lại bước này bao nhiêu lần tuỳ ý, càng nhiều lần knock càng khó đoán:
add chain=input in-interface-list=WAN protocol=tcp dst-port=555 src-address-list=888 action=add-src-to-address-list address-list=555 address-list-timeout=30s comment="knock 2"
Lần knock cuối đưa IP vào list tin cậy secured trong 30 phút, kèm rule cho phép IP trong list này đi qua:
add chain=input in-interface-list=WAN protocol=tcp dst-port=222 src-address-list=555 action=add-src-to-address-list address-list=secured address-list-timeout=30m comment="knock 3" add chain=input in-interface-list=WAN src-address-list=secured action=accept comment="cho phep IP da knock"
Bước 2: Sắp xếp thứ tự rule
Rule mới tạo mặc định nằm cuối chuỗi, tức là dưới rule drop và sẽ không bao giờ được xét tới. Hãy kéo các rule lên trên rule drop input từ WAN (kéo thả trong WinBox, WebFig, hoặc dùng lệnh move), rồi kiểm tra lại bằng /ip firewall filter print.
Hình 3: Thứ tự rule khuyến nghị. Các rule 1 đến 7 phải nằm phía trên rule drop input từ WAN.
Bước 3: Thêm blacklist chống quét cổng
Nếu chỉ dùng ít lần knock, một lượt quét cổng đơn giản vẫn có thể vô tình chạm đúng các cổng theo đúng thứ tự. Vì vậy nên bổ sung blacklist. Cả 3 rule dưới đây được tạo ở trạng thái disabled=yes để tránh tự khoá mình.
Rule drop cho blacklist, đặt ở đầu danh sách firewall:
/ip firewall filter add chain=input in-interface-list=WAN src-address-list=blacklist action=drop disabled=yes comment="blacklist: drop"
Cổng bẫy (bad port): cổng mà người dùng hợp lệ không bao giờ chạm tới, nên phạt thời gian rất dài:
add chain=input in-interface-list=WAN protocol=tcp dst-port=666 action=add-src-to-address-list address-list=blacklist address-list-timeout=1000m disabled=yes comment="blacklist: bad port 666"
Các cổng làm chậm việc quét cổng đến mức vô nghĩa nhưng không khoá người dùng thật quá lâu. Điều kiện src-address-list=!secured giúp IP đã knock thành công không bị ảnh hưởng:
add chain=input in-interface-list=WAN protocol=tcp dst-port=21,22,23,8291,10000-60000 src-address-list=!secured action=add-src-to-address-list address-list=blacklist address-list-timeout=1m disabled=yes comment="blacklist: scan ports"
Chỉ bật các rule này sau khi bạn đã kiểm tra knock hoạt động và có đường vào dự phòng, hoặc đang dùng Safe Mode:
/ip firewall filter enable [find comment~"^blacklist"]
Lưu ý: nếu quản trị viên quên knock mà vào thẳng cổng 22 hoặc 8291, IP đó sẽ bị chặn 1 phút theo rule trên.
Bước 4: Knock từ máy quản trị
Có thể dùng công cụ knock chuyên dụng hoặc nmap. Với nmap, mỗi cổng phải là một lần gọi riêng theo đúng thứ tự (nmap mặc định quét các cổng theo thứ tự ngẫu nhiên nếu gom chung một lệnh):
for p in 888 555 222; do nmap -Pn -p $p <IP_WAN_CUA_ROUTER>; done
Trên Windows (PowerShell, đã cài nmap):
foreach ($p in 888,555,222) { nmap -Pn -p $p <IP_WAN_CUA_ROUTER> }
Trên Linux có gói knock (client của knockd):
knock <IP_WAN_CUA_ROUTER> 888 555 222
Sau khi knock xong (mỗi bước phải nằm trong 30 giây), kết nối Winbox hoặc SSH tới IP WAN của router như bình thường trong vòng 30 phút.
Bước 5: Kiểm tra kết quả
Xem IP đã vào list tin cậy chưa:
/ip firewall address-list print where list=secured
Xem bộ đếm gói của từng rule knock để biết rule nào đang nhận gói:
/ip firewall filter print stats where comment~"knock"
Dùng passphrase cho mỗi lần knock (Layer7)
Có thể tăng thêm một lớp bảo vệ bằng cách yêu cầu mỗi lần knock mang theo một chuỗi mật khẩu. Cách này dùng Layer7 và rất tốn tài nguyên router, chỉ nên dùng khi bạn hiểu rõ tác động.
/ip firewall layer7-protocol add name=pass regexp="^passphrase/$" /ip firewall filter add chain=input in-interface-list=WAN protocol=udp dst-port=888 layer7-protocol=pass action=add-src-to-address-list address-list=888 address-list-timeout=30s
Lưu ý khi triển khai thực tế
- Đổi cổng knock: 888, 555, 222 chỉ là ví dụ. Hãy chọn chuỗi cổng riêng của bạn và đặt ngoài dải cổng đã đưa vào blacklist (ví dụ 10000-60000).
- Giới hạn quyền sau khi knock (khuyến nghị của VNExperts): rule accept trong ví dụ cho phép mọi
inputtừ IP trongsecured. Có thể thu hẹp theo dịch vụ cần dùng:
add chain=input in-interface-list=WAN protocol=tcp dst-port=8291,22 src-address-list=secured action=accept comment="cho phep Winbox, SSH"
- Không thay thế các lớp bảo mật khác: chuỗi knock đi qua mạng không mã hoá, nên vẫn cần mật khẩu mạnh, cập nhật RouterOS định kỳ và ưu tiên VPN cho truy cập thường xuyên.
- Phạm vi áp dụng: cách trên bảo vệ dịch vụ chạy trên router (chain
input). Dịch vụ được chuyển tiếp vào mạng nội bộ qua NAT thuộc chain khác và cần cách xử lý riêng.
Câu hỏi thường gặp
Port knocking có thay thế được firewall không?
Không. Port knocking là một lớp bổ sung nằm trên nền firewall chặn mặc định. Nếu không có rule drop input từ WAN, các cổng vẫn mở với mọi người.
Cần bao nhiêu lần knock là đủ?
Không có giới hạn cố định. Tài liệu MikroTik cho phép lặp bước knock trung gian bao nhiêu lần tuỳ ý; càng nhiều lần knock thì xác suất quét ngẫu nhiên trúng chuỗi càng thấp.
Knock xong được truy cập trong bao lâu?
Theo ví dụ, IP nằm trong list secured 30 phút (address-list-timeout=30m). Hết hạn, IP bị xoá khỏi list và phải knock lại để tạo kết nối mới.
Bị khoá ngoài router sau khi bật blacklist thì làm sao?
Truy cập từ phía LAN hoặc cổng console để tắt rule blacklist hoặc xoá IP khỏi list blacklist. Để phòng trước, hãy tạo rule ở trạng thái disabled=yes và dùng Safe Mode khi bật.
Gói knock có làm router lộ cổng không?
Không. Rule add-src-to-address-list chỉ ghi nhận IP rồi để gói đi tiếp xuống rule drop cuối, nên client không nhận được phản hồi và cổng vẫn trông như đóng.
Thông tin liên quan
- Kiến thức - Kỹ thuật
- Hướng dẫn cấu hình protected port cho switch Cisco
- Firewall FortiGate
- Router Cisco
Ghi chú minh bạch
Các lệnh cấu hình, thứ tự rule và cơ chế blacklist được đối chiếu với tài liệu Port knocking của MikroTik (cập nhật lần cuối ngày 02/09/2024; trang này đã được MikroTik đóng băng, tài liệu mới nằm tại manual.mikrotik.com). Một số điểm VNExperts điều chỉnh so với bản gốc:
- Lệnh nmap được tách thành từng lần gọi riêng cho mỗi cổng để đảm bảo đúng thứ tự knock.
- Bổ sung phần chuẩn bị interface-list
WAN, bước sắp xếp thứ tự rule và lệnh kiểm tra. - Phần giới hạn quyền sau khi knock theo cổng dịch vụ và khuyến nghị đổi cổng knock là hướng dẫn thực hành của VNExperts, không nằm trong tài liệu MikroTik.
Nếu cần tư vấn thiết kế firewall và truy cập quản trị an toàn cho hệ thống, hãy liên hệ VNExperts.
