Langkau ke kandungan
Secret Knock

Contoh knockd.conf

knockd membaca /etc/knockd.conf: satu bahagian [options] dan satu bahagian bagi setiap pintu. Setiap bahagian mempunyai jujukan, had masa dan perintah untuk dijalankan bagi alamat yang mengetuk, %IP%. Pilih port anda sendiri — jangan sekali-kali gunakan semula port daripada contoh.

Buka SSH selama beberapa saat

Persediaan yang paling biasa: satu ketukan membuka SSH, dan knockd menutupnya semula selepas cmd_timeout. Sesi yang telah anda buka terus berfungsi jika firewall menerima sambungan yang telah diwujudkan.

[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
/etc/knockd.conf

Jujukan berasingan untuk membuka dan menutup

Tanpa pemasa, port kekal terbuka sehingga anda mengetuk jujukan penutupan. Mudah, tetapi senang terlupa — gunakan versi dengan had masa.

[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
/etc/knockd.conf

Jujukan sekali guna

Daripada satu jujukan tetap, knockd boleh membaca fail jujukan dan menerima setiap satunya sekali sahaja, supaya ketukan yang dirakam tidak boleh dimainkan semula. Secret Knock mengekalkan senarai yang sama dan beralih ke jujukan seterusnya selepas ketukan yang membuka pintu.

[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
/etc/knockd.conf dan fail jujukan

Dengan nftables

Pada sistem dengan nftables, biarkan knockd menambahkan alamat pada set dengan tamat masa; panduan sembunyikan SSH menunjukkan jadual nftables yang sepadan.

[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 }
/etc/knockd.conf

Selepas mengedit

  1. 1Pada Debian dan Ubuntu, tetapkan antara muka yang didengari oleh knockd dalam /etc/default/knockd (KNOCKD_OPTS="-i eth0") dan mulakan semula knockd.
  2. 2Pantau ia berfungsi dengan journalctl -u knockd -f semasa anda mengetuk.
  3. 3Dalam Secret Knock, + › Import daripada fail menjadikan setiap bahagian dengan jujukan sebagai pintu; masukkan senarai jujukan sekali guna secara manual.

Semua contoh di GitHub → Setiap konfigurasi pada halaman ini, sedia untuk disalin: github.com/mobilcomm/secretknock-examples (domain awam).

Soalan

Patutkah saya menggunakan langkah TCP atau UDP?

Kedua-duanya boleh digunakan. Mencampurkan kedua-duanya menjadikan jujukan lebih sukar untuk diteka daripada imbasan port. Langkah UDP boleh membawa muatan dalam Secret Knock jika persediaan anda menyemaknya.

Panduan untuk persediaan anda