Con las iptables del kernel completamente vacías ( iptables -F
), esto hará lo que le pidas:
# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
Esto dice que todas las direcciones LAN pueden comunicarse con el puerto TCP 22, que el host local recibe la misma consideración (sí, 127. * no solo 127.0.0.1), y los paquetes de cualquier otra dirección que no coincida con esas dos primeras reglas se dejan caer sin ceremonias El cubo de bits . Puede usar en REJECT
lugar de DROP
si desea un rechazo activo (TCP RST) en lugar de convertir el puerto 22 de TCP en un agujero negro para los paquetes.
Si su LAN no usa el bloque 192.168.0. *, Naturalmente necesitará cambiar la IP y la máscara en la primera línea para que coincida con el esquema de IP de su LAN.
Es posible que estos comandos no hagan lo que desea si su firewall ya tiene algunas reglas configuradas. (Diga iptables -L
como root para averiguarlo). Lo que sucede con frecuencia es que una de las reglas existentes toma los paquetes que está tratando de filtrar, por lo que agregar nuevas reglas no tiene efecto. Si bien puede usar en -I
lugar de -A
con el iptables
comando para empalmar nuevas reglas en el medio de una cadena en lugar de agregarlas, generalmente es mejor averiguar cómo se llenan las cadenas en el arranque del sistema y modificar ese proceso para que sus nuevas reglas siempre se instalen en El orden correcto.
RHEL 7+
En los sistemas de tipo RHEL recientes, la mejor manera de hacerlo es usar firewall-cmd
su equivalente de GUI. Esto le dice al firewalld
demonio del sistema operativo lo que desea, que es lo que realmente llena y manipula lo que ve a través de iptables -L
.
RHEL 6 y anteriores
En los sistemas de tipo RHEL más antiguos, la forma más fácil de modificar las cadenas de firewall cuando se ordenan es editar /etc/sysconfig/iptables
. Las herramientas de cortafuegos GUI y TUI del sistema operativo son bastante simplistas, por lo que una vez que comience a agregar reglas más complejas como esta, es mejor volver a los viejos archivos de configuración. Tenga cuidado, una vez que comience a hacer esto, corre el riesgo de perder sus cambios si alguna vez usa las herramientas de firewall del sistema operativo para modificar la configuración, ya que es posible que no sepa cómo lidiar con reglas artesanales como estas.
Agregue algo como esto a ese archivo:
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -j DROP
Donde lo agregas es la parte difícil. Si encuentra una línea en ese archivo hablando --dport 22
, simplemente reemplácela con las tres líneas anteriores. De lo contrario, probablemente debería ir antes de la primera línea existente que termina en -j ACCEPT
. En general, necesitará familiarizarse con la forma en que funciona iptables , momento en el cual será obvio el punto de inserción correcto.
Guarde ese archivo, luego diga service iptables restart
que vuelva a cargar las reglas del firewall. ¡Asegúrate de hacer esto mientras estás conectado a la consola, en caso de que aprietes las ediciones! No desea bloquear su máquina mientras está conectado a través de SSH.
La similitud con los comandos anteriores no es una coincidencia. La mayor parte de este archivo consta de argumentos para el iptables
comando. Las diferencias con respecto a lo anterior son que el iptables
comando se descarta y el INPUT
nombre de la cadena se convierte en la cadena especial específica de RHEL RH-Firewall-1-INPUT
. (Si desea examinar el archivo con más detalle, verá anteriormente en el archivo donde esencialmente han cambiado el nombre de la INPUT
cadena. ¿Por qué? No podría decirlo).
La forma preferida de hacerlo es con
iptables
. Parece que otros lo han cubierto adecuadamente, por lo que, solo para completar, señalaré un método de control de acceso alternativo que está disponible para muchos demonios en la mayoría de las distribuciones de Linux. Ese método de control de acceso es proporcionado por lalibwrap
biblioteca.Para verificar si su demonio favorito tiene
libwrap
soporte, intente ejecutar lo siguiente:Si obtiene un resultado no vacío, como
entonces definitivamente eres bueno para ir.
Es casi seguro que su
sshd
demonio tienelibwrap
soporte, por lo que debe consultar los archivos/etc/hosts.allow
y/etc/hosts.deny
para el control de acceso. Suponiendo que su red LAN local es192.168.100.0/24
, puede denegar el acceso asshd
todos los clientes, excepto a aquellos en el host local o en la LAN local, poniendo lo siguiente en su/etc/hosts.deny
archivo:Tenga en cuenta que este método en realidad no abre ni cierra puertos, per se. Simplemente le dice a los demonios que usan este método de control de acceso si aceptar o rechazar los intentos de conexión de clientes que coinciden con los patrones dados.
Para obtener detalles completos, consulte las páginas de manual, comenzando con
hosts_access(5)
.fuente
Si tiene su propio firewall basado en Linux, será mejor que lo configure
iptables
, como lo describen otros aquí. Si no es así y el firewall es su enrutador, lo más probable es que la configuración predeterminada ya impida el acceso desde el exterior, a menos que habilite explícitamente el reenvío de puertos (como describí recientemente en respuesta a esta pregunta ).Para una seguridad adicional por encima de eso, puede usar una subred separada para las conexiones en la LAN. Para hacerlo, agregue una segunda dirección IP para cada computadora que se usaría solo dentro de la LAN y no por el enrutador. Digamos que toda la LAN ahora usa
192.168.0.xxx
direcciones y el enrutador (puerta de enlace, firewall)192.168.0.1
. Agregue una segunda dirección para cada computadora, por ejemplo:A continuación, edite la
sshd
configuración para usar solo esta dirección (de modo que no permita que se conecten conexiones192.168.0.xxx
): edite/etc/ssh/sshd_config
y modifiqueListenAddress
la de su nueva subred (192.168.5.1
en el ejemplo anterior). ¡Eso es! Si no configura la puerta de enlace para enrutar la comunicación de esa subred, debe estar separada del exterior.fuente