El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

portknocking en freebsd

| Comments

La técnica port-knocking o knockd para otros, es en mi opinión, pilar de la seguridad en cualquier servidor que use SSH. Aunque es bastante versátil y puede ser usado hasta para reiniciar servicios sin loguearte.

Una de las cosas que empece a extrañar en FreeBSD fue knockd, pero gracias a la flexbilidad de ipfw, podemos usar este poderoso software. En FreeBSD el fichero se encuentra en /usr/local/etc/knockd.conf.sample y el paquete se llama knock.

OJO!! Muy importante especificarle la interfaz por la cual va a escuchar.

“/usr/local/etc/knockd.conf”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 [options]
         logfile = /var/log/knockd.log
         interface = xn0

 [openSSH]
         sequence    = 111,222,333
         seq_timeout = 9
         command     = /sbin/ipfw -q add 00001 allow all from %IP% to me
         tcpflags    = syn

 [closeSSH]
         sequence    = 222,111,333
         seq_timeout = 9
         command     = /sbin/ipfw -q delete 00001
         tcpflags    = syn

Nada, resumiendo, que el truco está en poner la regla con el número 00001. Recuerdas que ipfw te permite (casi te obliga a) especificar un número para cada regla. Pues usaremos ese numerito diminuto para ponerla de primera.

Los tipos ortodoxos criticarán que es una regla al tetón. Pienso que no vale la pena abrir solo el 22; si voy a pasar tanto trabajo, que se me abra la puerta completa.

Por cierto, junto con knock, viene un programita para hacer el knocking. Yo solía hacerlo con netcat pero knock es más cómodo.

“knock”
1
   knock 192.168.3.1 111,222,333

En mi .bashrc, tengo esta función declarada.

“.bashrc”
1
2
3
4
5
 abrete_cesamo() {
    knock  $1 111 222 333
    ssh root@$1
    knock  $1 222 111 333
 }

No tengo que decirte que la combinación de puertos está de acorde al ejemplo de la entrada y que debes cambiarla por la que tu establezcas. Así de esa manera, hacerle SSH a un servidor es ejecutar abrete_cesamo ip.del.servidor Luego al terminar la sesión ssh, se ejecuta la secuencia de cerrado.

Y hablando de implementaciones raras de knockd!

En alpine linux, iptables está en /sbin, no en /usr/sbin. Sin embargo, el fichero de configuración tiene puesto que está en /usr/sbin/, lo cual, repito; no es correcto.

Además, tanto en debian como alpine. No importa que pongas en la configuración porque interfaz escuchará. Siempre lo hará por eth0. Para cambiar esta situación; debes:

En alpine linux, configurar la interfaz en el fichero /etc/conf.d/knockd

En debian, configurar la interfaz (y poner un 1) en /etc/default/knockd

Recuerda que en linux, el comando de iptables, viene con “-A INPUT”. Si tienes un firewall corriendo, obviamente que no pincha; por tanto, ponlo con “-I INPUT”.

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

Comments