text: Portknocking | c't Magazin
  Rechner per Wake-on-LAN übers Internet einschalten
  Benjamin Benz, Johannes Endres
  Seite 3: Portknocking
  Elegant, sicher und ohne nennenswerte Modifikationen am Regelwerk der Firewall löst Portknocking das Problem. Dabei versucht der Client über das Internet nacheinander Verbindungen zu verschiedenen Ports der Firewall aufzubauen. Diese ignoriert die Klopfzeichen (englisch knocks) und protokolliert sie lediglich. Ein Hintergrundprogramm analysiert die Logfiles der Firewall. Findet es ein bestimmtes Muster an Zugriffen auf unterschiedlichen Ports, startet es ein Programm, das dann ein WOL-Paket im LAN erzeugt. Über die Art der Zugriffe kann auch eine Autorisierung und Übertragung der Ziel-MAC-Adresse erfolgen. All dies geschieht, ohne dass ein einziges Paket die Firewall passiert. Sobald der Knockdaemon das korrekte Klopfzeichen gehört hat, ruft er das Hilfsprogramm wakeonlan auf. Dieses erzeugt ein Magic Packet mit dem eigentlichen Weckruf. Damit die Firewall die Klopfzeichen in das Logfile einträgt, das der Knockdaemon auswertet, muss man sie lediglich um eine LOG-Regel erweitern:
  iptables -I INPUT -p tcp -s 0/0 -d 0/0 --dport 55000:55255 -j LOG
  Der in Perl geschriebene Daemon benötigt eine ganze Reihe an zusätzlichen CPAN-Modulen – welche genau, verrät die Readme-Datei. Installieren kann man sie über die CPAN-Shell, die man kurz auf Aktualität prüfen sollte:
  cpan> install Bundle::CPAN …
  Dann lädt und installiert der CPAN-Befehl install MODULNAME das jeweilige Modul. Alle Einstellungen des Daemon stehen in der Datei knockdaemon.conf. Damit der Daemon im File-Modus runmode=file auch die Logs der Firewall findet, weist ihm logfile=/var/log/messages den Pfad. Eine Klopfsequenz soll die MAC-Adresse (Flag0 bis Flag5) enthalten und ist wie folgt aufgebaut:
  knock=IP,PORT,FLAG0,FLAG1,FLAG2,FLAG3,FLAG4,FLAG5,CHECKSUM
  Die Felder IP und PORT sind für Wake-on-LAN eigentlich überflüssig und nur zur Kompatibilität mit anderen Klopfzeichen vorhanden. Eine action bestimmt, wie der Daemon auf bestimmte Klopfzeichen reagieren soll:
  condition = PORT==9 && FLAG0<255
  template = wake_on_lan
  Das Template wake_on_lan ruft das Programm wakeonlan auf, das im gleichen Verzeichnis wie der Knockdaemon liegen muss. Es erzeugt das eigentliche magische Paket:
  <template wake_on_lan>
  system = "./wakeonlan -i 192.168.1.255
  `printf "%02x\n" FLAG0`:
  `printf "%02x\n" FLAG1`:
  `printf "%02x\n" FLAG2`:
  `printf "%02x\n" FLAG3`:
  `printf "%02x\n" FLAG4`:
  `printf "%02x\n" FLAG5`"
  Die auf den ersten Blick umständliche Konstruktion mit den printf-Befehlen baut aus den sechs dezimalen FLAGx-Feldern die hexadezimale MAC-Adresse zusammen.
  Klopf, klopf, …
  Die Klopfzeichen erzeugt ein ebenfalls in Perl geschriebener knockclient. Er läuft unter Linux und Windows und besitzt eine Konfigurationsdatei knockclient.conf. Sie muss genau auf die des Servers abgestimmt sein und enthält neben dem Aufbau des Klopfzeichens auch die Adresse der Firewall. Die Optionen für verschlüsselte Übertragung und der Kryptoschlüssel müssen exakt mit denen in knockdaemon.conf übereinstimmen.
  Das Portknocking bietet ganz nebenbei die Möglichkeit, das Aufwecken über die Kryptofunktion des Klopf-Daemon zu autorisieren. Paranoiker können die Klopfregeln weiter verfeinern und für jeden Rechner im LAN ein eigenes Zeichen festlegen. So muss dann nicht einmal mehr die MAC-Adresse die Firewall passieren.