• Publicidad

Socket e iptables

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Socket e iptables

Notapor rklz » 2007-09-10 16:27 @727

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
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Publicidad

Re: Socket e iptables

Notapor creating021 » 2007-09-10 18:59 @832

rklz escribiste: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. :(
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor rklz » 2007-09-10 19:24 @850

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 :(
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Notapor explorer » 2007-09-11 02:38 @151

A ver si este módulo te inspira algo: Net::Proxy.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor rklz » 2007-09-11 14:49 @659

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?
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Notapor explorer » 2007-09-11 15:00 @666

Podría ser interesante, sí.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor rklz » 2007-09-11 15:16 @678

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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');
 }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


PD: Aclaro que al socket solamente van a llegar comandos específicos de iptables.
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Notapor rklz » 2007-09-13 16:10 @715

¿Alguna opinión/critica sobre el código? xD
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Notapor explorer » 2007-09-13 16:59 @749

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor rklz » 2007-09-13 19:57 @873

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 :(
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 18 invitados