¿Cómo puedo bloquear el puerto 6379 para tráfico externo en ubuntu?

8

Quiero bloquear el acceso al puerto 6379 en mi servidor, pero todavía quiero conectarme a él internamente. La aplicación redis-server se ejecuta en ese puerto y quiero conectarme solo localmente (127.0.0.1). ¿Cómo puedo hacer esto?

Steve Rodrigue
fuente

Respuestas:

11

Para hacer esto, debe asegurarse de que sus reglas de IPTables estén configuradas correctamente. Ubuntu generalmente deja sus servidores abiertos de forma predeterminada, por lo que todavía no recomiendo su uso como servidores a menos que ya sepa muy bien cómo hacerlo correctamente.

Me imagino que te iptables -L -nvves así, ¿sí?

# iptables -L -nv
Chain INPUT (policy ACCEPT 4M packets, 9M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 8M packets, 4M bytes)
 pkts bytes target     prot opt in     out     source               destination

Está vacío y abierto de par en par. El HowTo de Ubuntu IPTables probablemente ayudará bastante con esto. ( https://help.ubuntu.com/community/IptablesHowTo )

Recomiendo algo como esto, que permite SSH en cualquier interfaz y tcp 6379 cualquier interfaz que no sea la que no desea:

*filter
:INPUT DROP [92:16679]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [203:36556]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -i lo -p udp -m udp --dport 6379 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

Luego guardaría este archivo en /etc/iptables.rules.

Obviamente, se debe agregar cualquier otro puerto que desee abrir específicamente.

Nota: He agregado las líneas específicas 6379 para mayor claridad. La ACEPTACIÓN inferior justo antes de que el COMPROMISO realmente permita esto porque todas las conexiones de bucle invertido deben estar permitidas en un sistema Linux para una operación adecuada.

También querrá poner las reglas en su archivo / etc / network / interfaces, para asegurarse de que se agreguen cuando aparezca la interfaz y no más tarde en el proceso de arranque. Se recomienda agregar algo como esto:

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules

Editar: para cargar esta configuración inicialmente, debe ejecutar el comando iptables-restore mencionado anteriormente:

iptables-restore < /etc/iptables.rules
Magallanes
fuente
Supongo que esto abriría el puerto 6379 a toda la web, ¿verdad? ¿Qué debo hacer para que esto se abra solo para 127.0.0.1?
Steve Rodrigue
No, porque la regla predeterminada es DROP. Si no tiene una regla ACEPTAR explícita, está bloqueada por el DROP predeterminado al lado de: INPUT en la parte superior.
Magellan
Personalmente, creo que la regla ACEPTAR predeterminada es simplemente criminal en una implementación de "servidor". Pero no es sorprendente, ya que Ubuntu es ante todo una distribución de escritorio.
Magellan
Ok, acabo de hacer exactamente lo que pediste, pero parece que todavía puedo conectarme al puerto 6379 desde el exterior. ¿Debo reiniciar el servidor o algo así?
Steve Rodrigue
1
Sí, pero realmente no me importan mucho los contadores y esto funciona para mí. Siéntase libre de editar la respuesta para que se ajuste a un proceso más riguroso.
Magellan
3

Bueno, sugeriría utilizar el "firewall sin complicaciones" (ufw), que también es recomendado por canonical. Leer y escribir iptables es demasiado complicado para tareas de bloqueo de puertos ocasionales.

Ver aquí: https://wiki.ubuntu.com/UncomplicatedFirewall

mojovski
fuente
1
Las versiones anteriores de UFW no tenían la capacidad de aplicar reglas a los puertos seleccionados, era todo o nada. Y los administradores de sistemas profesionales deberían acostumbrarse a comprender qué hacen sus configuraciones de iptables y cómo funcionan las cadenas.
Magellan
2

Algo como

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 6379 -j DROP

Deberia trabajar.

Kedare
fuente
Esto me da este error: iptables v1.4.4: opción desconocida `--dport '
Steve Rodrigue
¿Puedes volver a intentar con el nuevo comando? Agregué la parte --protocol y -i (adaptarse a su interfaz), ahora debería funcionar.
Kedare
El problema que tengo con esta sugerencia es que no se guarda en todos los reinicios a menos que se ejecuten otros comandos necesarios y se supone que solo hay una interfaz que no es de bucle invertido.
Magellan
Recomiendo usar el operador de negación: -i! lo
Magellan
Adrian: ¿quieres decir que si reinicio el servidor, esa modificación ya no estaría activa?
Steve Rodrigue
0

Hay nuevas versiones de Redis puede utilizar bind 127.0.0.1en redis.confhacerlo directamente sin necesidad de configuración adicional iptables

ver este articulo

itaintme
fuente