tables another all http redirect port iptables

http - all - iptables redirect port to another ip



iptables redirige 80 a 8080 pero bloquea el acceso público a 8080 (2)

Manejé esto de una manera ligeramente diferente. Reenvié 443 a 3000 (como arriba) pero también reenvié 3000 a 443. Luego permito el tráfico en 3000 pero lo bloqueo en 443. Cuando se filtre el tráfico 443, solo debe ser originalmente desde el puerto 3000.

Estoy usando ufw por lo que las reglas de filtro se ingresaron usando esa herramienta. /etc/ufw/before.rules reglas nat en /etc/ufw/before.rules .

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3000 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3000 -j REDIRECT --to-ports 443

Tengo algunas reglas de iptables que redirigen las solicitudes del puerto 80 a nuestro servidor de aplicaciones (GlassFish) en el puerto 8080 (y también los puertos SSL, pero los he dejado de lado por simplicidad).

Si bien lo que tenemos funciona bien (y personalmente no tengo ningún problema con él), el puerto 8080 también está abierto al mundo exterior si alguien desea especificarlo en la URL. Se ha ordenado que el puerto 8080 esté cerrado para el acceso desde el mundo exterior y que solo 80 esté abierto.

No deseo cambiar la escucha en el servidor de aplicaciones (ya que para usar el puerto 80, parece que esto necesita permisos elevados para el usuario que ejecuta el servidor de aplicaciones) y la escucha en el puerto 8080 necesita conocer la IP de origen del paquete como la la aplicación audita las solicitudes a la aplicación (es decir, no podemos cambiar la dirección IP de origen a una local).

La actual configuración de iptables está abajo. ¿Alguien sabe si hay una manera de bloquear 8080 de la Internet pública mientras se mantiene la IP de origen en los paquetes redirigidos desde el puerto 80?

Muchas gracias de antemano.

iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP # allow establishment of connections initialised by my outgoing packets iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # accept anything on localhost iptables -A INPUT -i lo -j ACCEPT ################################################################ #individual ports tcp ################################################################ iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j ACCEPT #drop everything else iptables -A INPUT -j DROP ################################################################ #Redirection Rules ################################################################ # redirection rules (allowing forwarding from localhost) iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080 # redirection http iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080


Una forma que he encontrado para lograr esto es usar el objetivo MARK en la cadena PREROUTING de la tabla mangle.

Agregue una regla para etiquetar los paquetes que desea bloquear:

iptables -t mangle -A PREROUTING -p tcp --dport 8080 -j MARK --set-mark 1

Luego, antes de permitir el puerto 8080, agregue esto a los paquetes marcados con DROP:

iptables -A INPUT -m mark --mark 1 -j DROP