Ví dụ knockd.conf
knockd đọc /etc/knockd.conf: một phần [options] và một phần cho mỗi cửa. Mỗi phần có một chuỗi, một giới hạn thời gian và lệnh chạy cho địa chỉ đang gõ, %IP%. Hãy chọn các cổng riêng — đừng bao giờ dùng lại các cổng trong ví dụ.
Mở SSH trong vài giây
Thiết lập phổ biến nhất: một lần gõ sẽ mở SSH và knockd đóng lại sau cmd_timeout. Các phiên bạn đã mở vẫn tiếp tục hoạt động nếu tường lửa chấp nhận các kết nối đã được thiết lập.
[options]
UseSyslog
[openSSH]
sequence = 7311:tcp,8822:tcp,9133:udp
seq_timeout = 10
tcpflags = syn
start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 10
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT Chuỗi riêng để mở và đóng
Không có bộ hẹn giờ, cổng sẽ mở cho đến khi bạn gõ chuỗi đóng. Tiện lợi nhưng dễ quên — nên dùng phiên bản có thời hạn.
[options]
UseSyslog
[openSSH]
sequence = 7311:tcp,8822:tcp,9133:udp
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
[closeSSH]
sequence = 9133:udp,8822:tcp,7311:tcp
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT Chuỗi dùng một lần
Thay vì một chuỗi cố định, knockd có thể đọc một tệp chuỗi và chỉ chấp nhận mỗi chuỗi một lần, để lần gõ đã bị ghi lại không thể bị phát lại. Secret Knock duy trì cùng danh sách và chuyển sang chuỗi tiếp theo sau một lần gõ đã mở cửa.
[openSSH]
one_time_sequences = /etc/knockd/ssh_sequences
seq_timeout = 10
tcpflags = syn
start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 10
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
# /etc/knockd/ssh_sequences — one sequence per line, each used once
2222:udp,3333:tcp,4444:udp
5555:tcp,6666:udp,7777:tcp
8888:udp,9999:tcp,1111:tcp Với nftables
Trên các hệ thống có nftables, hãy để knockd thêm địa chỉ vào một tập hợp có thời hạn chờ; hướng dẫn ẩn SSH cho thấy bảng nftables tương ứng.
[openSSH]
sequence = 7311:tcp,8822:tcp,9133:udp
seq_timeout = 10
tcpflags = syn
start_command = /usr/sbin/nft add element inet filter knocked4 { %IP% timeout 30s } Sau khi chỉnh sửa
- 1Trên Debian và Ubuntu, đặt giao diện mà knockd lắng nghe trong /etc/default/knockd (KNOCKD_OPTS="-i eth0") rồi khởi động lại knockd.
- 2Theo dõi hoạt động bằng journalctl -u knockd -f trong khi bạn gõ.
- 3Trong Secret Knock, + › Nhập từ tệp sẽ biến mỗi phần có chuỗi thành một cửa; nhập thủ công danh sách chuỗi dùng một lần.
Tất cả ví dụ trên GitHub → Mọi cấu hình trên trang này, sẵn sàng để sao chép: github.com/mobilcomm/secretknock-examples (phạm vi công cộng).
Câu hỏi
Tôi nên dùng bước TCP hay UDP?
Cả hai đều được. Kết hợp cả hai khiến chuỗi khó đoán hơn từ một lượt quét cổng. Các bước UDP có thể mang dữ liệu tải trong Secret Knock nếu thiết lập của bạn kiểm tra dữ liệu đó.