User Tools

Site Tools


informatica:linux:iptables

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
informatica:linux:iptables [2012/05/09 08:23] – creado javiinformatica:linux:iptables [2015/04/13 20:19] (current) – external edit 127.0.0.1
Line 6: Line 6:
  
 http://wiki.legido.com/doku.php?id=informatica:linux:red:mapear_trafico_entre_interfaces http://wiki.legido.com/doku.php?id=informatica:linux:red:mapear_trafico_entre_interfaces
 +
 +
  
 ===== Escribir en log ===== ===== 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.+2 objetivos:
  
-1. Crear un archivo de log dedicado:+-Anyadirle una etiqueta a cada tipo de mensaje en funcion de la cadena que coincide, al objeto de facilitar posteriormente el analisis de los logs 
 +-Escribir (con rsyslog) en un log distinto a /var/log/messages
  
-  sudo vim /var/log/iptables.log+1. Ejemplo del script para crear reglas de iptables, lo grabamos como '/tmp/cortafuegos.sh':
  
-2. Modificar el archivo de configuración del demonio de log (syslog o rsyslog):+<code> 
 +#!/bin/bash
  
-  sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.bak+# Creamos variables 
 +IPTABLES=/sbin/iptables
  
-Y anyadir la siguiente linea:+# Borrado de reglas de iptables 
 +$IPTABLES -F INPUT 
 +$IPTABLES -F OUTPUT 
 +$IPTABLES -F FORWARD 
 +$IPTABLES -t filter -F 
 +$IPTABLES -t nat -F 
 +$IPTABLES -t mangle -F
  
-  ... +########################## LOG ###############################
-  kern.warning /var/log/iptables.log+
  
-3. Reiniciar el servicio y asegurarnos que arranca correctamente:+LOG_PREFIX="IPTABLES -" 
 + 
 +# Si las reglas no funcionan escribo una linea 
 +$IPTABLES -A FORWARD -j LOG --log-prefix "$LOG_PREFIX FILTER_FORWARD " --log-tcp-options --log-ip-options 
 +$IPTABLES -A INPUT -j LOG --log-prefix "$LOG_PREFIX INPUT " --log-tcp-options --log-ip-options 
 +$IPTABLES -t nat -A PREROUTING -j LOG --log-prefix "$LOG_PREFIX NAT_PREROUTING " --log-tcp-options --log-ip-options 
 +$IPTABLES -t nat -A POSTROUTING -j LOG --log-prefix "$LOG_PREFIX NAT_POSTROUTING " --log-tcp-options --log-ip-options 
 +$IPTABLES -t nat -A OUTPUT -j LOG --log-prefix "$LOG_PREFIX NAT_OUTPUT " --log-tcp-options --log-ip-options 
 +$IPTABLES -A OUTPUT -j LOG --log-prefix "$LOG_PREFIX OUTPUT " --log-tcp-options --log-ip-options 
 + 
 +########################## DROP ############################### 
 + 
 +# Cierro todo a cal y canto 
 +$IPTABLES -P INPUT DROP 
 +$IPTABLES -P FORWARD DROP 
 +</code> 
 + 
 +En este ejemplo el prefijo es "IPTABLES -". 
 + 
 +2. Damos permisos de ejecucion y lo ejecutamos: 
 + 
 +  chmod +x /tmp/cortafuegos.sh 
 +  sudo /tmp/cortafuegos.sh 
 + 
 +3. Crear el siguiente archivo: 
 + 
 +  sudo mkdir -p /etc/rsyslog.conf/iptables.conf 
 + 
 +Con el siguiente contenido: 
 + 
 +<code> 
 +:msg, contains, "IPTABLES -" -/var/log/iptables.log 
 +& ~ 
 +</code> 
 + 
 +4. Reiniciar el servicio y asegurarnos que arranca correctamente:
  
   sudo /etc/init.d/rsyslog restart   sudo /etc/init.d/rsyslog restart
   ps ax | grep syslog   ps ax | grep syslog
  
-4Crear un archivo que contenga las reglas del cortafuegos (iptables):+5Probamos a conectarnos al puerto TCP 666:
  
-  sudo mkdir /etc/iptables +  telnet localhost 666
-  sudo vim /etc/iptables/iptables.test.rules+
  
-Con el siguiente contenido:+6. En otor terminal, en el mismo servidor: 
 + 
 +  sudo tail -F /var/log/iptables.log  
 + 
 +Y veremos algo asi: 
 + 
 +  Oct 17 09:15:13 kvm kernel: [746890.975199] IPTABLES - OUTPUT IN= OUT=lo SRC=127.0.0.1 DST=127.0.0.1 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=666 DPT=55703 WINDOW=0 RES=0x00 ACK RST URGP=0  
 + 
 +7. (OPCIONAL) Rotamos logs:
  
 <code> <code>
-*filter +/etc/logrotate.d/iptables 
--A INPUT -p tcp --dport 666 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 4 + 
-COMMIT+/var/log/iptables.log 
 +
 + rotate 7 
 + daily 
 + missingok 
 + notifempty 
 + delaycompress 
 + compress 
 + postrotate 
 + invoke-rc.d rsyslog reload > /dev/null 
 + endscript 
 +}
 </code> </code>
  
-5. Cargar las reglas:+===== Ejemplo OpenVZ =====
  
-  iptables-restore < /etc/iptables/iptables.test.rules+<code> 
 +#!/bin/bash
  
-6Probar:+# 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"
  
-En el servidor:+INTERNET_HOSTS=" 
 +192.168.0.203 
 +"
  
-  sudo tail -F /var/log/iptables.log+# Interfaces 
 +EXTIF="vmbr0" 
 +INTIF="venet0"
  
-En el cliente:+# Verifica que los módulos del núcleo están bien 
 +$DEPMOD -a
  
-  telnet nombre.publico.servidor 666+# Carga manualmente el módulo iptables 
 +$MODPROBE ip_tables
  
-Deberiamos ver la siguiente linea en el servidor (mapear puertos en el router...):+#  Éste módulo se carga automáticamente cuando se habilita la  
 +# funcionalidad MASQ 
 +$MODPROBE ip_conntrack
  
-  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 +# Opcionalreenví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 "
 +</code>
 +
 +===== Mostrar numero de paquetes =====
 +
 +<code>
 +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/          udp dpt:53 
 +              0 ACCEPT     tcp  --  virbr1 *       0.0.0.0/           0.0.0.0/          tcp dpt:53 
 +            897 ACCEPT     udp  --  virbr1 *       0.0.0.0/           0.0.0.0/          udp dpt:67 
 +              0 ACCEPT     tcp  --  virbr1 *       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/           10.0.0.0/24         state RELATED,ESTABLISHED 
 +   92451  5243004 ACCEPT     all  --  virbr1 *       10.0.0.0/24          0.0.0.0/          
 +            897 ACCEPT     all  --  virbr1 virbr1  0.0.0.0/           0.0.0.0/          
 +            480 ACCEPT     tcp  --  eth0   virbr1  0.0.0.0/           10.0.0.3            tcp dpt:1723 
 +              0 ACCEPT     47   --  eth0         0.0.0.0/           10.0.0.3            
 +              0 LOG        all  --  *      *       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 
 +</code>
informatica/linux/iptables.1336551814.txt.gz · Last modified: 2015/04/13 20:19 (external edit)