elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Comunicaciones
| |-+  Redes
| | |-+  [AYUDA] Mi primer firewall iptables
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA] Mi primer firewall iptables  (Leído 1,863 veces)
danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
[AYUDA] Mi primer firewall iptables
« en: 6 Abril 2016, 21:07 pm »

Hola a todos los que me leen. Llevo el dia entero leyendo un muy buen tutorial sobre iptables, que es cada cosa y como configurar cada elemento dentro del mismo. Al final me decidi a crear el mio propio apoyandome claro está en ese tutorial ya que no me lo aprendi todo de memoria. Cuando finalicé, lo sustitui por el que tengo (otro script en iptables que hizo un amigo y esta genial) y no funciona bien. Lo hice por funciones para poder darle las opciones start, stop, restart y open. El supuestamente trabaja bien, pero si le doy start, todas las conexiones dan time out. Si lo pongo en open si trabaja pero a nadie la gusta tener un firewall "ABIERTO". A continuacion les adjunto el codigo a ver si alguien me ayuda por favor.

Código:
#! /bin/bash

# /etc/init.d/firewall
#
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $network
# Required-Stop:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Firewall configuration
### END INIT INFO
 
#LOCAL SERVERS
CORREO=192.168.21.3 # CORREO
DNS=192.168.21.2 # DNS
ADMIN=192.168.21.5 # Informatico
FIREWALL=192.168.21.1 # Firewall (esta pc)
WIFI=192.168.21.7 # PC Virtual de Pruebas

LAN=192.168.21.0/24
 
# INTERFACES
LANIF=eth1
WANIF=eth0
 
# DIRECCIONES IP
WANIP2=xxx.xxx.xxx.xxx
WANIP3=xxx.xxx.xxx.xxx
 
ANY=0.0.0.0/0

#Variable para los comentarios
com="-m comment --comment"

refrescar_reglas()
{
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
}

#ESTABLECE POLITICA POR DEFECTO COMO PERMISIVA, LO QUE NO SE DENIEGUE

EXPLICITAMENTE SE DEJA PASAR
politica_accept()
{
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
}

#ESTABLECE POLITICA POR DEFECTO COMO CERRADA, LO QUE NO SE PERMITA EXPLICITAMENTE

SE DENIEGA
politica_descartar()
{
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
}

conexion_establecida()
{
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

}

localhost()
{
iptables -A INPUT -i lo -j ACCEPT -m comment --comment "Trafico Localhost IN"
iptables -A INPUT -i $LANIF -p tcp --dport 3128 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT -m comment --comment "Trafico Localhost OUT"
}

ssh()
{
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j

ACCEPT $com "SSH DESDE LAN"
}

ping_icmp()
{
iptables -A INPUT -i eth1 -p icmp -j ACCEPT
}

#NATEOS
##################################################################################

########################################################################
route()
{
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s $CORREO -o $WANIF -j SNAT --to-source $WANIP2
iptables -t nat -A POSTROUTING -s $DNS -o $WANIF -j SNAT --to-source $WANIP2
iptables -t nat -A POSTROUTING -s $WIFI -o $WANIF -j SNAT --to-source $WANIP2
iptables -t nat -A POSTROUTING -s $ADMIN -o $WANIF -j SNAT --to-source $WANIP2
}
#PORT FORWARDING
port_forwarding()
{
iptables -t nat -A PREROUTING -d $WANIP2 -p tcp -m multiport --dports 25,587 -m

state --state NEW,RELATED,ESTABLISHED -j DNAT --to-destination $CORREO
}
#FORWARDING
forwarding()
{
#Admin
iptables -A FORWARD -s $ADMIN -j ACCEPT
iptables -A FORWARD -d $ADMIN -j ACCEPT

#DNS
iptables -A FORWARD -s $DNS -p tcp -m multiport --dports 53,953 -j ACCEPT
iptables -A FORWARD -d $DNS -p tcp -m multiport --dports 53,953 -j ACCEPT
iptables -A FORWARD -s $DNS -p udp -m multiport --dports 53,953 -j ACCEPT
iptables -A FORWARD -d $DNS -p udp -m multiport --dports 53,953 -j ACCEPT
iptables -A FORWARD -s $DNS -p icmp -j ACCEPT
iptables -A FORWARD -d $DNS -p icmp -j ACCEPT


#SMTP,DNS,WEBMAIL IN AND OUT
iptables -A FORWARD -d $CORREO -j ACCEPT
iptables -A FORWARD -s $CORREO -j ACCEPT

#WIFI
iptables -A FORWARD -s $WIFI -j ACCEPT
}

##################################################################################

########################################################################

ancho_banda()
{
# HACEMOS LIMPIEZA
# BORRAMOS TODAS LAS REGLAS ANTERIORES
tc qdisc del dev eth0 root
tc qdisc del dev eth1 root

#CLASE QUE REPRESENTA LA SALIDA DE PAQUETES, A 64Kbit (ESTO ES PARA EL CORREO)
tc qdisc add dev eth0 root handle 1:0 htb default 99
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 128Kbit ceil 128Kbit
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 64Kbit ceil 70Kbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 10: sfq perturb 10

#CLASE QUE REPRESENTA LA ENTRADA DE PAQUETES, A 64Kbit (ESTO ES PARA EL CORREO)
tc qdisc add dev eth1 root handle 2:0 htb default 99
tc class add dev eth1 parent 2:0 classid 2:1 htb rate 128Kbit ceil 128Kbit
tc class add dev eth1 parent 2:1 classid 2:11 htb rate 64Kbit ceil 70Kbit prio 2
tc qdisc add dev eth1 parent 2:11 handle 20: sfq perturb 10

#EL TRAFICO ENTRANTE SERA DE LA CLASE 2 Y LA SALIDA DE LA CLASE 1
iptables -t mangle -I POSTROUTING -o eth0 -p tcp -s $CORREO -j CLASSIFY --set-

class 1:11
iptables -t mangle -I POSTROUTING -o eth0 -p tcp -d 10.0.0.2 -j CLASSIFY --set-

class 2:11
}

flags()
{
#NO SE ACEPTAN PAQUETES CON flags DE URGENTE, FINALIZADO NI EMPUJE
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP

#LOS QUE NO TIENEN flags QUE NO ENTREN
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

#LOS PAQUETES DE UNA NUEVA CONEXION DEBEN SER SYN
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

#PAQUETES INCOMPLETOS TAMPOCO QUEREMOS
iptables -A INPUT -f -j DROP

# LAS CONEXIONES QUE NO PERTENEZCAN AL SISTEMA SE BOTAN
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
}

dns()
{
iptables -A OUTPUT -o $WANIF -s $WANIP2 -p udp --dport 53 -m state --state

NEW,RELATED,ESTABLISHED -j ACCEPT -m comment --comment "CONSULTAS DNS DESDE

GATEWAY"
}

ftp()
{
iptables -A OUTPUT -o $WANIF -m multiport -p tcp --dports 20:21,1024:65535 -m

state --state NEW,RELATED,ESTABLISHED -j ACCEPT
}

case "$1" in
start)
refrescar_reglas
flags
politica_descartar
conexion_establecida
ancho_banda
dns
ssh
ping_icmp
ftp
route
forwarding
port_forwarding
echo "FIREWALL ACTIVO"
;;
open)
refrescar_reglas
politica_accept
route
forwarding
echo "MODO ENRUTADOR Y TRADUCCION IP ¡ABIERTO!"
;;
stop)
refrescar_reglas
politica_accept
route
forwarding
port_forwarding
echo "FIREWALL DETENIDO!!! CUIDADO"
;;
restart)
echo "REINICIANDO"
$0 stop
$0 start
;;
*)
echo "Usar Start|Stop|Open|restart"
esac

exit 0

Trate de tenerlo lo mas comentado posible para que se entienda (mas por mi que por otra cosa, para no perderme).


En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
andavid


Desconectado Desconectado

Mensajes: 1.845


Lo que no me mata, me fortalece.


Ver Perfil WWW
Re: [AYUDA] Mi primer firewall iptables
« Respuesta #1 en: 6 Abril 2016, 23:53 pm »

Me parece que esto tiene mas pinta de ir en el subforo de LINUX que aca.


En línea


Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: [AYUDA] Mi primer firewall iptables
« Respuesta #2 en: 7 Abril 2016, 00:13 am »

si no recuerdo mal con "iptables -F" ya borras todo, no hace falta hacerlo con el INPUT OUTPUT etc,

Código:
"#LOS PAQUETES DE UNA NUEVA CONEXION DEBEN SER SYN
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP"
Según vi hace tiempo no es recomendable,
Citar
"You require NEW packets to have SYN. This will break if a TCP connection is continued after the respective state in iptables already timed out. Not sure what the default timeouts are, but some netfilter guy warned about it."
fuente: http://security.stackexchange.com/questions/4603/tips-for-a-secure-iptables-config-to-defend-from-attacks-client-side

Código:
echo 1 > /proc/sys/net/ipv4/ip_forward
Eso lo puedes meter en /etc/sysctl.conf, net.ipv4.ip_forward = 1

Para no tener que esperar el timeout igual podrías cambiar de DROP a REJECT para mandar un paquete avisando que no se puede conectar, luego puedes comentar todas las funciones menos una luego comentas todas menos 2 hasta que descubras que regla en concreto es la que causa el problema.

Como recomendación, intenta mantenerlo lo más simple y sencillo posible,
« Última modificación: 7 Abril 2016, 00:28 am por Stakewinner00 » En línea

danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
Re: [AYUDA] Mi primer firewall iptables
« Respuesta #3 en: 7 Abril 2016, 18:04 pm »

Gracias, eso es lo que haré. Ir probando una por una. Lo que pensaba que tenia algun error de sintaxis o algo asi. Y gracias por la ayuda con la flags, no habia leido sobre esa recomendacion. Gracias por todo. Ya comentaré sobre la solucion y cual era el problema.
En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
Re: [AYUDA] Mi primer firewall iptables
« Respuesta #4 en: 11 Abril 2016, 15:44 pm »

Stakewinner00 Al parecer el problema estaba en la flags:
Código:
"#LOS PAQUETES DE UNA NUEVA CONEXION DEBEN SER SYN
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP"
porque la comenté y al momento funcionó todo lo demas. Gracias por el aporte sobre las flags y sobre "iptables -F" para borrar todas las reglas. Has sido de mucha ayuda. No habia respondido antes porque necesitaba el internet de forma permanente y no podia probar. Asi que propongo a los moderadores cerrar el tema
En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Firewall con iptables politica DROP
Seguridad
scalverth 8 10,248 Último mensaje 4 Noviembre 2012, 23:34 pm
por ameise_1987
ayuda con primer proyecto
Ingeniería Inversa
Dr.cs tj 3 12,085 Último mensaje 10 Junio 2022, 14:39 pm
por Dr.cs tj
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines