This is an old revision of the document!
Table of Contents
iptables
cortafuegos firewall rule regla network red NAT
Redirigir paquetes entre 2 interfaces
Escribir en log
Vamos a anyadir una entrada en un archivo por cada regla que se aplique, típicamente para registrar cada vez que se bloquea un determinado acceso.
1. Crear un archivo de log dedicado:
sudo vim /var/log/iptables.log
2. Modificar el archivo de configuración del demonio de log (syslog o rsyslog):
sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.bak
Y anyadir la siguiente linea:
... kern.warning /var/log/iptables.log
3. Reiniciar el servicio y asegurarnos que arranca correctamente:
sudo /etc/init.d/rsyslog restart ps ax | grep syslog
4. Crear un archivo que contenga las reglas del cortafuegos (iptables):
sudo mkdir /etc/iptables sudo vim /etc/iptables/iptables.test.rules
Con el siguiente contenido:
*filter -A INPUT -p tcp --dport 666 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 4 COMMIT
Creo que no hace falta '–log-level 4', se tiene que probar
5. Cargar las reglas:
iptables-restore < /etc/iptables/iptables.test.rules
6. Probar:
En el servidor:
sudo tail -F /var/log/iptables.log
En el cliente:
telnet nombre.publico.servidor 666
Deberiamos ver la siguiente linea en el servidor (mapear puertos en el router…):
May 9 10:11:32 jj kernel: iptables denied: IN=vmbr0 OUT= MAC=00:22:64:b1:c5:0a:64:68:0c:7e:f9:0d:08:00 SRC=IP_PUBLICA_CLIENTE DST=192.168.1.200 LEN=60 TOS=0x00 PREC=0x00 TTL=53 ID=31566 DF PROTO=TCP SPT=35538 DPT=666 WINDOW=14600 RES=0x00 SYN URGP=0
Ejemplo OpenVZ
#!/bin/bash
# Creamos variables
IPTABLES=/sbin/iptables
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe
ROUTER="192.168.1.1"
VM="192.168.0.0/24"
PROXMOX="192.168.1.200"
INTERNET_HOSTS="
192.168.0.203
"
# Interfaces
EXTIF="vmbr0"
INTIF="venet0"
# Verifica que los módulos del núcleo están bien
$DEPMOD -a
# Carga manualmente el módulo iptables
$MODPROBE ip_tables
# Éste módulo se carga automáticamente cuando se habilita la
# funcionalidad MASQ
$MODPROBE ip_conntrack
# Opcional: reenvío de tráfico ftp
$MODPROBE ip_conntrack_ftp
# Opcional: reenvío de tráfico irc
$MODPROBE ip_conntrack_irc
# Éste módulo se carga automáticamente cuando se habilita la
# funcionalidad MASQ
$MODPROBE iptable_nat
# Opcional: soporte non-PASV FTP.
$MODPROBE ip_nat_ftp
#CRÍTICO: habilitar redirección IPv4, deshabilitado por defecto
echo "1" > /proc/sys/net/ipv4/ip_forward
# Soporte para ip dinámica
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# Borrado de reglas de iptables
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
############################ Variable #############################
# Abrir acceso hacia fuera
for host in $INTERNET_HOSTS
do
if [[ "$host" != "#"* ]]
then
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -s "$host" -j ACCEPT
fi
done
# Permitir acceso de las VM's afuera en respuesta a conexiones externas
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -s "$VM" -m state --state ESTABLISHED,RELATED -j ACCEPT
# Permitir DNS lookups
# TODO: creo que jugando con NAT NO deberia ser necesario estos lookups
$IPTABLES -A FORWARD -p udp --dport 53 -s $VM -d $ROUTER -j ACCEPT
# FTP
$IPTABLES -t nat -I PREROUTING -p tcp --dport 8021 -j DNAT --to-destination 192.168.0.203:21
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 21 -d "192.168.0.203" -j ACCEPT
# VPN
$IPTABLES -t nat -I PREROUTING -p tcp --dport 1723 -j DNAT --to-destination 192.168.0.203:1723
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 1723 -d "192.168.0.203" -j ACCEPT
# Casca acceso a VM desde Proxmox
#iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.0.203
# Permitir la redirección desde una interfaz a la otra solo de determidas conexiones
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF
# Habilitar NAT masquerade en la interfaz externa
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
# Si las reglas no funcionan escribo una linea
$IPTABLES -A FORWARD -j LOG --log-prefix "FORWARD "
#$IPTABLES -A INPUT -j LOG --log-prefix "INPUT "
#$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT "
