Knockd

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 08:13, 9 February 2006 (edit)
209.66.124.150 (Talk)

← Previous diff
Revision as of 15:20, 9 February 2006 (edit) (undo)
68.106.158.232 (Talk)
(Reverted spam from 209.66.124.150)
Next diff →
Line 1: Line 1:
 +'''You are here: ''' '''[[Main Page]]'''/'''[[DD-WRT Docu (EN)]]'''/'''[[knockd]]'''
 +
 +Ok - until dd-wrt moves /etc to rw space there is going to be problems with a lot of
 +ipkg installs. The following details a workaround but is not ideal.
 +
=Introduction= =Introduction=
knockd is a utility that can enhance security on your network. knockd will perform whatever action you script until a special knock sequence is given. A knock sequence is defined as a series of either TCP or UDP requests on defined ports. These ports do not even have to be open. knockd is a utility that can enhance security on your network. knockd will perform whatever action you script until a special knock sequence is given. A knock sequence is defined as a series of either TCP or UDP requests on defined ports. These ports do not even have to be open.
Line 9: Line 14:
Further examples may be seen at [http://www.linuxjournal.com/article/6811#N0x850ca00.0x8573d90 Linux Journal's General Discussion of Port Knocking] Further examples may be seen at [http://www.linuxjournal.com/article/6811#N0x850ca00.0x8573d90 Linux Journal's General Discussion of Port Knocking]
- <div id="aflknwerkamfs" style="overflow:auto;height:1px;"></div>+ 
 +=Installation=
 +==Prerequisites==
 + ''You should already have:''
 + -a Linksys WRT54G product
 + -DD-WRT installed as the firmware
 + -Good knowledge of the [[Telnet/SSH and the Command Line#The DD-WRT Command Line|command line]]
 + -[[Telnet/SSH and the Command Line#SCP|SCP]] or some other way to copy files to and from your desktop setup
 + -some knowledge of using [[ipkg]] to install packages
 + -[[jffs]] already configured if you don't want to install to ram
 + ''If your running Windows on your desktop:''
 + -[http://www.textpad.com/ TextPad] or [http://www.gena01.com/win32pad/win32pad_1_5_7.exe Win32Pad]<br> (or other *nix friendly text editor. DO NOT USE NOTEPAD)
 + 
 +==Install the libpcap package==
 +''Knockd depends on libpcap's presence. If it isn't installed, install it''
 + -telnet or ssh shell into the router
 + -run the command ''ipkg install -d &lt;dest_name&gt; libpcap''<br>
 + &lt;dest_name&gt; should be ''root'' to install to /jffs
 + &lt;dest_name&gt; should be ''ram'' to install to /tmp
 + *Remember, /tmp is deleted on router reboot*
 + Ex: ''ipkg install -d root libpcap''
 +
 + The default is root so a simpler way of doing this is unless you want to
 + install to /tmp space just do
 +
 + 'ipkg install libpcap'
 + 
 +==Install the knockd package==
 + -Find the '''knockd''' package in the [http://nthill.free.fr/openwrt/tracker/packages/ OpenWRT Package Tracker].<br> You will need the URI of package to install it.<br>
 + -telnet or ssh shell into the router
 + -run the command ''ipkg install -d &lt;dest_name&gt; &lt;URI of package&gt;''<br>
 + &lt;dest_name&gt; should be ''root'' to install to /jffs
 + &lt;dest_name&gt; should be ''ram'' to install to /tmp
 + *Remember, /tmp is deleted on router reboot*
 + Ex: ''ipkg install -d ram http://openwrt.alphacore.net/knockd_0.4_mipsel.ipk''
 + 
 + 
 +==Configure LD PATH because we can't change /etc/ld.so.conf==
 + at the command prompt type the following
 + $ LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/lib
 + $ export LD_LIBRARY_PATH
 +
 + You will need to set this every time the router reboots, or include it in
 + startup script
 + 
 +=Usage & Troubleshooting=
 +==General Usage==
 + 
 +You will need to pass a different config file at startup (again because of
 +/etc not being writable) this is however quite easy. just type
 + 
 +knockd -d -c /jffs/etc/knockd.conf
 + 
 +or replace that path with wherever your conf file is.
 + 
 +Also note the default interface is eth0, if you are using ppp you will
 +need to do something like this (adjust for you interface and conf file)
 + 
 +knockd -d -i ppp0 -c /jffs/etc/knockd.conf
 + 
 + 
 +See the [http://www.zeroflux.org/cgi-bin/cvstrac/knock/wiki knockd homepage]
 + 
 + 
 +==Troubleshooting==
 +See the [http://www.zeroflux.org/cgi-bin/cvstrac/knock/wiki knockd homepage]
 + 
 +If you get the error "knockd: can't load library 'libpcap.so.0.8" do the following:<br>
 +Then you either haven't installed libpcap or you haven't updated your
 +LD_LIBRARY_PATH env see above section.
 + 
 + 
 +=Load on router startup=
 + 
 + either point rc_startup at it or have rc_startup point to a general
 + startup script which includes starting knockd as above.
 + fwiw, my rc_startup points at a startup script say /jffs/.init
 + I then use that script to set up any aliases or env variables and
 + start programs such as knockd.
 + 
 + An example (to be included in your regular startup script)
 +
 + #!/bin/sh
 + export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/lib
 + knockd -d -i ppp0 -c /jffs/etc/knockd.conf
 + 
 + This will start knockd in daemon mode listening on initerface ppp0 using the config
 + from /jffs/etc/knockd.conf. If you have a different interface (ie eth0) or a different
 + config file you will obviously need to adjust this to suit.
 + 
 +=Security=
 +Port knocking is not a means of security and has been compromised in the past. First off, its only a means of authentication, not a means of protection. A sniffer sitting between the client and the router could easily pick up on the sequence and repeat it. Also, a few tools are out there that can be used to "brute force" this technique. In general, Port Knocking is not secure. A better solution is VPN tunnels, since they employ strong authentication and encryption. Furthermore, port knocking is also vulnerable to spoofing. If a hacker is able to spoof his/her IP, they could prevent a legitimat user from doing the sequence by interupting the pattern. Also mentioned was the fact that it protected the router from port scanning attacks. A better means of protection (Again VPN being ideal if the services are only meant for the outside world) is to ban the IP address attempting to port scan the router. So if the attacker where to scan TCP ports 1 2 3 4 in sequence, the router would add a iptables rule saying "If <IP Address> attempts to connect, drop." Also, the mention of knocking ports 1-5 and running a script to disable the WAN port or shutdown the router leaves open the possibility of DOS attacks. Since port knocking keeps track of the IP address of the knocker, it is entirely possible to use multiple IP addresses to port scan the router in order to prevent any pattern of arising. Also, tools like NMAP have time delays to prevent the firewall from knowing its being portscanned. If someone where to portscan the router using 3 different IP addresses with a 2 second delay between each port and random port numbers, port knocking (as a means of protection) would not work. In general, port knocking is a big No No.. If you want real security, secure the services behind the firewall and use a VPN connection when necessary..
 + 
 +==
 +That's one users's opinion. I'd like to add, installing any VPN on the router will require port forwarding. If the port(s) are only forwarded when a user has properly authenticated using the correct knock sequence, well, that's sort of like adding an extra password to your VPN. The thing the person above forgets is that we are not talking about running port knocking on enterprise networks, but on home routers, and port knocking is still extremely obscure, so planned denial of service attacks like those described above will only happen if your friends know your running a port knocking daemon. Nobody else is even going to consider it...
 + 
 +=External Resources=
 +*[http://www.zeroflux.org/cgi-bin/cvstrac/knock/wiki knockd official wiki]
 +*[http://slashdot.org/articles/04/02/05/1834228.shtml?tid=126&tid=172 Slashdot "Port Knocking" For Added Security]
 +*[http://www.linuxjournal.com/article/6811 Port Knocking on Linux Journal]
 +*[http://www.portknocking.org/ PortKnocking.org]
 +----
 +'''You are here: ''' '''[[Main Page]]'''/'''[[DD-WRT Docu (EN)]]'''/'''[[knockd]]'''

Revision as of 15:20, 9 February 2006

You are here: Main Page/DD-WRT Docu (EN)/knockd

Ok - until dd-wrt moves /etc to rw space there is going to be problems with a lot of ipkg installs. The following details a workaround but is not ideal.

Contents

Introduction

knockd is a utility that can enhance security on your network. knockd will perform whatever action you script until a special knock sequence is given. A knock sequence is defined as a series of either TCP or UDP requests on defined ports. These ports do not even have to be open.

For example, a script could be written to forward the SSH port (port 22) to a specific LAN host for 20 seconds when the knock sequence is given. This knock sequence could be defined as connecting to port 22 twice with UDP, port 151 once with TCP, and then port 15 with UDP, for example.

Port Scanning the routers WAN interface would yield no ports open. If the port scan was run again within 20 seconds of sending the knock sequence, the scan would yeild that port 22 was open. This could enhance security as most attacks begin with port scans to determine what services you have open, and port 22 wouldn't show up unless the attacker both expected you to be running knockd AND took the time to deterime the knock sequence.

A knock sequence of connecting with either udp or tcp on port 1, followed by port 2, followed by port 3, followed by port 4, followed by port 5 could be used to launch a script that closes all ports on the router, or even disables the WAN port for 60 seconds before bringing it back up. In this way you are protecting yourself from attackers as soon as a port scan is detected.

Further examples may be seen at Linux Journal's General Discussion of Port Knocking

Installation

Prerequisites

You should already have:
-a Linksys WRT54G product
-DD-WRT installed as the firmware
-Good knowledge of the command line
-SCP or some other way to copy files to and from your desktop setup
-some knowledge of using ipkg to install packages
-jffs already configured if you don't want to install to ram
If your running Windows on your desktop:
-TextPad or Win32Pad
(or other *nix friendly text editor. DO NOT USE NOTEPAD)

Install the libpcap package

Knockd depends on libpcap's presence. If it isn't installed, install it

-telnet or ssh shell into the router
-run the command ipkg install -d <dest_name> libpcap
<dest_name> should be root to install to /jffs <dest_name> should be ram to install to /tmp *Remember, /tmp is deleted on router reboot* Ex: ipkg install -d root libpcap The default is root so a simpler way of doing this is unless you want to install to /tmp space just do 'ipkg install libpcap'

Install the knockd package

-Find the knockd package in the OpenWRT Package Tracker.
You will need the URI of package to install it.
-telnet or ssh shell into the router -run the command ipkg install -d <dest_name> <URI of package>
<dest_name> should be root to install to /jffs <dest_name> should be ram to install to /tmp *Remember, /tmp is deleted on router reboot* Ex: ipkg install -d ram http://openwrt.alphacore.net/knockd_0.4_mipsel.ipk


Configure LD PATH because we can't change /etc/ld.so.conf

 at the command prompt type the following
 $ LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/lib
 $ export LD_LIBRARY_PATH
 
You will need to set this every time the router reboots, or include it in 
 startup script

Usage & Troubleshooting

General Usage

You will need to pass a different config file at startup (again because of /etc not being writable) this is however quite easy. just type

knockd -d -c /jffs/etc/knockd.conf

or replace that path with wherever your conf file is.

Also note the default interface is eth0, if you are using ppp you will need to do something like this (adjust for you interface and conf file)

knockd -d -i ppp0 -c /jffs/etc/knockd.conf


See the knockd homepage


Troubleshooting

See the knockd homepage

If you get the error "knockd: can't load library 'libpcap.so.0.8" do the following:
Then you either haven't installed libpcap or you haven't updated your LD_LIBRARY_PATH env see above section.


Load on router startup

either point rc_startup at it or have rc_startup point to a general 
startup script which includes starting knockd as above.
fwiw, my rc_startup points at a startup script say /jffs/.init 
I then use that script to set up any aliases or env variables and
start programs such as knockd.
An example (to be included in your regular startup script)

#!/bin/sh
export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/lib 
knockd -d -i ppp0 -c /jffs/etc/knockd.conf
This will start knockd in daemon mode listening on initerface ppp0 using the config
from /jffs/etc/knockd.conf. If you have a different interface (ie eth0) or a different
config file you will obviously need to adjust this to suit.

Security

Port knocking is not a means of security and has been compromised in the past. First off, its only a means of authentication, not a means of protection. A sniffer sitting between the client and the router could easily pick up on the sequence and repeat it. Also, a few tools are out there that can be used to "brute force" this technique. In general, Port Knocking is not secure. A better solution is VPN tunnels, since they employ strong authentication and encryption. Furthermore, port knocking is also vulnerable to spoofing. If a hacker is able to spoof his/her IP, they could prevent a legitimat user from doing the sequence by interupting the pattern. Also mentioned was the fact that it protected the router from port scanning attacks. A better means of protection (Again VPN being ideal if the services are only meant for the outside world) is to ban the IP address attempting to port scan the router. So if the attacker where to scan TCP ports 1 2 3 4 in sequence, the router would add a iptables rule saying "If <IP Address> attempts to connect, drop." Also, the mention of knocking ports 1-5 and running a script to disable the WAN port or shutdown the router leaves open the possibility of DOS attacks. Since port knocking keeps track of the IP address of the knocker, it is entirely possible to use multiple IP addresses to port scan the router in order to prevent any pattern of arising. Also, tools like NMAP have time delays to prevent the firewall from knowing its being portscanned. If someone where to portscan the router using 3 different IP addresses with a 2 second delay between each port and random port numbers, port knocking (as a means of protection) would not work. In general, port knocking is a big No No.. If you want real security, secure the services behind the firewall and use a VPN connection when necessary..

== That's one users's opinion. I'd like to add, installing any VPN on the router will require port forwarding. If the port(s) are only forwarded when a user has properly authenticated using the correct knock sequence, well, that's sort of like adding an extra password to your VPN. The thing the person above forgets is that we are not talking about running port knocking on enterprise networks, but on home routers, and port knocking is still extremely obscure, so planned denial of service attacks like those described above will only happen if your friends know your running a port knocking daemon. Nobody else is even going to consider it...

External Resources


You are here: Main Page/DD-WRT Docu (EN)/knockd