In informatica, il port knocking è un sistema per aprire delle porte su un firewall dall'esterno inviando tentativi di connessione ad una sequenza prestabilita di porte chiuse; una volta che ciò sia stato fatto le regole del firewall vengono aggiornate dinamicamente per consentire all'host che ha inviato la giusta sequenza di connettersi alla porta voluta.
Questo scopo viene ottenuto principalmente impiegando un demone che controlli continuamente i log del firewall in cerca della sequenza corretta e in tal caso ne modifichi la configurazione, ma si può usare anche uno sniffer che esamini direttamente i pacchetti ricevuti, usando in questo caso delle porte già aperte su cui ricevere la bussata. L'utente invece utilizzerà un piccolo programma, che può essere un semplice script netcat o un ping modificato sino ad un generatore di hash, da lanciare prima della normale connessione alla macchina di destinazione.
Il port knocking viene frequentemente impiegato per consentire l'accesso sulla porta TCP 22, usata da SSH, in quanto questo servizio è spesso l'obiettivo di attacchi a forza bruta in seguito a port scan. La bussata è analoga ad una stretta di mano segreta e può consistere in qualsiasi quantità di pacchetti TCP, UDP, ICMP diretti a porte numerate sulla macchina di destinazione. La complessità della bussata può variare da una semplice lista di porte da contattare sequenzialmente ad uno schema temporizzato che discrimini l'indirizzo IP e impieghi tecniche crittografiche.
Molte implementazioni sono vere e proprie macchine a stati che consentono di non rivelare alcuna informazione circa lo stato attuale, in altre parole se la parte iniziale della bussata è stata ricevuta correttamente, mentre quella finale no, l'utente non ha nessun modo di saperlo in quanto l'unico effetto osservabile è l'eventuale apertura della porta a cui si vuole connettere quando la sequenza inviata è corretta.