Redes en Linux: Configuración Avanzada, Firewall y VPN
La gestión de redes en un entorno Linux es una de las habilidades más demandadas para cualquier SysAdmin que aspire a mantener infraestructuras seguras, escalables y de alto rendimiento. Más allá de la configuración básica de interfaces, el verdadero dominio reside en la implementación de políticas de firewall robustas y en el establecimiento de túneles VPN que garanticen la integridad y privacidad de los datos. Este artículo explora en profundidad la configuración avanzada de redes Linux, el control de tráfico con iptables y nftables, y la implementación de soluciones VPN modernas.
Configuración Avanzada de Redes Linux
El ecosistema de redes en Linux ofrece un control granular que va desde la asignación de direcciones IP hasta el enrutamiento dinámico y la gestión de namespaces. Un SysAdmin debe dominar herramientas como ip (parte de iproute2) para sustituir a las obsoletas ifconfig y route.
Interfaces Virtuales y Bridges
Una técnica avanzada es la creación de interfaces virtuales como VLANs (802.1Q) y bridges. Los bridges son esenciales para entornos de virtualización (KVM, LXC) o contenedores Docker.
Para crear un bridge persistente en Debian/Ubuntu, se modifica /etc/network/interfaces:
auto br0
iface br0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
En sistemas con systemd-networkd, la configuración es más declarativa:
# /etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge
# /etc/systemd/network/br0.network
[Match]
Name=br0
[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
Políticas de Enrutamiento Avanzadas (Policy Routing)
Linux permite tener múltiples tablas de enrutamiento. Esto es útil para balancear tráfico entre dos ISP o para forzar que cierto tráfico salga por una interfaz específica.
Se añaden reglas con ip rule:
# Añadir una regla para tráfico marcado con fwmark 1
ip rule add from all fwmark 1 lookup 100 priority 1000
# Añadir ruta por defecto en la tabla 100
ip route add default via 10.0.0.1 dev eth1 table 100
Luego, con iptables/nftables se marca el tráfico:
iptables -t mangle -A PREROUTING -s 192.168.2.0/24 -j MARK --set-mark 1
[TIP] Utiliza ip route show table all para visualizar todas las tablas de enrutamiento activas.
Firewall en Linux: De iptables a nftables
El firewall es la primera línea de defensa. Históricamente, iptables ha sido el estándar, pero nftables es su reemplazo moderno, ofreciendo mejor rendimiento, sintaxis más clara y atomicidad en las reglas.
iptables: El Clásico
Aunque en desuso en muchas distribuciones, iptables sigue siendo omnipresente en scripts legacy y documentación. Su estructura se basa en tablas (filter, nat, mangle, raw) y cadenas (INPUT, OUTPUT, FORWARD).
Ejemplo de reglas básicas para un servidor web:
# Políticas por defecto restrictivas
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Permitir tráfico loopback
iptables -A INPUT -i lo -j ACCEPT
# Permitir conexiones establecidas/relacionadas
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Permitir SSH y HTTP/HTTPS
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Protección contra escaneos y ataques básicos
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
[WARNING] iptables no es atómico: al ejecutar scripts, pueden quedar estados inconsistentes. nftables resuelve esto.
nftables: El Futuro
nftables unifica todo en una sola sintaxis y elimina la necesidad de múltiples herramientas (iptables, ip6tables, arptables, ebtables). Su configuración se escribe en archivos de reglas, típicamente en /etc/nftables.conf.
Ejemplo equivalente al anterior con nftables:
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# Loopback
iif "lo" accept
# Estado
ct state established,related accept
# Servicios
tcp dport {ssh, http, https} accept
# Protección
tcp flags & (fin|syn|rst|psh|ack|urg) == 0 drop
tcp flags & (fin|syn|rst|psh|ack|urg) == fin|syn|rst|psh|ack|urg drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
}
Para aplicar cambios de forma atómica:
nft -f /etc/nftables.conf
[INFO] nftables soporta sets y maps que permiten actualizar listas de IPs sin recargar todo el firewall. Ideal para listas de bloqueo dinámicas.
Ejemplo Avanzado: Mitigación de DDoS con nftables
table inet ddos {
set blacklist {
type ipv4_addr
flags timeout
timeout 5m
}
chain input {
type filter hook input priority -10; policy accept;
# Bloquear IPs en blacklist
ip saddr @blacklist drop
# Rate limit de SYN
tcp flags syn limit rate 20/second burst 50 accept
tcp flags syn counter drop
# Protección contra fragmentación
ip frag-off & 0x1fff != 0 drop
}
}
VPN: Conectividad Segura en Linux
Las VPNs permiten extender redes privadas sobre infraestructuras públicas. Linux soporta múltiples protocolos, siendo WireGuard el más moderno, seguido de OpenVPN (OpenSSL) e IPsec (strongSwan/libreswan).
WireGuard: Sencillez y Rendimiento
WireGuard es minimalista, criptográficamente sólido y se integra directamente en el kernel Linux desde la versión 5.6. Su configuración es trivial.
Configuración de servidor (wg0.conf):
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <clave_privada_servidor>
[Peer]
PublicKey = <clave_publica_cliente>
AllowedIPs = 10.0.0.2/32
Configuración de cliente (wg0.conf):
[Interface]
PrivateKey = <clave_privada_cliente>
Address = 10.0.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <clave_publica_servidor>
Endpoint = <IP_publica_servidor>:51820
AllowedIPs = 0.0.0.0/0 # Redirige todo el tráfico
PersistentKeepalive = 25
Comandos básicos:
# Iniciar interfaz
wg-quick up wg0
# Ver estado
wg show
# Recargar configuración
wg syncconf wg0 <(wg-quick strip wg0)
[TIP] WireGuard no tiene autenticación de usuarios integrada; cada par se identifica por su clave pública. Es ideal para conexiones site-to-site o para equipos pequeños.
OpenVPN: Flexibilidad y Control
OpenVPN es más pesado pero ofrece mayor flexibilidad en autenticación (certificados, usuario/contraseña, LDAP). Su configuración típica usa un servidor y múltiples clientes.
Servidor (server.conf):
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
Cliente (client.ovpn):
client
dev tun
proto udp
remote <IP_servidor> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
cipher AES-256-CBC
verb 3
IPsec con strongSwan
IPsec es el estándar para interoperabilidad con otros sistemas (Cisco, Windows). strongSwan es la implementación más completa para Linux.
Configuración básica de sitio a sitio (ipsec.conf):
conn site-to-site
left=10.0.1.1
leftsubnet=192.168.1.0/24
right=10.0.2.1
rightsubnet=192.168.2.0/24
authby=secret
auto=start
keyexchange=ikev2
ike=aes256-sha256-modp2048
esp=aes256-sha256-modp2048
[WARNING] IPsec con IKEv2 es complejo de depurar. Usa ipsec statusall y revisa logs en /var/log/daemon.log.
Integración de Firewall y VPN
Un SysAdmin debe asegurarse de que el tráfico VPN pase correctamente por el firewall. Con nftables, se añaden reglas para permitir el tráfico de la interfaz VPN (ej. wg0 o tun0).
table inet filter {
chain forward {
type filter hook forward priority 0; policy drop;
# Permitir forward entre VPN y LAN
iifname "wg0" oifname "eth0" accept
iifname "eth0" oifname "wg0" ct state established,related accept
}
chain input {
# Permitir tráfico VPN entrante
iifname "wg0" accept
udp dport 51820 accept
}
}
Además, se debe habilitar el reenvío de IP y el NAT si la VPN da acceso a Internet:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# NAT con nftables
table ip nat {
chain postrouting {
type nat hook postrouting priority 100;
oifname "eth0" masquerade
}
}
Monitoreo y Depuración
Ninguna configuración es completa sin herramientas de monitoreo:
- tcpdump: Captura de paquetes en tiempo real.
- nft monitor: Muestra cambios en las reglas nftables.
- mtr: Combina traceroute y ping para diagnóstico de rutas.
- ss: Sucesor de netstat, muestra sockets y estadísticas.
Ejemplo para ver conexiones activas en la VPN:
ss -tunap | grep -E 'wg0|51820'
Conclusión
Dominar las redes en Linux, desde la configuración de bridges y policy routing hasta la implementación de firewalls con nftables y VPNs con WireGuard, es una habilidad que diferencia a un SysAdmin promedio de uno experto. La tendencia es clara: nftables reemplazará por completo a iptables, y WireGuard se convertirá en la VPN por defecto en la mayoría de distribuciones. Sin embargo, el conocimiento de las herramientas legacy sigue siendo vital para mantener sistemas heredados.
La clave está en la automatización: usa herramientas como Ansible o Terraform para gestionar configuraciones de red y firewall como código, garantizando consistencia y auditabilidad en entornos de producción.
