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 "
Mostrar numero de paquetes
sudo iptables -L -n -v -x Chain INPUT (policy ACCEPT 384086 packets, 61462048 bytes) pkts bytes target prot opt in out source destination 398 23805 ACCEPT udp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 ACCEPT tcp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 3 897 ACCEPT udp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 0 0 ACCEPT tcp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 156432 229715525 ACCEPT all -- * virbr1 0.0.0.0/0 10.0.0.0/24 state RELATED,ESTABLISHED 92451 5243004 ACCEPT all -- virbr1 * 10.0.0.0/24 0.0.0.0/0 3 897 ACCEPT all -- virbr1 virbr1 0.0.0.0/0 0.0.0.0/0 8 480 ACCEPT tcp -- eth0 virbr1 0.0.0.0/0 10.0.0.3 tcp dpt:1723 0 0 ACCEPT 47 -- eth0 * 0.0.0.0/0 10.0.0.3 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix `FILTER_FORWARD ' Chain OUTPUT (policy ACCEPT 370021 packets, 87787030 bytes) pkts bytes target prot opt in out source destination