informatica:linux:iptables
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
informatica:linux:iptables [2012/05/09 08:23] – creado javi | informatica:linux:iptables [2015/04/13 20:19] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 6: | Line 6: | ||
http:// | http:// | ||
+ | |||
+ | |||
===== 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 | + | -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/ | + | 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): | + | < |
+ | #!/bin/bash | ||
- | sudo cp /etc/rsyslog.conf / | + | # 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 | ||
- | ... | + | ########################## |
- | kern.warning / | + | |
- | 3. Reiniciar el servicio y asegurarnos que arranca correctamente: | + | LOG_PREFIX=" |
+ | |||
+ | # Si las reglas no funcionan escribo una linea | ||
+ | $IPTABLES -A FORWARD -j LOG --log-prefix " | ||
+ | $IPTABLES -A INPUT -j LOG --log-prefix " | ||
+ | $IPTABLES -t nat -A PREROUTING -j LOG --log-prefix " | ||
+ | $IPTABLES -t nat -A POSTROUTING -j LOG --log-prefix " | ||
+ | $IPTABLES -t nat -A OUTPUT -j LOG --log-prefix " | ||
+ | $IPTABLES -A OUTPUT -j LOG --log-prefix " | ||
+ | |||
+ | ########################## | ||
+ | |||
+ | # Cierro todo a cal y canto | ||
+ | $IPTABLES -P INPUT DROP | ||
+ | $IPTABLES -P FORWARD DROP | ||
+ | </ | ||
+ | |||
+ | En este ejemplo el prefijo es " | ||
+ | |||
+ | 2. Damos permisos de ejecucion y lo ejecutamos: | ||
+ | |||
+ | chmod +x / | ||
+ | sudo / | ||
+ | |||
+ | 3. Crear el siguiente archivo: | ||
+ | |||
+ | sudo mkdir -p / | ||
+ | |||
+ | Con el siguiente contenido: | ||
+ | |||
+ | < | ||
+ | :msg, contains, " | ||
+ | & ~ | ||
+ | </ | ||
+ | |||
+ | 4. Reiniciar el servicio y asegurarnos que arranca correctamente: | ||
sudo / | sudo / | ||
ps ax | grep syslog | ps ax | grep syslog | ||
- | 4. Crear un archivo que contenga las reglas del cortafuegos (iptables): | + | 5. Probamos a conectarnos al puerto TCP 666: |
- | | + | |
- | sudo vim / | + | |
- | Con el siguiente contenido: | + | 6. En otor terminal, en el mismo servidor: |
+ | |||
+ | sudo tail -F / | ||
+ | |||
+ | 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: | ||
< | < | ||
- | *filter | + | / |
- | -A INPUT -p tcp --dport 666 -m limit --limit 5/min -j LOG --log-prefix "iptables | + | |
- | COMMIT | + | /var/log/iptables.log |
+ | { | ||
+ | rotate 7 | ||
+ | daily | ||
+ | missingok | ||
+ | notifempty | ||
+ | delaycompress | ||
+ | compress | ||
+ | postrotate | ||
+ | invoke-rc.d rsyslog reload > /dev/null | ||
+ | endscript | ||
+ | } | ||
</ | </ | ||
- | 5. Cargar las reglas: | + | ===== Ejemplo OpenVZ ===== |
- | iptables-restore | + | <code> |
+ | #!/bin/bash | ||
- | 6. Probar: | + | # Creamos variables |
+ | IPTABLES=/ | ||
+ | DEPMOD=/ | ||
+ | MODPROBE=/ | ||
+ | ROUTER=" | ||
+ | VM=" | ||
+ | PROXMOX=" | ||
- | En el servidor: | + | INTERNET_HOSTS=" |
+ | 192.168.0.203 | ||
+ | " | ||
- | sudo tail -F / | + | # Interfaces |
+ | EXTIF=" | ||
+ | INTIF=" | ||
- | 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 |
+ | # funcionalidad MASQ | ||
+ | $MODPROBE ip_conntrack | ||
- | May 9 10:11:32 jj kernel: iptables denied: IN=vmbr0 OUT= MAC=00: | + | # 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 " | ||
+ | |||
+ | # Soporte para ip dinámica | ||
+ | echo " | ||
+ | |||
+ | # 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 | ||
+ | |||
+ | ############################ | ||
+ | |||
+ | # Abrir acceso hacia fuera | ||
+ | for host in $INTERNET_HOSTS | ||
+ | do | ||
+ | if [[ " | ||
+ | then | ||
+ | | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | # Permitir acceso de las VM's afuera en respuesta a conexiones externas | ||
+ | $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -s " | ||
+ | |||
+ | # 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: | ||
+ | $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 21 -d " | ||
+ | |||
+ | # VPN | ||
+ | $IPTABLES -t nat -I PREROUTING -p tcp --dport 1723 -j DNAT --to-destination 192.168.0.203: | ||
+ | $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 1723 -d " | ||
+ | |||
+ | # 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, | ||
+ | $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 " | ||
+ | #$IPTABLES -A INPUT -j LOG --log-prefix "INPUT " | ||
+ | #$IPTABLES -A OUTPUT -j LOG --log-prefix " | ||
+ | </ | ||
+ | |||
+ | ===== Mostrar numero de paquetes ===== | ||
+ | |||
+ | < | ||
+ | sudo iptables -L -n -v -x | ||
+ | |||
+ | Chain INPUT (policy ACCEPT 384086 packets, 61462048 bytes) | ||
+ | pkts bytes target | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) | ||
+ | pkts bytes target | ||
+ | 156432 229715525 ACCEPT | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT 370021 packets, 87787030 bytes) | ||
+ | pkts bytes target | ||
+ | </ |
informatica/linux/iptables.1336551814.txt.gz · Last modified: 2015/04/13 20:19 (external edit)