Hoppa till innehållet
Secret Knock

Exempel på knockd.conf

knockd läser /etc/knockd.conf: en [options]-sektion och en sektion per dörr. Varje sektion har en sekvens, en tidsgräns och kommandot som ska köras för den knackande adressen, %IP%. Välj egna portar — återanvänd aldrig portarna från exemplen.

Öppna SSH i några sekunder

Den vanligaste inställningen: en knackning öppnar SSH och knockd stänger det igen efter cmd_timeout. Sessioner som du redan har öppnat fortsätter att fungera om brandväggen tillåter etablerade anslutningar.

[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

Separata sekvenser för att öppna och stänga

Utan en timer förblir porten öppen tills du knackar den avslutande sekvensen. Praktiskt, men lätt att glömma — välj helst den tidsstyrda versionen.

[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

Engångssekvenser

I stället för en fast sekvens kan knockd läsa en fil med sekvenser och bara acceptera var och en en gång, så att en inspelad knackning inte kan spelas upp igen. Secret Knock behåller samma lista och går vidare till nästa sekvens efter en knackning som öppnade dörren.

[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 och sekvensfilen

Med nftables

På system med nftables kan du låta knockd lägga till adressen i en uppsättning med en tidsgräns; guiden för att dölja SSH visar den matchande nftables-tabellen.

[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

Efter redigering

  1. 1På Debian och Ubuntu ställer du in gränssnittet som knockd lyssnar på i /etc/default/knockd (KNOCKD_OPTS="-i eth0") och startar om knockd.
  2. 2Se det fungera med journalctl -u knockd -f medan du knackar.
  3. 3I Secret Knock gör + › Importera från fil varje sektion med en sekvens till en dörr; ange listor med engångssekvenser manuellt.

Alla exempel på GitHub → Alla konfigurationer på den här sidan, redo att kopiera: github.com/mobilcomm/secretknock-examples (public domain).

Frågor

Ska jag använda TCP- eller UDP-steg?

Båda fungerar. Att blanda båda gör en sekvens svårare att gissa utifrån en portskanning. UDP-steg kan bära en nyttolast i Secret Knock om din konfiguration kontrollerar den.

Guider för din konfiguration