Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2008, 10:53
iphone
(Desactivado)
 
Fecha de Ingreso: julio-2008
Ubicación: (._. )( ・_・)(・_・ )?
Mensajes: 123
Antigüedad: 16 años, 8 meses
Puntos: 2
Mi iptables, ¿como mejorar?

Mi iptables no es como el de Pello, que alguna vez vi su guía para iniciarme, aún así es pido opinión de expertos para mejorarlo, sugerencias, apreciaciones o cualquier crítica es bienvenida, primero quiero aclarar que este iptables tiene política de denegar todo por defecto y sólo sirve para navegar, tampoco serviría para usar bitorrent o sistemas p2p similares, también cuento con una lista negra para ips (la parte del código omite comentarios y líneas en blanco).... aún así parece que iptables me es muy limitado a comparación de otros cortafuegos visto en windows llamado comodo. (muy avanzado)

Código bash:
Ver original
  1. #!/bin/bash
  2.  
  3. # Firewall v0.5 | Ultima modificación 05/12/08
  4. # Referencia sobre puertos http://isc.sans.org
  5.  
  6. # Declarando variables
  7.  
  8. fail=0
  9.  
  10. LNEGRA="/etc/lnegra"        # Lista Negra de ips o hosts
  11. IPT="/sbin/iptables"        # Ubicación de iptables
  12.  
  13. # Optener mi ip, en caso cambiar la ip fija, detener primero el cortafuegos.
  14. MIPC="$(ifconfig eth0 | sed -n "2s/[^:]*:[ \t]*\([^ ]*\) .*/\1/p")"
  15.  
  16. # Iniciando librería
  17. . /lib/lsb/init-functions
  18.  
  19. cstop() {
  20.     log_begin_msg "Cortafuegos detenido/purgado"
  21.         $IPT -P INPUT  ACCEPT || fail=1
  22.         $IPT -P OUTPUT ACCEPT || fail=1
  23.         $IPT -P FORWARD ACCEPT || fail=1
  24.         $IPT -F || fail=1
  25.         $IPT -X || fail=1
  26.         $IPT -Z || fail=1
  27.         $IPT -t nat -F || fail=1
  28.     log_end_msg $fail
  29. }
  30.  
  31. cstart() {
  32.     cstop
  33.  
  34.     echo "Iniciando Cortafuegos..."
  35.  
  36.     log_begin_msg "Denegar por defecto conecciones de entrada/salida/enrutamiento"
  37.         $IPT -P INPUT DROP || fail=1
  38.         $IPT -P OUTPUT DROP || fail=1
  39.         $IPT -P FORWARD DROP || fail=1
  40.     log_end_msg $fail
  41.  
  42.     if [ -f $LNEGRA ]; then
  43.         for HOST in `sed '/^ *#/d; /^ *$/d' $LNEGRA | awk '{print $1}'`; do
  44.             $IPT -A INPUT -s $HOST -d $MIPC -j DROP
  45.             $IPT -A OUTPUT -s $MIPC -d $HOST -j DROP
  46.         done
  47.     fi
  48.  
  49.     log_begin_msg "Añadiendo protecciones adicionales"
  50.         echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter || fail=1          # Prevenir spoofing - Chequea que la direccion de origen si exista
  51.         echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts || fail=1     # Denegar responder broadcast
  52.         echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all || fail=1            # Denegar responder ping
  53.         echo "1" > /proc/sys/net/ipv4/tcp_syncookies || fail=1              # Permitir SYN Cookies, previene algunos DoS
  54.     log_end_msg $fail
  55.  
  56.     log_begin_msg "Permitir localhost"
  57.         $IPT -A INPUT -i lo -j ACCEPT || fail=1
  58.         $IPT -A OUTPUT -o lo -j ACCEPT || fail=1
  59.     log_end_msg $fail
  60.  
  61.     log_begin_msg "Permitir acceso a la red local"
  62.         $IPT -A INPUT -s 192.168.1.0/24 -d $MIPC -p udp --sport 137 -j ACCEPT || fail=1
  63.         $IPT -A OUTPUT -s $MIPC -d 192.168.1.0/24 -p udp --dport 137 -j ACCEPT || fail=1
  64.         $IPT -A INPUT -s 192.168.1.0/24 -d $MIPC -p tcp --sport 139 -j ACCEPT || fail=1
  65.         $IPT -A OUTPUT -s $MIPC -d 192.168.1.0/24 -p tcp --dport 139 -j ACCEPT || fail=1
  66.         $IPT -A INPUT -s 192.168.1.0/24 -d $MIPC -p tcp --sport 445 -j ACCEPT || fail=1
  67.         $IPT -A OUTPUT -s $MIPC -d 192.168.1.0/24 -p tcp --dport 445 -j ACCEPT || fail=1
  68.     log_end_msg $fail
  69.  
  70.     log_begin_msg "Permitir consultas DNS"
  71.         $IPT -A INPUT -s 192.168.1.1 -d $MIPC -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT || fail=1
  72.         $IPT -A OUTPUT -s $MIPC -d 192.168.1.1 -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT || fail=1
  73.     log_end_msg $fail
  74.  
  75.     log_begin_msg "Permitir comando whois"
  76.         $IPT -A INPUT -s 0/0 -d $MIPC -p tcp --sport 43 ! --syn -j ACCEPT || fail=1
  77.         $IPT -A OUTPUT -s $MIPC -d 0/0 -p tcp --dport 43 -j ACCEPT || fail=1
  78.     log_end_msg $fail
  79.  
  80.     log_begin_msg "Permitir jabber de google"
  81.         $IPT -A INPUT -s talk.google.com -d $MIPC -p tcp --sport 5222 ! --syn -j ACCEPT || fail=1
  82.         $IPT -A OUTPUT -s $MIPC -d talk.google.com -p tcp --dport 5222 -j ACCEPT || fail=1
  83.     log_end_msg $fail
  84.  
  85.     log_begin_msg "Permitir repositorios"
  86.         $IPT -A INPUT -s ubuntu.com -d $MIPC -p udp -m state --state ESTABLISHED -j ACCEPT || fail=1
  87.         $IPT -A OUTPUT -s $MIPC -d ubuntu.com -p udp -m state --state NEW,ESTABLISHED -j ACCEPT || fail=1
  88.         $IPT -A INPUT -s launchpad.net -d $MIPC -p udp -m state --state ESTABLISHED -j ACCEPT || fail=1
  89.         $IPT -A OUTPUT -s $MIPC -d launchpad.net -p udp -m state --state NEW,ESTABLISHED -j ACCEPT || fail=1
  90.     log_end_msg $fail
  91.  
  92.     log_begin_msg "Permitir Http (80), Https (443) y Http-alt (8080)"
  93.         $IPT -A INPUT -s 0/0 -d $MIPC -p tcp --dport 1025:65535 -m multiport --source-ports 80,443,8080 ! --syn -j ACCEPT || fail=1
  94.         $IPT -A OUTPUT -s $MIPC -d 0/0 -p tcp --sport 1025:65535 -m multiport --destination-ports 80,443,8080 -j ACCEPT || fail=1
  95.     log_end_msg $fail
  96.  
  97.     #[COLOR="Red"]sin probar, no uso thunderbird ni similar[/COLOR]
  98.     #log_begin_msg "Permitir Smtp (25), Pop3 (110), Imap (143), Smtps (465), Submission (587), Imaps (993), Pop3s (995)"
  99.     #   $IPT -A INPUT -s 0/0 -d $MIPC -p tcp --dport 1025:65535 -m multiport --source-ports 25,110,143,465,587,993,995 ! --syn -j ACCEPT || fail=1
  100.     #   $IPT -A OUTPUT -s $MIPC -d 0/0 -p tcp --sport 1025:65535 -m multiport --destination-ports 25,110,143,465,587,993,995 -j ACCEPT || fail=1
  101.     #log_end_msg $fail
  102.    
  103.        # Crear logs con todo lo bloqueado
  104.        $IPT -A INPUT -d $MIPC -j LOG --log-prefix "access denied: " --log-level 4
  105.        $IPT -A OUTPUT -s $MIPC -j LOG --log-prefix "access denied: " --log-level 4
  106.  
  107.     if [ $fail -eq 0 ]
  108.         then
  109.             log_success_msg "Verifique que lo que se aplica con: sudo $0 status"
  110.         else
  111.             log_warning_msg "Se ha producido un error al aplicar alguna de las reglas"
  112.     fi
  113. }
  114.  
  115. cstatus() {
  116.         $IPT -L -n
  117. }
  118.  
  119. case "$1" in
  120.     start)
  121.     cstart;
  122.     ;;
  123.     stop)
  124.     cstop;
  125.     ;;
  126.     restart)
  127.     cstop;
  128.     cstart;
  129.     ;;
  130.     status)
  131.     cstatus;
  132.     ;;
  133.     *)
  134.     echo "Modo de uso: sudo $0 start|stop|restart|status"
  135. esac

Aqui hay algunas dudas, por ejemplo red local, he visto otros scripts que abren puertos 137 138 139 445 tcp y udp utilizando iptraf he visto que en mi red local utiliza sólo puerto 137 udp 139 tcp y 445 tcp y nada con el 138 ¿por que tcp/udp en otros script y el 138 cuando yo no veo eso, será que no está bien depurado? también he deshabilitado ntp y la consulta a los dns he puesto al router ya que el los resuelve...

Saludos.

Última edición por iphone; 06/01/2009 a las 08:22