• Portada
    • Recientes
    • Usuarios
    • Registrarse
    • Conectarse

    Dudas con iptables: ¿como véis este script?

    Programado Fijo Cerrado Movido
    Sistemas operativos
    2
    3
    1.2k
    Cargando más mensajes
    • Más antiguo a más nuevo
    • Más nuevo a más antiguo
    • Mayor número de Votos
    Responder
    • Responder como tema
    Accede para responder
    Este tema ha sido borrado. Solo los usuarios que tengan privilegios de administración de temas pueden verlo.
    • bluesmanB
      bluesman
      Última edición por

      Hola, estoy empezando a escribir reglas de iptables y tengo algunas dudas. He escrito un primer script pero creo que algo tiene que estar mal, si fuerais tan amables de decirme los fallos que he cometido…. es que yo no los veo😕

      #!bin/sh
      # Firewall iptables básico
      #------------------------------
      ################################################3
      
      echo Aplicando las reglas del firewall iptables...
      
      ## Primeras reglas
      /sbin/iptables -P INPUT ACCEPT
      /sbin/iptables -F INPUT
      /sbin/iptables -P OUTPUT ACCEPT
      /sbin/iptables -F OUTPUT
      /sbin/iptables -P FORWARD ACCEPT
      /sbin/iptables -F FORWARD
      /sbin/iptables -t nat -F
      
      ## Localhost es amigable
      /sbin/iptables -A INPUT -i lo -j ACCEPT
      /sbin/iptables -A OUTPUT -o lo -j ACCEPT
      
      ## Aceptar cualquier entrada relacionada con conexiones legítimas
      /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
      
      ## Sólo se permite conexión por ssh desde la red local
      /sbin/iptables -A INPUT -i eth0 -s 192.168.0.1/24 -p TCP --dport 22 -j ACCEPT
      /sbin/iptables -A INPUT -i eth0 -s 0.0.0.0/0 -p TCP --dport 22 -j DROP
      
      ## Sólo se permite conexión a smb desde la red local
      /sbin/iptables -A INPUT -i eth0 -s 192.168.0.1/24 -p TCP --dport 139 -j ACCEPT
      /sbin/iptables -A INPUT -i eth0 -s 192.168.0.1/24 -p TCP --dport 445 -j ACCEPT
      /sbin/iptables -A INPUT -i eth0 -s 0.0.0.0/0 -p TCP --dport 139 -j DROP
      /sbin/iptables -A INPUT -i eth0 -s 0.0.0.0/0 -p TCP --dport 445 -j DROP
      
      ## Filtramos el puerto 10000 (WEBMIN)
      /sbin/iptables -A INPUT -i lo -p TCP --dport 10000 -j ACCEPT
      /sbin/iptables -A INPUT -i eth0 -s 0.0.0.0/0 --dport 10000 -j DROP
      
      ## Filtramos el puerto 901 (SWAT)
      /sbin/iptables -A INPUT -i lo -p TCP --dport 901 -j ACCEPT
      /sbin/iptables -A INPUT -i eth0 -s 0.0.0.0/0 --dport 901 -j DROP
      
      ## Filtramos el puerto 631 (CUPS)
      /sbin/iptables -A INPUT -i lo -p TCP --dport 631 -j ACCEPT
      /sbin/iptables -A INPUT -i eth0 -s 0.0.0.0/0 --dport 631 -j DROP
      
      ## FORWARD
      ## Log del forward
      /sbin/iptables -A FORWARD -j LOG
      ## Forward para la LAN
      iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      echo 1 > /proc/sys/net/ipv4/ip_forward
      
      #Configuración terminada
      echo Las reglas del firewall están aplicadas
      
      #--------------------------------------------------------------------
      

      Para empezar es que cuando lanzo el script me salen estos "errores"

      osiris:/var/lib/iptables# sh firewall-iptables
      Aplicando las reglas del firewall iptables...
      iptables v1.2.9: Unknown arg `--dport'
      Try `iptables -h' or 'iptables --help' for more information.
      iptables v1.2.9: Unknown arg `--dport'
      Try `iptables -h' or 'iptables --help' for more information.
      iptables v1.2.9: Unknown arg `--dport'
      Try `iptables -h' or 'iptables --help' for more information.
      Las reglas del firewall están aplicadas
      

      …pero no sé que tengo que cambiar en el script para que vaya bien😕

      ¿Me podéis ayudar? Si hay alguna regla más que deba añadir estaría bien que la pusierais, así podríamos hacer un megapost con configuraciones de iptables que nos vendrían muy bien a todos:p

      1 Respuesta Última respuesta Responder Citar 0
      • josefuJ
        josefu
        Última edición por

        A ver si te puedo ayudar, pero de de iptables se lo básico.

        Primero, podrías poner el '/sbin/iptables' como una variable (IPTABLES, por ejemplo) para no escribir tanto.

        ## Primeras reglas
        /sbin/iptables -P INPUT ACCEPT
        /sbin/iptables -F INPUT
        /sbin/iptables -P OUTPUT ACCEPT
        /sbin/iptables -F OUTPUT
        /sbin/iptables -P FORWARD ACCEPT
        /sbin/iptables -F FORWARD
        /sbin/iptables -t nat -F
        
        

        El flush de reglas se hace al principio y luego las políticas por defecto, si aplicas una politica por defecto para INPUT, OUTPUT y FORWARD y después la borras, como si no hicieses nada. Te quedaría algo así:

        IPTABLES='/sbin/iptables'
        
        # flush de reglas
        $IPTABLES -F
        $IPTABLES -X
        $IPTABLES -Z
        $IPTABLES -t nat -F
        
        # politicas por defecto
        $IPTABLES -P INPUT ACCEPT
        $IPTABLES -P OUTPUT ACCEPT
        $IPTABLES -P FORWARD ACCEPT
        
        
        ## Localhost es amigable
        /sbin/iptables -A INPUT -i lo -j ACCEPT
        /sbin/iptables -A OUTPUT -o lo -j ACCEPT
        
        ## Aceptar cualquier entrada relacionada con conexiones legítimas
        /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        
        

        Estas reglas, en principio, no tienen sentido, ya que tu política por defecto es ACCEPT, por lo tanto no harían falta (a no ser que después cerrases con otra regla, que no hay puesta), esto haría falta si DROP fuese nuestra política por defecto para INPUT.

        Luego ya podrías cerrar los puertos como estabas haciendo.
        Para hacer debug de tus scripts puedes poner añadir un '-x' a la primera línia, quedándote: #!/bin/sh -x
        y así te mostrará la ejecución del script línea a línea viendo dónde falla, que en tu caso es cuando deniegas el acceso a los puertos 10000, 901 y 631 porque te falta el argumento '-p tcp' .

        ## FORWARD
        ## Log del forward
        /sbin/iptables -A FORWARD -j LOG
        ## Forward para la LAN
        iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
        
        

        Aquí no estoy seguro del todo, pero creo que tu última regla no se tendría en cuenta porque cualquier paqute que llegue a FORWARD será logeado y al coincidir con una regla de iptables, dejará de comprobar; por lo tanto deberías poner el LOG de paquetes al final.

        Así se te quedaría así:

        #!/bin/sh
        # Firewall iptables básico
        #------------------------------
        ################################################3
        
        echo Aplicando las reglas del firewall iptables...
        
        IPTABLES='/sbin/iptables'
        OUR_NET='192.168.0.1/24'
        ANY='0.0.0.0/0'
        
        # flush de reglas
        $IPTABLES -F
        $IPTABLES -X
        $IPTABLES -Z
        $IPTABLES -t nat -F
        
        # politicas por defecto
        $IPTABLES -P INPUT ACCEPT
        $IPTABLES -P OUTPUT ACCEPT
        $IPTABLES -P FORWARD ACCEPT
        
        # Sólo permintimos acceder desde la red local a
        $IPTABLES -A INPUT -i eth0 -s $OUR_NET -p tcp --dport 22 -j ACCEPT
        $IPTABLES -A INPUT -i eth0 -s $ANY -p tcp --dport 22 -j DROP
        
        ## Sólo se permite conexión a smb desde la red local
        $IPTABLES -A INPUT -i eth0 -s $OUR_NET -p tcp --dport 139 -j ACCEPT
        $IPTABLES -A INPUT -i eth0 -s  $OUR_NET -p tcp --dport 445 -j ACCEPT
        $IPTABLES -A INPUT -i eth0 -s $ANY -p tcp --dport 139 -j DROP
        $IPTABLES -A INPUT -i eth0 -s $ANY -p tcp --dport 445 -j DROP
        
        ## Filtramos el puerto 10000 (WEBMIN)
        $IPTABLES -A INPUT -i lo -p tcp --dport 10000 -j ACCEPT
        $IPTABLES -A INPUT -i eth0 -s $ANY -p tcp --dport 10000 -j DROP
        
        ## Filtramos el puerto 901 (SWAT)
        $IPTABLES -A INPUT -i lo -p tcp --dport 901 -j ACCEPT
        $IPTABLES -A INPUT -i eth0 -s $ANY -p tcp --dport 901 -j DROP
        
        ## Filtramos el puerto 631 (CUPS)
        $IPTABLES -A INPUT -i lo -p tcp --dport 631 -j ACCEPT
        $IPTABLES -A INPUT -i eth0 -s $ANY -p tcp --dport 631 -j DROP
        
        ## FORWARD
        ## Forward para la LAN
        $IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE
        ## Log del forward
        $IPTABLES -A FORWARD -j LOG
        
        # Activar el forwarding
        echo 1 > /proc/sys/net/ipv4/ip_forward
        
        #Configuración terminada
        echo Las reglas del firewall están aplicadas
        
        
        bluesmanB 1 Respuesta Última respuesta Responder Citar 0
        • bluesmanB
          bluesman @josefu
          Última edición por

          Muchas gracias josefu;)

          1 Respuesta Última respuesta Responder Citar 0
          • 1 / 1
          • First post
            Last post

          Foreros conectados [Conectados hoy]

          1 usuarios activos (0 miembros e 1 invitados).
          febesin, pAtO,

          Estadísticas de Hardlimit

          Los hardlimitianos han creado un total de 543.3k posts en 62.8k hilos.
          Somos un total de 34.7k miembros registrados.
          sridharpat ha sido nuestro último fichaje.