User Tools

Site Tools


informatica:linux:iptables

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
informatica:linux:iptables [2012/05/09 09:06] javiinformatica:linux:iptables [2012/10/17 07:21] javi
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>
  
-Creo que no hace falta '--log-level 4', se tiene que probar+===== Ejemplo OpenVZ =====
  
-5. Cargar las reglas:+<code> 
 +#!/bin/bash
  
-  iptables-restore < /etc/iptables/iptables.test.rules+# 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"
  
-6Probar:+INTERNET_HOSTS=" 
 +192.168.0.203 
 +"
  
-En el servidor:+# Interfaces 
 +EXTIF="vmbr0" 
 +INTIF="venet0"
  
-  sudo tail -F /var/log/iptables.log+# Verifica que los módulos del núcleo están bien 
 +$DEPMOD -a
  
-En el cliente:+# Carga manualmente el módulo iptables 
 +$MODPROBE ip_tables
  
-  telnet nombre.publico.servidor 666+#  Éste módulo se carga automáticamente cuando se habilita la  
 +# funcionalidad MASQ 
 +$MODPROBE ip_conntrack
  
-Deberiamos ver la siguiente linea en el servidor (mapear puertos en el router...):+# Opcionalreenvío de tráfico ftp 
 +$MODPROBE ip_conntrack_ftp
  
-  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 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.txt · Last modified: 2015/04/13 20:19 by 127.0.0.1