He configurado el sshd de mi servidor para escuchar en un puerto 42 no estándar.
Sin embargo, en el trabajo estoy detrás de un firewall/proxy, que sólo permite conexiones salientes a los puertos 21, 22, 80 y 443. En consecuencia, no puedo enviar ssh a mi servidor desde el trabajo, lo cual es malo. No quiero devolver sshd al puerto 22.
La idea es esta: en mi servidor, redireccionar localmente el puerto 22 al puerto 42siLa IP de origen coincide con la IP externa de la red de mi trabajo. Para mayor claridad, supongamos que la IP de mi servidor es 169.1.1.1 (en eth1) y la IP externa de mi trabajo es 169.250.250.250. Para todas las IP diferentes a 169.250.250.250, mi servidor debería responder con una "conexión rechazada" esperada, como lo hace con un puerto que no escucha.
Soy muy nuevo en iptables. Revisé brevemente el extenso manual de iptables y estas preguntas relacionadas/relevantes:
- Pregunta de iptables: reenviar el puerto x a un puerto ssh de una máquina diferente en la red
- ¿Cómo puedo reenviar con iptables?
Sin embargo, esas preguntas se refieren a escenarios más complicados de varios hosts, y no me queda claro qué tablas y cadenas debo usar para el reenvío de puertos local y si debo tener 2 reglas (para los paquetes de "pregunta" y "respuesta"). ), o sólo 1 regla para paquetes de "preguntas".
Hasta ahora sólo he habilitado el reenvío mediante sysctl. Comenzaré a probar soluciones mañana y apreciaré sugerencias o tal vez ejemplos de casos específicos para implementar mi escenario simple.
¿Es correcto el borrador de solución a continuación?
iptables -A INPUT [-m state] [-i eth1] --source 169.250.250.250 -p tcp
--destination 169.1.1.1:42 --dport 22 --state NEW,ESTABLISHED,RELATED
-j ACCEPT
¿Debería usar la mangle
mesa en lugar de filter
? ¿Y/o FORWARD
cadena en lugar de INPUT
?
Respuesta1
Para reenviar/redireccionar cosas debes editar la tabla NAT.
Una regla como esta probablemente sea la más cercana a lo que necesita.
/sbin/iptables --table nat --append PREROUTING --protocol tcp \
--source 169.250.250.250 --dport 22 \
--jump REDIRECT --to-ports 42
Sería mucho más fácil y probablemente mejor dejar SSH en el puerto estándar y protegerlo adecuadamente. Usar un puerto alternativo sólo ralentizaría a un atacante motivado durante un par de segundos. Configure un sistema de prevención de intrusiones como denyhosts/fail2ban y desactive la autenticación basada en contraseña. O considere limitar la velocidad de las conexiones ssh entrantes.
Ver:
Respuesta2
Usaría Shorewall para administrar ip-tables. Configura un firewall básico decente y hacer lo que quieras es simple. Agregue una regla a /etc/shorewall/rules como:
Red DNAT: 169.250.250.250 loc: 169.250.250.250 tcp 42 22
Al igual que los demás, no estoy seguro de por qué ejecuta sshd en otro puerto. Si se trata de un puerto de Internet, es posible que desee observar el golpe del puerto para mantenerlo cerrado a menos que acceda a otro puerto primero. Shorewall maneja esto de manera simple.