Paso 11: Configuración de Firewall
Si usted no desea que ese nivel de seguridad, también existe un script de firewall más sencillo que básicamente es "ajustar y olvidar".
Puede elegir entre firewall.advanced o firewall.simple y luego personalizar. Los créditos van a Guillaume Kaddouch
A - conjunto de reglas avanzado
Este script básicamente lo siguiente:
-Indicadores TCP válidos de entrada/salida bloques (incluso de flujos establecidos)
-Optimiza las consultas DNS (campo TOS del IP)
-Identifica el tráfico por tipo de flujo y luego emparejarlo contra un conjunto de reglas
-Añade aleatoriedad al proceso NAT
-Sólo permiten pocos puertos salientes estándar (http, https, ftp)
-Registros con precisión lo que se deja caer y evitar la inundación de registro
-Gotas entrantes paquetes con TTL baja (puede significar un ataque de caducidad ttl o un traceroute)
-Detectar y bloquear las conexiones salientes de malware
$ sudo touch /etc/firewall.advanced
$ sudo touch /etc/firewall.flows
u de $ sudo chmod + x /etc/firewall.*
La identificación de flujos es una lista de reglas dirigiendo el tráfico en la cadena de medida correspondiente (por ejemplo FORWARD_OUT, FORWARD_IN, LAN_IN, etc...). Esta lista de reglas, una vez depurado y validado, no se debe modificar luego. También, como utilizar algo de espacio en la secuencia de comandos y puede ser aburridos leer, hace las reglas de filtrado más difícil de leer si están en el mismo script. Es por ello que les propongo en un archivo separado, que acabo de llamar desde el script principal:
$ sudo vi /etc/firewall.flows
#! / bin/bash
# "Fecha de agosto de 2012
# "Autor: Guillaume Kaddouch
# "Versión: flujos 1,0
#######################
# FLUJO IDENTIFICACIÓN #
##############################################################################################
# NAT_OUT
iptables -t nat - A POSTROUTING -o $LAN -p tcp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype - pkt-tipo unicast -m addrtype! --dst-tipo LOCAL\
Estado de -m - Estado nuevo, establecida, relacionada con -j NAT_OUT
iptables -t nat - A POSTROUTING -o $LAN -p udp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype - pkt-tipo unicast -m addrtype! --dst-tipo LOCAL\
Estado de -m - Estado nuevo, establecida, relacionada con -j NAT_OUT
iptables -t nat - A POSTROUTING -o $LAN -p icmp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype - pkt-tipo unicast -m addrtype! --dst-tipo LOCAL\
Estado de -m - Estado nuevo, establecida, relacionada con -j NAT_OUT
# FORWARD_OUT
iptables - A hacia adelante -i $LAN -p tcp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype - pkt-tipo unicast -m addrtype! --src-tipo LOCAL\
Estado de -m - Estado nuevo, establecida, relacionada con -j FORWARD_OUT
iptables - A hacia adelante -i $LAN -p udp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype - pkt-tipo unicast -m addrtype! --src-tipo LOCAL\
Estado de -m - Estado nuevo, establecida, relacionada con -j FORWARD_OUT
iptables - A hacia adelante -i $LAN -p icmp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype - pkt-tipo unicast -m addrtype! --src-tipo LOCAL\
Estado de -m - Estado nuevo, establecida, relacionada con -j FORWARD_OUT
# FORWARD_IN
iptables - A hacia adelante -i $LAN -p tcp--ipv4 -m iprange \
! --src-range $DHCP_RANGE--dst-range $DHCP_RANGE -m pkttype - pkt-tipo unicast -m addrtype! --src-tipo LOCAL\
Estado -m--estado establecida, relacionada con -j FORWARD_IN
iptables - A hacia adelante -i $LAN -p udp--ipv4 -m iprange \
! --src-range $DHCP_RANGE--dst-range $DHCP_RANGE -m pkttype - pkt-tipo unicast -m addrtype! --src-tipo LOCAL\
Estado -m--estado establecida, relacionada con -j FORWARD_IN
iptables - A hacia adelante -i $LAN -p icmp--ipv4 -m iprange \
! --src-range $DHCP_RANGE--dst-range $DHCP_RANGE -m pkttype - pkt-tipo unicast -m addrtype! --src-tipo LOCAL\
Estado -m--estado establecida, relacionada con -j FORWARD_IN
# LAN_IN
iptables - A INPUT -i $LAN -p tcp--ipv4 -m iprange \
--src-range $DHCP_RANGE -d $RSS -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo LOCAL\
Estado de -m - Estado nuevo, establecida, relacionada con -j LAN_IN
iptables - A INPUT -i $LAN -p udp--ipv4 -m iprange \
--src-range $DHCP_RANGE -d $RSS -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo LOCAL\
Estado de -m - Estado nuevo, establecida, relacionada con -j LAN_IN
iptables - A INPUT -i $LAN -p icmp--ipv4 -m iprange \
--src-range $DHCP_RANGE -d $RSS -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo LOCAL\
Estado de -m - Estado nuevo, establecida, relacionada con -j LAN_IN
# LAN_BROADCAST
iptables - A INPUT -i $LAN -p tcp--ipv4 \
! -d $RSS -m pkttype - pkt-tipo broadcast -m addrtype--dst-tipo difusión
Estado -m! -Estado no válido -j LAN_BROADCAST
iptables - A INPUT -i $LAN -p udp--ipv4 \
! -d $RSS -m pkttype - pkt-tipo broadcast -m addrtype--dst-tipo difusión
Estado -m! -Estado no válido -j LAN_BROADCAST
iptables - A INPUT -i $LAN -p icmp--ipv4 \
! -d $RSS -m pkttype - pkt-tipo broadcast -m addrtype--dst-tipo difusión
Estado -m! -Estado no válido -j LAN_BROADCAST
# INTERNET_GATEWAY
iptables - A INPUT -i $LAN -p tcp--ipv4 \
! -s $LAN_SUBNET -d $RSS -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo LOCAL\
Estado -m--estado establecida, relacionada con -j INTERNET_GATEWAY
iptables - A INPUT -i $LAN -p udp--ipv4! \
-s $LAN_SUBNET -d $RSS -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo LOCAL\
Estado -m--estado establecida, relacionada con -j INTERNET_GATEWAY
iptables - A INPUT -i $LAN -p icmp--ipv4 \
! -s $LAN_SUBNET -d $RSS -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo LOCAL\
Estado -m--estado establecida, relacionada con -j INTERNET_GATEWAY
# GATEWAY_LAN
iptables - salida -o $LAN -p tcp--ipv4 \
-s $RSS -d $LAN_SUBNET -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo UNICAST\
Estado de -m - Estado nuevo, establecida, relacionada con -j GATEWAY_LAN
-Una salida de la iptables -o $LAN -p udp--ipv4 \
-s $RSS -d $LAN_SUBNET -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo UNICAST\
Estado de -m - Estado nuevo, establecida, relacionada con -j GATEWAY_LAN
-Una salida de la iptables -o $LAN -p icmp--ipv4 \
-s $RSS -d $LAN_SUBNET -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo UNICAST\
Estado de -m - Estado nuevo, establecida, relacionada con -j GATEWAY_LAN
# GATEWAY_BROADCAST
iptables - salida -o $LAN -p tcp--ipv4 \
-s $RSS -m pkttype - pkt-tipo broadcast -m addrtype--dst-tipo difusión
Estado de -m - Estado nuevo, establecida, relacionada con -j GATEWAY_BROADCAST
-Una salida de la iptables -o $LAN -p udp--ipv4 \
-s $RSS -m pkttype - pkt-tipo broadcast -m addrtype--dst-tipo difusión
Estado de -m - Estado nuevo, establecida, relacionada con -j GATEWAY_BROADCAST
-Una salida de la iptables -o $LAN -p icmp--ipv4 \
-s $RSS -m pkttype - pkt-tipo broadcast -m addrtype--dst-tipo difusión
Estado de -m - Estado nuevo, establecida, relacionada con -j GATEWAY_BROADCAST
# GATEWAY_INTERNET
iptables - salida -o $LAN -p tcp--ipv4 \
-s $RSS! -d $LAN_SUBNET -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo UNICAST\
Estado de -m - Estado nuevo, establecida, relacionada con -j GATEWAY_INTERNET
-Una salida de la iptables -o $LAN -p udp--ipv4 \
-s $RSS! -d $LAN_SUBNET -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo UNICAST\
Estado de -m - Estado nuevo, establecida, relacionada con -j GATEWAY_INTERNET
-Una salida de la iptables -o $LAN -p icmp--ipv4 \
-s $RSS! -d $LAN_SUBNET -m pkttype - pkt-tipo unicast -m addrtype--dst-tipo UNICAST\
Estado de -m - Estado nuevo, establecida, relacionada con -j GATEWAY_INTERNET
##############################################################################################
Ahora vamos a crear el guión filtrado de reglas hablado antes:
$ sudo vi /etc/firewall.advanced
#! / bin/bash
# "Fecha de agosto de 2012
# "Autor: Guillaume Kaddouch
# "URL: http://networkfilter.blogspot.com
# "Versión: avanzó 1,0
echo "Configuración de variables"
# VARIABLES PARA PERSONALIZAR PARA QUE COINCIDA CON TU RED
LAN = "eth0"
LAN_SUBNET="192.168.1.0/24"
DHCP_RANGE = "192.168.1.10-192.168.1.20"
DNS_SERVER1 = "8.8.8.8"
DNS_SERVER2 = "208.67.222.222"
RSS = "192.168.1.3"
MODEM_ROUTER = "192.168.1.1"
UNPRIV_PORTS = "1024:65535"
SSH = "15507"
NTP_SERVER = "65.55.21.22"
echo "las cadenas existentes de Flushing y reglas..."
# Reglas & FLUSHING cadenas
iptables -t filtro -F
iptables -t filtro -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
echo "Configuración de directivas predeterminadas"
# POR DEFECTO POLÍTICAS
iptables -P INPUT DROP
iptables -P salida gota
iptables -P FORWARD DROP
# BUCLE
iptables - A INPUT -i lo -j acepta
iptables - una salida -o lo -j ACCEPT
echo "Creando cadenas"
# CADENAS
iptables -N FORWARD_OUT
iptables -N FORWARD_IN
iptables -N LAN_IN
iptables -N LAN_BROADCAST
iptables -N GATEWAY_LAN
iptables -N GATEWAY_BROADCAST
iptables -N GATEWAY_INTERNET
iptables -N INTERNET_GATEWAY
iptables -t nat -N NAT_OUT
# LA CADENA DE CONTROL, REGISTRO Y OPTIMIZAR
iptables -N CHECK_TCP_FLAGS
iptables -N LOGDROP_TCP_FLAGS
iptables -N LOGDROP_MALWARE
iptables -N LOGDROP_BADPORT
iptables -t mangle -N FAST_DNS
echo "Carga de reglas"
#################################
# Protocolo de control y optimización #
##############################################################################################
iptables - A hacia adelante -i $LAN -p tcp--ipv4 -j CHECK_TCP_FLAGS
iptables - A INPUT -i $LAN -p tcp--ipv4 -j CHECK_TCP_FLAGS
iptables -t mangle - salida -o $LAN -p tcp--ipv4 -s $RSS -m pkttype - pkt-tipo unicast--dport dominio -m \
Estado: estado nuevo, establecida, relacionada con -j FAST_DNS
iptables -t mangle - una salida -o $LAN -p udp--ipv4 -s $RSS -m pkttype - pkt-tipo unicast--dport dominio -m \
Estado: estado nuevo, establecida, relacionada con -j FAST_DNS
##############################################################################################
###################
# CHECK_TCP_FLAGS #
##############################################################################################
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, FIN aleta -j LOGDROP_TCP_FLAGS
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, PSH PSH -j LOGDROP_TCP_FLAGS
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, URG URG -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags aleta, aleta de RST, RST -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags SYN, SYN de la aleta, aleta -j LOGDROP_TCP_FLAGS
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags SYN, RST SYN, RST -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags todo todo -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags todos ninguno -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-banderas todo FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags SYN todos, FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags SYN todos, ACK, RST, FIN, URG -j LOGDROP_TCP_FLAGS
iptables - un LOGDROP_TCP_FLAGS -m limit--limit 1/s - j LOG--log-tcp-options--log-prefix \
«[IPTABLES: INDICADORES TCP BAD]»
iptables - una LOGDROP_TCP_FLAGS -j DROP
##############################################################################################
############
# FAST_DNS #
##############################################################################################
iptables -t mangle - A FAST_DNS -p udp -d $DNS_SERVER1 -j TOS - set-tos minimizar retraso
iptables -t mangle - A FAST_DNS -p udp -d $DNS_SERVER2 -j TOS - set-tos minimizar retraso
iptables -t mangle - A FAST_DNS -p tcp -d $DNS_SERVER1 -j TOS - set-tos minimizar retraso
iptables -t mangle - A FAST_DNS -p tcp -d $DNS_SERVER2 -j TOS - set-tos minimizar retraso
##############################################################################################
# FLUJO IDENTIFICACIÓN #
fuente "/ etc/firewall.flows"
############
# NAT_OUT #
##############################################################################################
iptables -t nat - A NAT_OUT -j MASQUERADE--al azar
##############################################################################################
###############
# ADELANTE A #
##############################################################################################
# Potencial tráfico de Malware
# Si no, habría sido bloqueados por la directiva predeterminada
# Sin embargo, aprovechamos la oportunidad para guardar en una tabla de "bad_traffic"
# Esta tabla nos permite a los hosts de bloque LAN intentando acceder muchos puertos malware
# Así potencialmente infectados (y que requieren un análisis antivirus)
#
# Tan pronto como un host de LAN ha afectado a las reglas de 5 veces por debajo de 2mn, soltar todo avance hacia fuera desde ese host
iptables - un FORWARD_OUT -p tcp -m reciente--bad_traffic--rcheck--rttl--hitcount 5--segundos 120 -j el nombre \
LOGDROP_MALWARE
iptables - una FORWARD_OUT -p tcp--dport 139 - m reciente--nombre bad_traffic--set -j LOGDROP_BADPORT
iptables - una FORWARD_OUT -p tcp--dport 445 - m reciente--nombre bad_traffic--set -j LOGDROP_BADPORT
iptables - una FORWARD_OUT -p tcp--dport 135 - m reciente--nombre bad_traffic--set -j LOGDROP_BADPORT
iptables - una FORWARD_OUT -p tcp--dport 6667 - m reciente--nombre bad_traffic--set -j LOGDROP_BADPORT
iptables - una FORWARD_OUT -p tcp--dport 1433:1434 -m reciente--nombre bad_traffic--set -j LOGDROP_BADPORT
iptables - una FORWARD_OUT -p udp--dport 1433:1434 -m reciente--nombre bad_traffic--set -j LOGDROP_BADPORT
iptables - una LOGDROP_BADPORT -m limit--limit 1/s - j LOG--log-prefix "[IPTABLES: Puerto malo]"
iptables - una LOGDROP_BADPORT -j DROP
iptables - una LOGDROP_MALWARE -m limit--limit 1/s - j LOG--log-prefix "[IPTABLES: HOST infectado]"
iptables - una LOGDROP_MALWARE -j DROP
# Permitidos puertos
iptables - un FORWARD_OUT -p tcp--sport $UNPRIV_PORTS -m multiport--dports ftp, http, https, 8080 -j ACCEPT
# Permitir conexiones establecidas y relacionadas a otros puertos, necesarios para FTP por ejemplo
iptables - un FORWARD_OUT -p tcp--sport $UNPRIV_PORTS--dport $UNPRIV_PORTS m - estado - estado \
ESTABLECIDO, relacionado -j ACCEPT
# NTP solicitudes (modificar la variable al principio)
iptables - una FORWARD_OUT -p udp -d $NTP_SERVER--sport--dport de ntp ntp -j ACCEPT
# Echo request
iptables - una FORWARD_OUT -p icmp -m icmp--icmp-type echo-request - j ACCEPT
# Rechazar el tráfico que no queremos, muchas opciones de abajo (crear las variables correspondientes)
# iptables - A FORWARD_OUT -p tcp--dport $port_of_a_host_to_block -j rechazar - rechazar-con \
# icmp-host-prohibido
# iptables - A FORWARD_OUT -d $subnet_to_block -j rechazar - rechazar-con icmp-red-prohibido
# Bloquear y todo lo demás registrar
iptables - una FORWARD_OUT -m limit--limit 1/s - j LOG--log-prefix "[IPTABLES: FORWARD_OUT]"
iptables - una FORWARD_OUT -j DROP
##############################################################################################
##############
# FORWARD_IN #
##############################################################################################
# Permitir el desvío de los flujos establecidos o relacionados con entrante, con un TTL > 10
iptables - A FORWARD_IN -m ttl--ttl-gt 10 -j ACCEPT
# Bloquear y todo lo demás registrar
iptables - una FORWARD_IN -m limit--limit 1/s - j LOG--log-prefix "[IPTABLES: FORWARD_IN]"
iptables - una FORWARD_IN -j DROP
##############################################################################################
##########
# LAN_IN #
##############################################################################################
# Permitir difusiones DHCP desde el interior
iptables - A LAN_IN -i $LAN -p udp--sport 67:68--dport 67:68 -j ACCEPT
# Permite consultas DNS de la LAN del sistema de seguridad de frambuesa,
iptables - A LAN_IN -i $LAN -p udp--sport $UNPRIV_PORTS--dport 53 -j ACCEPT
iptables - A LAN_IN -i $LAN -p tcp--sport $UNPRIV_PORTS--dport 53 -j ACCEPT
Conexiones de SSH #
# (puede Agregar un control para el sistema operativo remoto)
iptables - A LAN_IN -i $LAN -p tcp--sport $UNPRIV_PORTS--dport $SSH -j ACCEPT
# LAN ICMP (tipo 3 = inalcanzable [destination|port|protocol])
iptables - una LAN_IN -p icmp -m icmp--icmp-type echo-request - j ACCEPT
iptables - una LAN_IN -p icmp -m icmp--icmp-type 3 -j ACCEPT
# Bloquear y todo lo demás registrar
iptables - una LAN_IN -m limit--limit 1/s - j LOG--log-prefix "[IPTABLES: LAN_IN]"
iptables - una LAN_IN -j DROP
##############################################################################################
##################
# LAN_BROADCAST #
##############################################################################################
# Permitir difusiones DHCP desde el interior
iptables - A LAN_BROADCAST -i $LAN -p udp--sport 67:68--dport 67:68 -j ACCEPT
# Bloquear todo lo demás (no te molestes en sesión tráfico de difusión)
iptables - una LAN_BROADCAST -j DROP
##############################################################################################
###########################
# INTERNET_GATEWAY #
##############################################################################################
# Permitir conexiones ya establecidas de RSS a Internet para volver a RSS
iptables - A INTERNET_GATEWAY -p todos -j ACCEPT
##############################################################################################
########################
# CADENA GATEWAY_LAN #
##############################################################################################
# Bloquear posibles ICMP redirect enviado a nosotros (podría ser causado por un sysctl mal configurado)
iptables - una GATEWAY_LAN -p icmp -m icmp--icmp-type redirect -m limit--límite 1/s - j LOG--log-prefix \
«[IPTABLES: ICMP REDIRECT]»
iptables - una GATEWAY_LAN -p icmp -m icmp--icmp-type redirect -j DROP
# Permitir conexiones LAN establecida a frambuesa para volver a la LAN
iptables - un GATEWAY_LAN -p tcp -m estado--estado establecida, relacionada con -j ACCEPT
iptables - un GATEWAY_LAN -p udp -m estado--estado establecida, relacionada con -j ACCEPT
iptables - un GATEWAY_LAN -p icmp -m estado--estado establecida, relacionada con -j ACCEPT
# Permite DHCP relacionados con el tráfico
iptables - una GATEWAY_LAN -p udp--sport 67:68--dport 67:68 -j ACCEPT
# Permitir Raspi hacer ping a la LAN
iptables - un GATEWAY_LAN -p icmp -m icmp--icmp-type echo-request - m estado - estado nuevo -j ACCEPT
# Bloquear y todo lo demás registrar
iptables - una GATEWAY_LAN -m limit--limit 1/s - j LOG--log-prefix "[IPTABLES: GATEWAY_LAN]"
iptables - una GATEWAY_LAN -j DROP
##############################################################################################
#####################
# GATEWAY_BROADCAST #
##############################################################################################
# Permitir broadcast DHCP respuestas de RSS
iptables - una GATEWAY_BROADCAST -p udp--sport 67:68--dport 67:68 -j ACCEPT
# Bloquear y todo lo demás registrar
iptables - una GATEWAY_BROADCAST -m limit--limit 1/s - j LOG--log-prefix "[IPTABLES: GATEWAY_BROADCAST]"
iptables - una GATEWAY_BROADCAST -j DROP
##############################################################################################
####################
# GATEWAY_INTERNET #
##############################################################################################
# Permitir conexiones nuevas de frambuesa (necesario para las actualizaciones, instalación de paquetes, etc...)
# No haga funcionar actualiza la noche, por lo tanto no hay necesidad de la regla se activa 24/24
iptables - una GATEWAY_INTERNET -p tcp -m multiport--dports ftp, http, https -m tiempo--timestart 9:00--timestop \
23:00 -j ACCEPT
# Résolutions DNS
iptables - una GATEWAY_INTERNET -p udp--sport $UNPRIV_PORTS -d $DNS_SERVER1--dport dominio -j ACCEPT
iptables - una GATEWAY_INTERNET -p udp--sport $UNPRIV_PORTS -d $DNS_SERVER2--dport dominio -j ACCEPT
iptables - GATEWAY_INTERNET -p tcp--sport $UNPRIV_PORTS -d $DNS_SERVER1--dport dominio -j ACCEPT
iptables - GATEWAY_INTERNET -p tcp--sport $UNPRIV_PORTS -d $DNS_SERVER2--dport dominio -j ACCEPT
# Ocurre al volver a cargar las reglas del firewall
iptables - una GATEWAY_INTERNET -p icmp -m icmp--icmp-type port-unreachable - d $DNS_SERVER1 -j DROP
iptables - una GATEWAY_INTERNET -p icmp -m icmp--icmp-type port-unreachable - d $DNS_SERVER2 -j DROP
# Permitir NTP
iptables - una GATEWAY_INTERNET -p udp--dport ntp -j ACCEPT
# Bloquear y todo lo demás registrar
iptables - una GATEWAY_INTERNET -m limit--limit 1/s - j LOG--log-prefix "[IPTABLES: GATEWAY_INTERNET]"
iptables - una GATEWAY_INTERNET -j DROP
##############################################################################################
## REGLAS FINAL ##
rules_number ='egrep '\-j' /etc/firewall.advanced | WC -l '
flows_number ='egrep '\-j' /etc/firewall.flows | WC -l '
total_rules = $((rules_number + flows_number))
echo ""
echo "$total_rules reglas cargadas."
echo ""
B - reglas básica
Este script básicamente lo siguiente:
-Indicadores TCP válidos de entrada/salida bloques (incluso de flujos establecidos)
-Optimiza las consultas DNS (campo TOS del IP)
-Añade aleatoriedad al proceso NAT
-Gotas entrantes paquetes con TTL baja (puede significar un ataque de caducidad ttl o un traceroute)
Este conjunto de reglas permite todo desde su LAN a enviarse en Internet, así teóricamente no requieren modificar luego. Si desea agregar una capa adicional de seguridad de red para tu abuela o los padres por ejemplo, pero que usted no puede esperar modificar iptables rules(!), creo que este conjunto de reglas es más adecuado.
$ sudo vi /etc/firewall.simple
#! / bin/bash
# Fecha de agosto de 2012
# Autor: Guillaume Kaddouch
# URL: http://networkfilter.blogspot.com
# Versión: 1.0 estándar
echo "Configuración de variables"
# VARIABLES PARA PERSONALIZAR PARA QUE COINCIDA CON TU RED
LAN = "eth0"
LAN_SUBNET="192.168.1.0/24"
DHCP_RANGE = "192.168.1.10-192.168.1.20"
DNS_SERVER1 = "8.8.8.8"
DNS_SERVER2 = "208.67.222.222"
RSS = "192.168.1.3"
MODEM_ROUTER = "192.168.1.1"
UNPRIV_PORTS = "1024:65535"
SSH = "15507"
NTP_SERVER = "65.55.21.22"
echo "las cadenas existentes de Flushing y reglas..."
# Reglas & FLUSHING cadenas
iptables -t filtro -F
iptables -t filtro -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
echo "Configuración de directivas predeterminadas"
# POR DEFECTO POLÍTICAS
iptables -P INPUT DROP
iptables -P salida gota
iptables -P FORWARD DROP
# BUCLE
iptables - A INPUT -i lo -j acepta
iptables - una salida -o lo -j ACCEPT
echo "Creando cadenas"
# LA CADENA DE CONTROL, REGISTRO Y OPTIMIZAR
iptables -N CHECK_TCP_FLAGS
iptables -N LOGDROP_TCP_FLAGS
iptables -t mangle -N FAST_DNS
echo "Carga de reglas"
#################################
# Protocolo de control y optimización #
##############################################################################################
iptables - A hacia adelante -i $LAN -p tcp--ipv4 -j CHECK_TCP_FLAGS
iptables - A INPUT -i $LAN -p tcp--ipv4 -j CHECK_TCP_FLAGS
iptables -t mangle - salida -o $LAN -p tcp--dominio de la--dport ipv4 -s $RSS -m pkttype - pkt-tipo unicast \
Estado de -m - Estado nuevo, establecida, relacionada con -j FAST_DNS
iptables -t mangle - una salida -o $LAN -p udp--dominio de la--dport ipv4 -s $RSS -m pkttype - pkt-tipo unicast \
Estado de -m - Estado nuevo, establecida, relacionada con -j FAST_DNS
##############################################################################################
###################
# CHECK_TCP_FLAGS #
##############################################################################################
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, FIN aleta -j LOGDROP_TCP_FLAGS
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, PSH PSH -j LOGDROP_TCP_FLAGS
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, URG URG -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags aleta, aleta de RST, RST -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags SYN, SYN de la aleta, aleta -j LOGDROP_TCP_FLAGS
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags SYN, RST SYN, RST -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags todo todo -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags todos ninguno -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-banderas todo FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags SYN todos, FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - una CHECK_TCP_FLAGS -p tcp--tcp-flags SYN todos, ACK, RST, FIN, URG -j LOGDROP_TCP_FLAGS
iptables - un LOGDROP_TCP_FLAGS -m limit--limit 1/s - j LOG--log-tcp-options--log-prefix \
«[IPTABLES: INDICADORES TCP BAD]»
iptables - una LOGDROP_TCP_FLAGS -j DROP
##############################################################################################
############
# FAST_DNS #
##############################################################################################
iptables -t mangle - A FAST_DNS -p udp -d $DNS_SERVER1 -j TOS - set-tos minimizar retraso
iptables -t mangle - A FAST_DNS -p udp -d $DNS_SERVER2 -j TOS - set-tos minimizar retraso
iptables -t mangle - A FAST_DNS -p tcp -d $DNS_SERVER1 -j TOS - set-tos minimizar retraso
iptables -t mangle - A FAST_DNS -p tcp -d $DNS_SERVER2 -j TOS - set-tos minimizar retraso
##############################################################################################
#######
# NAT #
##############################################################################################
iptables -t nat - A POSTROUTING -o $LAN! Estado de -m -d $LAN_SUBNET - estado nuevo, establecidos, relacionados con -j MASQUERADE\
-al azar
##############################################################################################
###########
# # ADELANTE
##############################################################################################
# Permitir salida adelante de cualquier conexión
iptables - A FORWARD tcp -p -i $LAN -s $LAN_SUBNET! Estado de -m -d $LAN_SUBNET - estado nuevo, establecido, relacionado con \
-j ACCEPT
iptables - A FORWARD -p udp -i $LAN -s $LAN_SUBNET! Estado de -m -d $LAN_SUBNET - estado nuevo, establecido, relacionado con \
-j ACCEPT
iptables - A FORWARD -p icmp -i $LAN -s $LAN_SUBNET! Estado de -m -d $LAN_SUBNET - estado nuevo, establecido, relacionado con \
-j ACCEPT
# Permitir entrantes hacia adelante de las conexiones establecidas o relacionadas con TTL mayor que 10
iptables - A FORWARD tcp -p -i $LAN! Estado de -m -d $LAN_SUBNET -s $LAN_SUBNET--estado establecida, relacionada con -m \
TTL--ttl-gt 10 -j ACCEPT
iptables - A FORWARD -p udp -i $LAN! Estado de -m -d $LAN_SUBNET -s $LAN_SUBNET--estado establecida, relacionada con -m \
TTL--ttl-gt 10 -j ACCEPT
iptables - A FORWARD -p icmp -i $LAN! Estado de -m -d $LAN_SUBNET -s $LAN_SUBNET--estado establecida, relacionada con -m \
TTL--ttl-gt 10 -j ACCEPT
##############################################################################################
#########
# ENTRADA DE #
##############################################################################################
# Permitir difusiones DHCP desde el interior
iptables - una entrada -i $LAN -p udp -s $LAN_SUBNET--deporte 67:68--dport 67:68 -j ACCEPT
# Permitir consultas de DNS de la LAN a la frambuesa
iptables - una entrada -i $LAN -p udp -s $LAN_SUBNET - sport $UNPRIV_PORTS -d $RSS--dport 53 -j ACCEPT
iptables - una entrada -i $LAN -p tcp -s $LAN_SUBNET - sport $UNPRIV_PORTS -d $RSS--dport 53 -j ACCEPT
Conexiones de SSH #
iptables - una entrada -i $LAN -p tcp -s $LAN_SUBNET - sport $UNPRIV_PORTS -d $RSS--dport $SSH -j ACCEPT
# LAN ICMP (tipo 3 = inalcanzable [destination|port|protocol])
iptables - una entrada -p icmp -m icmp--icmp-type echo-request - s $LAN_SUBNET -d $RSS -j ACCEPT
iptables - una entrada -p icmp -m icmp--icmp-type 3 -s $LAN_SUBNET -d $RSS -j ACCEPT
# Permitir conexiones ya establecidas de frambuesa a Internet para volver a itl
iptables - A INPUT -i $LAN! Estado de m - de -s $LAN_SUBNET -d $RSS -p tcp--estado establecida, relacionada con -j ACCEPT
iptables - A INPUT -i $LAN! Estado de m - de -s $LAN_SUBNET -d $RSS -p udp--estado establecida, relacionada con -j ACCEPT
iptables - A INPUT -i $LAN! Estado de m - de -s $LAN_SUBNET -d $RSS -p icmp--estado establecida, relacionada con -j ACCEPT
##############################################################################################
###########
# SALIDA #
##############################################################################################
# Bloquear posibles ICMP redirect enviado a nosotros (podría ser causado por un sysctl mal configurado)
iptables - una salida -o $LAN -p icmp -m icmp--icmp-type redirect -m limit--límite 1/s - j LOG--log-prefix \
«[IPTABLES: ICMP REDIRECT]»
iptables - una salida -o $LAN -p icmp -m icmp--icmp-type redirect -j DROP
# Permitir conexiones LAN establecida a Raspi para volver a la LAN
iptables - un salida -o $LAN -p tcp -s $RSS -d $LAN_SUBNET -m estado--estado establecido, relacionado -j ACCEPT
iptables - un salida -o $LAN -p udp -s $RSS -d $LAN_SUBNET -m estado--estado establecido, relacionado -j ACCEPT
iptables - un salida -o $LAN -p icmp -s $RSS -d $LAN_SUBNET -m estado--estado establecido, relacionado -j ACCEPT
# Permite DHCP relacionados con el tráfico
iptables - una salida -o $LAN -p udp -s $RSS -d $LAN_SUBNET--deporte 67:68--dport 67:68 -j ACCEPT
# Permitir frambuesa hacer ping a la LAN
iptables - un salida -o $LAN -p icmp -m icmp--icmp-type echo-request - s $RSS -d $LAN_SUBNET -m estado \
-Estado nuevo -j ACCEPT
# Permitir conexiones nuevas de frambuesa (necesario para las actualizaciones, instalación de paquetes, etc...)
iptables - una había salida -o $LAN -p tcp -s $RSS! Estado de -m -d $LAN_SUBNET - estado nuevo, establecido, relacionado con \
-j ACCEPT
iptables - una había salida -o $LAN -p udp -s $RSS! Estado de -m -d $LAN_SUBNET - estado nuevo, establecido, relacionado con \
-j ACCEPT
iptables - una había salida -o $LAN -p icmp -s $RSS! Estado de -m -d $LAN_SUBNET - estado nuevo, establecido, relacionado con \
-j ACCEPT
# DNS pide
iptables - una salida -o $LAN -p udp -s $RSS - deporte $UNPRIV_PORTS -d $DNS_SERVER1--dport dominio -j ACCEPT
iptables - una salida -o $LAN -p udp -s $RSS - deporte $UNPRIV_PORTS -d $DNS_SERVER2--dport dominio -j ACCEPT
iptables - una salida -o $LAN -p tcp -s $RSS - deporte $UNPRIV_PORTS -d $DNS_SERVER1--dport dominio -j ACCEPT
iptables - una salida -o $LAN -p tcp -s $RSS - deporte $UNPRIV_PORTS -d $DNS_SERVER2--dport dominio -j ACCEPT
# Permitir NTP
iptables - una salida -o $LAN -p udp--dport ntp -s $RSS -j ACCEPT
##############################################################################################
iptables - A INPUT -m limit--limit 1/s - j LOG--log-prefix "[IPTABLES: gota de entrada]"
iptables - una entrada -j DROP
iptables - una salida -m limit--límite 1/s - j LOG--log-prefix "[IPTABLES: salida gota]"
iptables - una salida -j DROP
iptables - A FORWARD -m límite--límite 1/s - j LOG--log-prefix "[IPTABLES: caída hacia adelante]"
iptables - A FORWARD -j DROP
## REGLAS FINAL ##
rules_number ='egrep '\-j' /etc/firewall.simple | WC -l '
echo ""
echo "$rules_number reglas cargadas."
echo ""
Estos dos conjuntos de reglas son solo ejemplos, si tienes uno listo para usar su propio.
Para cargar reglas de iptables en el arranque, una forma es hacerlo como sigue:
$ sudo vi /etc/rc.local
echo "Carga reglas de iptables"
/ etc/firewall. VERSIÓN >> / dev/nul
Sustituir la versión "avanzada" o "simple", sin comillas, dependiendo de la secuencia de comandos que utiliza.
Si desea mostrar alertas en tiempo real, escriba lo siguiente:
$ sudo la cola -f /var/log/iptables.log