Skip to content

Instantly share code, notes, and snippets.

@LuisPalacios
Last active April 29, 2023 16:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LuisPalacios/6132bb17999934f5eb51cf186d94910f to your computer and use it in GitHub Desktop.
Save LuisPalacios/6132bb17999934f5eb51cf186d94910f to your computer and use it in GitHub Desktop.
Fichero /etc/knockd.conf para mi router/firewall basado en Linux
# Fichero /etc/knockd.conf
#
# El Port Knocking (llamar a la puerta) consiste en enviar (típicamente) tres paquetes a tu servidor
# (firewall) para que te abra un puerto concreto. Tenemos el puerto de SSH (22) cerrado (haciendo
# drops). Mandamos desde internet tres paquetes (SYN) con una cadencia determinada; el router/firewall
# se da por enterado (están llamando a la puerta) y te abre durante un rato (a la IP desde donde estás
# mandado esos paquetes) el puerto 22. Boom !!! ya puedes entrar !!!
#
# Este fichero es un ejemplo de configuración y está relacionado con este apunte:
# https://www.luispa.com/administración/2023/04/08/networking-avanzado.html
#
[options]
logfile = /var/log/knockd.log
[git]
# Ejemplo para un servidor GIT (basado en GitLab)
# Para llamar desde un cliente Linux ejecutaría:
# knock -4 -d 1000 -v mi-git-server.midominio.com 33872 21234 33523
#
# Inserto una nueva regla al principio de la cadena, abriendo los puertos 22,80 y 443
# hacia mi servidor interno git (192.168.1.123) durante 1h
#
sequence = 33872,21234,33523
seq_timeout = 10
tcpflags = syn
start_command = /sbin/iptables -t nat -I PREROUTING -i ppp0 -p tcp -m multiport --dports 22,80,443 -j DNAT --to-destination 192.168.1.123 && /sbin/iptables -I FORWARD -s %IP% -p tcp -m multiport --dports 22,80,443 -d 192.168.1.123 -j ACCEPT
cmd_timeout = 3600
stop_command = iptables -t nat -D PREROUTING -i ppp0 -p tcp -m multiport --dports 22,80,443 -j DNAT --to-destination 192.168.1.123 && /sbin/iptables -D FORWARD -s %IP% -p tcp -m multiport --dports 22,80,443 -d 192.168.1.123 -j ACCEPT
[hass]
# Ejemplo para un servidor Home Assistant (Ip1) y Grafana (Ip2) internos.
#
# Para llamar desde un iPhone donde tengo el cliente HASS me instalaría el
# App PortKnock y la configuraría para llamar a los puertos: 48734 74956 33533,
# además configuraría la Validación: puerto 28123 (puerto por el que escucha NPM)
#
# Inserto una nueva regla al principio de la cadena, abriendo el puerto 28123
# hacia mi servidor Nginx Proxy Manager (.124) y el puerto 23000 al mismo
# Nginx Proxy Manager (.124). Por ambos va a ir tráfico "https" y será NPM
# el que derive dicho tráfico a mis servidores internos HASS y Grafana respectivamente.
#
sequence = 48734,74956,33533
seq_timeout = 10
tcpflags = syn
start_command = /sbin/iptables -t nat -I PREROUTING -i ppp0 -p tcp -m multiport --dports 28123 -j DNAT --to-destination 192.168.1.124 && /sbin/iptables -I FORWARD -s %IP% -p tcp -m multiport --dports 28123 -d 192.168.1.124 -j ACCEPT && /sbin/iptables -t nat -I PREROUTING -i ppp0 -p tcp -m multiport --dports 23000 -j DNAT --to-destination 192.168.1.124 && /sbin/iptables -I FORWARD -s %IP% -p tcp -m multiport --dports 23000 -d 192.168.1.124 -j ACCEPT
cmd_timeout = 3600
stop_command = /sbin/iptables -t nat -D PREROUTING -i ppp0 -p tcp -m multiport --dports 28123 -j DNAT --to-destination 192.168.1.124 && /sbin/iptables -D FORWARD -s %IP% -p tcp -m multiport --dports 28123 -d 192.168.1.124 -j ACCEPT && /sbin/iptables -t nat -D PREROUTING -i ppp0 -p tcp -m multiport --dports 23000 -j DNAT --to-destination 192.168.1.124 && /sbin/iptables -D FORWARD -s %IP% -p tcp -m multiport --dports 23000 -d 192.168.1.124 -j ACCEPT
[ssh]
# Ejemplo para poder entrar por SSH a mi propio servidor firewall (a mi mismo)
# En este caso también abro el puerto 22 durante 1h
#
sequence = 12345,54321,33222
seq_timeout = 10
tcpflags = syn
start_command = /sbin/iptables -I INPUT -s %IP% -p tcp -m tcp -m multiport --dports 22 -j ACCEPT
cmd_timeout = 3600
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp -m tcp -m multiport --dports 22 -j ACCEPT
[openvpn]
# Ejemplo para poder entrar con Passepartout al servicio OpenVPN. Abro el puerto durante una hora
# solo a la IP desde donde me llaman. En este ejemplo asumo que he configurado tanto el servidor
# como el cliente para trabajar por el puerto udp 4444
#
sequence = 43123,44123,45123
seq_timeout = 10
tcpflags = syn
start_command = /sbin/iptables -I INPUT -s %IP% -p udp -m udp -m multiport --dports 4444 -j ACCEPT
cmd_timeout = 3600
stop_command = /sbin/iptables -D INPUT -s %IP% -p udp -m udp -m multiport --dports 4444 -j ACCEPT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment