Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Socket e iptables

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Lun Sep 10, 2007 3:27 pm
rklz
Perlero Nuevo
Perlero Nuevo
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
Socket e iptables Responder citando

Buenas gente, necesito resolver un problema que requiere más conocimientos sobre Perl de los que tengo, espero que me puedan dar una mano ya que lo necesito para mi trabajo, desde ya muchas gracias.

El problema es el siguiente:

Necesito hacer un socket que reciba información la cual es para que yo agregue a mi firewall (iptables) reglas que permitan conexiones entre dos nodos; los nodos son los que se especifican en la información que recibo.

Mi idea era crear un socket con IO::Socket y usar el modulo IPv4::IPTables para agregar las reglas, ¿voy por buen camino, qué opinan? ¿alguna mejor idea?


Muchas gracias
Mensaje Lun Sep 10, 2007 5:59 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Re: Socket e iptables Responder citando

rklz escribió:
Buenas gente, necesito resolver un problema que requiere más conocimientos sobre Perl de los que tengo, espero que me puedan dar una mano ya que lo necesito para mi trabajo, desde ya muchas gracias.

El problema es el siguiente:

Necesito hacer un socket que reciba información la cual es para que yo agregue a mi firewall (iptables) reglas que permitan conexiones entre dos nodos; los nodos son los que se especifican en la información que recibo.

Mi idea era crear un socket con IO::Socket y usar el modulo IPv4::IPTables para agregar las reglas, ¿voy por buen camino, qué opinan? ¿alguna mejor idea?


Muchas gracias

Hmmmm.... creo que es IPTables::IPv4 (del 2003 con 48 FAILS) y si es ese módulo pues no... no es buena idea.

Como mis conocimientos de leyers bajos (en OSI) son relativamente malos (muuuuy malos) no entiendo que quieres hacer (¿Nodos, qué?) no recomiendo una alternativa. Sad
Mensaje Lun Sep 10, 2007 6:24 pm
rklz
Perlero Nuevo
Perlero Nuevo
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
Responder citando

Especifico un poco mas :

Mi jefe mediante un programita hecho en .Net me va a pasar unas rutas ej :
los paquetes que llegan a la IP 1.1.1.1 puerto 2030 deben ir a la IP 2.2.2.2:2030, entonces yo tendría que tener un socket corriendo para escuchar esa ruta y que automáticamente se agregue a mi script y empiece a rutar, ¿se entiende?

El servidor donde está alojado iptables y este futuro script está en el medio de esas 2 IP.

PD : El módulo se llama como vos decís y no sabia lo de los fails Sad
Mensaje Mar Sep 11, 2007 1:38 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

A ver si este módulo te inspira algo: Net::Proxy.
Mensaje Mar Sep 11, 2007 1:49 pm
rklz
Perlero Nuevo
Perlero Nuevo
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
Responder citando

Muchas gracias, el módulo parece servirme para lo que necesito, igualmente como contaba con un día para hacer el trabajo, lo hice la forma más rápida y sucia que encontré, está funcionando pero no me parece la mejor manera de dejarlo.

¿Puedo postear el código para que me den sus opiniones?
Mensaje Mar Sep 11, 2007 2:00 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Podría ser interesante, sí.
Mensaje Mar Sep 11, 2007 2:16 pm
rklz
Perlero Nuevo
Perlero Nuevo
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
Responder citando

Perl:
#!/usr/bin/perl -w

use strict;
use IO::Socket;

my ($data, $resta, $host, $stat, $new_sock, $ip, $count);

$host = 'x.x.x.x';

my $sock = new IO::Socket::INET(  LocalHost => $host,
                                  LocalPort => '1234',
                                  Proto     => 'tcp',
                                  Reuse     => 1,
                                  Listen    => 1 )
    or die "socket error : $! \n";

if ($sock) { iptables() }

$count = 0;
$resta = 4;

while ( ($new_sock, $stat) = $sock->accept() ) {

    print $new_sock "\n";
    print $new_sock "Waiting for commands ...\n";

    while ( $data = <$new_sock> ) {
               
        foreach ( $data ) {
       
            if( $_ =~ m/^ipt/i ) {
                system($_);
            }
            elsif ( $_ =~ m/^quit/i ) {
                close $new_sock;
            }
            else {
                $count = $count +1;
                $resta = $resta -1;

                foreach ( $_ !~ m/^ipt/i ) {
                    print $new_sock "syntax error, $resta tries left\n";
                    if ( $count == 4 ) {
                        close $new_sock;
                    }
                }
            }
        }
    }
}      
                             
sub iptables {
    system('iptables -F');
    system('iptables -t nat -F');
    system('iptables -t mangle -F');
    system('/bin/echo 1 > /proc/sys/net/ipv4/ip_forward');
    system('iptables -t nat -P PREROUTING ACCEPT');
    system('iptables -t nat -P POSTROUTING ACCEPT');
    system('iptables -t nat -P OUTPUT ACCEPT');
    system('iptables -P INPUT ACCEPT');
    system('iptables -P FORWARD ACCEPT');
    system('iptables -P OUTPUT ACCEPT');
 }


PD: Aclaro que al socket solamente van a llegar comandos específicos de iptables.
Mensaje Jue Sep 13, 2007 3:10 pm
rklz
Perlero Nuevo
Perlero Nuevo
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
Responder citando

¿Alguna opinión/critica sobre el código? xD
Mensaje Jue Sep 13, 2007 3:59 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Al usuario le das cuatro oportunidades para meter un comando correcto o le despides, pero no es acumulativo. Es decir, si se equivoca 3 veces, y mete un comando correcto, le deja seguir, pero si se equivoca en el siguiente comando, sale.

Las variables $count y $resta hacen lo mismo... se podría usar solamente una de ellas.

Llamar a iptables con system es lo más normal, aunque quizás hubiera quedado más bonito usar un módulo como IPTables::IPv4 (aunque no sabemos si sería igual de funcional, ya que depende de una librería).

Aunque sepamos que sólo van a llegar comandos de iptables, no estaría demás poner un pequeño control de seguridad... si alguien manda "iptables -L; rm -rf /", podría ser catastrófico.
Mensaje Jue Sep 13, 2007 6:57 pm
rklz
Perlero Nuevo
Perlero Nuevo
Registrado: 25 May 2007
Mensajes: 38
Ubicación: Rosario, Argentina
Responder citando

Gracias por fijarte explorer, estás en lo cierto, voy a modificar las cosas que dices...

Lo único que tengo para agregar es que yo pensaba usar IPTables::IPv4 pero como se vé más arriba del post creating me dijo que es del 2003 y tiene 48 fails Sad
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group