Rincón Informático

Un rincon para hablar sobre GNU/Linux, seguridad informatica, y mas!!

Programa Cliente-Servidor en Python

Posted by Epsilon On abril - 14 - 2010

Navegando por la web me encuentro con este enlace, el cual contiene la informacion que estaba buscando  y quiero compartirla hoy con ustedes. Se trata de un   Cliente-Servidor desarrollado en Python. Para aquellas personas que no saben que es un cliente-servidor:

Esta arquitectura consiste básicamente en un cliente que realiza peticiones a otro (el servidor) que le da respuesta. Aunque esta idea se puede aplicar a programas que se ejecutan sobre una sola computadora es más ventajosa en un sistema operativo multiusuario distribuido a través de una red de computadoras.

La separación entre cliente y servidor es una separación de tipo lógico, donde el servidor no se ejecuta necesariamente sobre una sola máquina ni es necesariamente un sólo . Los tipos específicos de servidores incluyen los servidores web, los servidores de archivo, los servidores del correo, etc. Mientras que sus propósitos varían de unos servicios a otros, la arquitectura básica seguirá siendo la misma.

Esta arquitectura la usamos todos los dias, por ejemplo, cuando navegamos  accedemos al servidor web desde nuestro cliente el cual es el navegador, independientemente de cual sea.

Ahora, desarrollar un de este tipo en Python es demasiado sencillo,  en esta ocasion mostrare el codigo del cliente.py   y servidor.py y cualquier persona con conocimientos basicos en programacion no tendra problemas en entenderlo y modificarlo a su gusto:

servidor.py

#+----------------------------------+
#| Server  TCP/IP                    |
#+----------------------------------+
 import socket
#Creo el  objeto socket
 s = socket.socket()

#Invoco  al metodo bind, pasando como parametro
#una tupla con IP y puerto
 s.bind(("localhost",  9999))

#Invoco  el metodo listen para escuchar conexiones
#con el numero maximo de  conexiones como parametro
 s.listen(1)

#El  metodo accept bloquea la ejecucion a la espera de conexiones
#accept  devuelve un objeto socket y una tupla Ip y puerto
 sc, addr = s.accept()
 print "Recibo conexion de " + str(addr[0]) + ":" + str(addr[1])

while  True:

#invoco  recv sobre el socket cliente, para recibir
#un maximo (segun parametro)  de 1024 bytes
 recibido = sc.recv(1024)
 if  recibido == "by":
 break
 print  "Recibido:", recibido

#Envio  la respuesta al socket cliente
 sc.send(recibido)

print  "adios"

#cierro  sockets cliente y servidor
 sc.close()
 s.close()

Cliente.py

#+----------------------------------+ #| Client TCP/IP                    | #+----------------------------------+ import socket s = socket.socket() #invoco el metodo connect del socket pasando como parametro la tupla IP , puerto s.connect(("localhost", 9999)) while True: mensaje = raw_input("Mensaje a enviar: ") #invoco el metodo send pasando como parametro el string ingresado por el usuario s.send(mensaje) if mensaje == "by": break print "adios" #cierro socket s.close()

Como pueden ver es algo muy sencillo de realizar y comprender, solo falta cambiar la direccion IP en el cliente, por la IP donde estara el servidor a la escucha.  Todo lo que se desee que realice el servidor cuando reciba el mensaje by tendra que ir dentro del if.

Espero que lo hayan entendido, a mi me servio mucho este ejemplo, y por eso quiero agradecer publicamente al autor de esta entrada por compartir  buenos conocimientos. Recuerden la identacion ya que es fundamental en Python.

Como implementar un Firewall en GNU/Linux con Shorewall

Posted by fortress On marzo - 15 - 2010

En esta oportunidad hablaremos del firewall de Linux más conocido como IPTABLES. Primero daremos algunas definiciones para poner en contexto y por ultimo mostraremos como configurar un firewall utilizando shorewall, teniendo en cuenta que la configuración aquí realizada es pensada para un equipo personal y no para uno que cuidará toda una red.

El firewall es un sistema de control sobre los puertos de nuestro sistema, de tal modo que podemos establecer cuales puertos pueden ser accedidos desde fuera y cuáles no.
El firewall de GNU/Linux es Netfilter, que trabaja en espacio de kernel, no es un servicio en espacio de usuario y se configura por medio de IPTABLES.

IPTABLES según la wikipedia es: iptables es el nombre de la de espacio de usuario mediante la cual un administrador puede definir políticas de filtrado del tráfico que circula por la red

La utilizada para configurar estas políticas de seguridad será en este caso Shorewall que en su sitio oficial es definido como: “Una de alto nivel para la configuración de Netfilter

Bueno y ahora más teoría. No hablaremos con todos lo tecnicismos que algunos les gusta, porque la idea es que todos puedan entender, o por lo menos que sirva de forma de introducción al tema.

Digamos que el kernel le encarga a Netfilter la tarea de recibir y transmitir paquetes y los revisa antes de transmitirlos.

Para revisarlos Netfilter se vale de una serie de “condiciones” que cada paquete debe cumplir. De tal modo que todo paquete que no cumpla con las “condiciones” se tira a la basura.

Estas famosas “condiciones” son las que permiten a Netfilter clasificar cada paquete y hacer con cada uno lo que sea establecido por estas condiciones.

Netfilter necesita que estas “condiciones” sean coherentes, que no sean contradictorias. No podemos decirle “descarta este paquete” y luego decirle “ah, no, mejor transmite este paquete”. Por eso, como no le gusta que le compliquen el trabajo, además de la coherencia, atenderá a cada “condición” en el orden en que fueron declaradas.

¿Y cómo declaramos las “condiciones”?

Nuestro sistema funciona por medio de “servicios” que “escuchan” en un “puerto” del sistema, esperando a que un “cliente” realice una “petición” al “servicio”. Cada “Petición” es “atendida” por el “servicio” que pidió el “cliente”.

Esto es lo que se conoce como un “sistema cliente/servidor” y GNU/Linux respeta este modelo, entonces podríamos decir que Netfilter trabaja capturando las “peticiones” de todos los “puertos” antes de que sean “atendidas” por los “servicios”.

Netfilter maneja esta tarea a través de iptables. Como cada “petición” es esencialmente un “paquete” de datos, diremos que iptables controla paquetes de la siguiente manera:

  1. Iptables maneja tablas, haciendo que los paquetes atraviesen una tabla. (table)
  2. Cada tabla posee cadenas. (chains)
  3. En cada cadena se establece una política general. (policies)
  4. Luego se establecen reglas que saltan (jump) la condición de la política.

Entonces, la tabla actuará como filtro de los paquetes. (Filter)

Sucede que los paquetes pretenden realizar una de tres acciones:

1) Un paquete que quiere salir del sistema. Por ejemplo, solicitar una dirección web en el navegador. Esta petición bajara por las capas OSI, pretenderá salir por un puerto y será “atendida” por Netfilter; si cumple las reglas sale el paquete del sistema.

2) Un paquete que quiere entrar al sistema. Por ejemplo, el resultado de la solicitud anterior. Llega el paquete que quiere entrar por el puerto 80 y será “atendida” por Netfilter; si cumple las reglas entra el paquete y sube por las capas OSI para presentar la página en el navegador.

3) Un paquete que quiere pasar por el sistema. Por ejemplo, si nuestra máquina actúa como proxy. Recibirá paquetes de la LAN queriendo ir a la WAN pasando obligadamente por Netfilter para lograrlo.

En esta tabla de filtro, tendremos una cadena para cada acción:

  1. Un paquete que quiere salir (OUTPUT) de nuestro sistema.
  2. Un paquete que quiere entrar (INPUT) a nuestro sistema.
  3. Un paquete que quiere pasar (FORWARD) por nuestro sistema.

A nivel de política, tendremos dos opciones:

  1. Rechazar todos los paquetes y empezar a construir excepciones a esta política.
  2. Aceptar todos los paquetes y empezar a construir excepciones a esta política.

Una vez que definimos la “política” que aplicará iptables, deberemos empezar con las reglas.

Continuando con un poquito de teoría miremos como es que se establecen las conexiones con un pequeño ejemplo.

Cuando una máquina A quiere acceder a otra máquina B lo hace desde un puerto de A hacia un puerto de B, mandando un saludo.

Entonces B recibe un saludo de A, marcando en su puerto una conexión nueva (NEW) y respondiendo el saludo de A.

Luego A recibe la respuesta de B, marca la conexión del puerto como establecida (ESTABLISHED) y se prepara para comunicarse con B.

Luego B recibe la respuesta de A, marca la conexión del puerto como establecida (ESTABLISHED) y se prepara a recibir datos de A.

Los datos transmitidos por A hacia B y por B hacia A son relacionados (RELATED) a la conexión.

El kernel mantiene un control del estado de éstas conexiones y pueden ser usadas para filtrar paquetes por iptables.

Antes de continuar con la configuración de nuestro firewall demos respuesta a esto: qué es mejor: ¿bloquear un puerto abierto o hacer creer que el puerto está cerrado?

Si el puerto es bloqueado se sabe que está abierto y es néctar tcp para las abejas cracker’s que quieren hacerse un picnic con nuestra maquina, en cambio si un puerto está cerrado no existe fundamento para un ataque. Si “disfrazamos” los puertos abiertos como cerrados no tendremos abejas zumbándonos.

Ahora con esto ya claro pasemos a configurar nuestro firewall personal con shorewall. Esta instalación es pensada para maquinas que tengan como sistema operativo Debian/Squeeze, Cabe aclarar que esta aplicación también está disponible para otros sabores de Linux.

Bueno ya a esta altura se estarán preguntando ¿Por qué shorewall y no directamente con IPTABLES? Básicamente porque es más fácil trabajar con un front-end que directamente con los comandos, y porque así podremos concentrarnos mucho más en las reglas. Shorewall se encargará automáticamente de convertir todo al formato de Iptables. Mucho más práctico ¿no?

Bueno manos a la obra

Para empezar lo primero que hacemos es actualizar nuestra lista de paquetes.

#apt-get update

Despues de que termine de actualizar la lista pasamos a instalar los paquetes necesarios para poder tener shorewall en nuestro sistema.

#apt-get install shorewall shorewall-perl

Cuando termine la instalacion pasamos a realizar configuraciones necesarias. Shorewall trae unos ejemplos para 1, 2 y para hasta 3 interfaces de configuración en /usr/share/doc/shorewall/examples/ que debemos copiar a la carpeta /etc/shorewall para esto ejecutamos los siguientes comandos (en este tutorial solo copiaremos los de una sola interfaz):

#cd /usr/share/doc/shorewall/examples/one-interface/

#cp -p interfaces rules zones policy /etc/shorewall/

Ahora seguimos a configurar estos archivos. Y para eso nos vamos al directorio /etc/shorewall/ donde copiamos todos los archivos de configuracion basica.

Shorewall Zones

El primer archivo de configuración que vamos a modificar es el de “zones”.

Shorewall ve la red donde se encuentra como un conjunto de zonas, para el caso de una sola interfaz de red que estamos haciendo solo vamos a tener dos zonas. Primero ejecutamos el siguiente comando:

#vim zones

34198590 Como implementar un Firewall en GNU/Linux con Shorewall

Se verificara que el archivo tiene la linea de net ipv4, justo despues de fw firewall debe verse como la imagen anterior, ya los ejemplos lo traen por eso solo se va a verificar.

La zona fw firewall siempre debe existir ya que es la zona que reconoce Shorewall como suya, además será definida como una variable $FW en el shell una vez que ejecutemos el Shorewall y será referida durante toda la configuración.

Para más información de las zonas puedes ejecutar man shorewall-zones

Shorewall interfaces

Ahora debemos de obtener el nombre de la interfaz externa como se muestra en la siguiente imagen.

12277136 Como implementar un Firewall en GNU/Linux con Shorewall

Por supuesto que la dirección IP de tu computadora puede ser distinta al igual que el nombre de la interfaz en este caso eth1. Fijense que la interfaz externa viene dado por la línea default via 192.168.0.1 dev eth1. Esto es importante si se tiene más de una interfaz de red.

Con esta información procederemos a modificar el archivo “interfaces”, ejecutamos el siguiente comando:

#vim interfaces

Y lo modificamos para que el archivo quede algo parecido a esto:

76635181 Como implementar un Firewall en GNU/Linux con Shorewall

Breve explicacion de lo anterior

ZONE: Aquí definimos la zona a la cual va a pertenecer la interfaz que vamos a definir, en este caso la zona es net que ya definimos anteriormente

INTERFACE: El nombre de la interfaz

BROADCAST: Es opcional. Aquí definimos que queremos que haga el Shorewall con los paquetes de Broadcast en este caso con la opción detect le decimos que detecte las direcciones de broadcast por nosotros. Tambien podríamos colocar aquí la dirección IP de broadcast de nuestra red.

OPTIONS: Esta es la parte más extensa, así se explicara las opciones utilizadas aquí.

dhcp: Esta opción se debe colocar si tu computadora obtiene su dirección IP vía DHCP, o si tu firewall está instalado en un servidor DHCP.

tcpflags: Esta opción hace que Shorewall revise los paquetes por combinaciones ilegales de FLAGS (o banderas) TCP. Nunca está de más tenerlo.

logmartians: Esta opción hace que Shorewall registre paquetes con direcciones de origen imposibles, para esto tenemos que tener habilitado el routefilter en la interfaz lo cual veremos más adelante como hacerlo.

nosmurfs: Filtra paquetes smurfs (paquetes que tienen como dirección de origen una dirección de broadcast)

blacklist: Analiza los paquetes contra la lista negra que definiremos más adelante en el archivo blacklist del shorewall

routeback:Permite que Shorewall filtre paquetes que se devuelven a esta misma interfaz

Con esto el archivo de interfaces esta listo, lo guardamos y seguimos con la configuración.

Nota: Para más información del archivo de interfaces y sus opciones pueden ejecutar man shorewall-interfaces.

Shorewall Policy

Aqui vamos a definir una política que determina como Shorewall maneja la conexión entre las distintas zonas. Es de destacar que las instrucciones se ejecutan de arriba a abajo por lo que es importante mantener el orden para que se ejecuten adecuadamente.

#vim policy

Y modificamos el archivo para que quede así:

60525775 Como implementar un Firewall en GNU/Linux con Shorewall

Lo que estamos diciendo aquí es que todo lo que venga de $FW que lo definimos anteriormente es la zona de Firewall de Shorewall sea aceptado y que todo lo demás sea rechazado para que pase por las reglas que crearemos a continuación.

Para más información pueden buscar las páginas de manual ejecutando man shorewall-policy.

Shorewall rules

Las reglas sirven para agregar excepciones a las politicas que declaramos anteriormente, si dejamos las politicas como están sin agregar ninguna regla pues no podremos ni siquiera navegar asi que vamos a modificar el archivo de rules ejecutando para que nos quede de la siguiente manera:

#vim rules33167467 Como implementar un Firewall en GNU/Linux con Shorewall

Nombre como Ping, SSH, etc nos describe el protocolo sobre el que vamos a efectuar la acción que puede ser ACCEPT. REJECT, DROP entre otras. Shorewall cuenta con varios MACROS, los MACROS no son más que reglas prehechas que estamos utilizando aquí como Ping, SSH, DNS, etc. Para ver una lista completa de los macros puedes ejecutar shorewall show macros.

Luego de colocar el macro y la Acción pasamos a colocar el destino que en este caso es la zona red que declaramos al principio y luego colocamos el destino que es la zona Firewall en el caso de las conexiones entrantes (net—>firewall) e invertido para las conexiones salientes (firewall–>net).

Si quisieramos aplicar una regla sobre un puerto y protocolo específico la declaramos de la siguiente forma:

ACCEPT          $FW     net             tcp     873

REJECT          $FW     net             udp     443

Ahora los útlimos retoques, vamos a modificar el archivo de configuración de Shorewall:

vim /etc/shorewall/shorewall.conf

Asegurense que los siguientes valores están correctos:

STARTUP_ENABLED=Yes

ROUTE_FILTER=Yes

Con STARTUP_ENABLED le decimos al Shorewall que inicie con el sistema, y con ROUTE_FILTER del cual hablamos ya arriba en la parte de Interfaces

Por ultimo, cambiar la linea startup=0 por startup=1 del archivo /etc/default/shorewall

Para iniciar manualmente a Shorewall y probar nuestra configuración ejecutamos:

shorewall start

Con esto nos dará algo parecido a esto:

37372271 Como implementar un Firewall en GNU/Linux con Shorewall

Con esto ya tendremos un firewall personal totalmente funcional, asi que ya pueden poner a prueba sus configuraciones.

Shorewall registra todo a través del log del sistema para ver los logs podemos ejecutar los siguientes comandos:

  1. shorewall show log (Muestra los últimos 20 mensajes de netfilter)
  2. shorewall logwatch (Verifica los logs a un tiempo determinado)
  3. shorewall dump (Nos da un amplio reporte de los problemas encontrados por Shorewall)

Bueno esto es todo por el momento, espero y les sea de utilidad, que la fuerza este con ustedes y hasta la proxima.

Fuente 1

Fuente 2

Fuente 3

Instalación y configuración de un servidor ssh en Debian

Posted by fortress On febrero - 14 - 2010

Una de las herramientas indispensables para administrar los servidores es a través de SSH (Secure SHell). Pero antes, un poco de teoría.

Definición

“SSH (Secure SHell) es el nombre de un protocolo y del que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la maquina mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos un Servidor X (en sistemas Unix y Windows) corriendo.

Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto ficheros sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH” (Wikipedia).

Funcionamiento

El cliente inicia la conexión hacia un puerto predeterminado del servidor, en este caso el puerto reservado número 22. Establecida la conexión TCP los extremos se envían, en texto plano, sus identificadores de versión, para ver si la comunicación es posible entre ellos. De ser compatibles entre sí cambian a un modo de transferencia binaria durante el cual se identifican los interlocutores y se negocian los protocolos de cifrado y firma que se usarán.

Esta negociación de protocolos se lleva a cabo de tal manera que la información intercambiada entre cliente y servidor sólo puede ser descifrada por el destinatario legítimo de la misma, y sólo por él. Para ello al principio de esta fase el servidor envía al cliente su clave pública, para que el cliente la use para cifrar todos los mensajes siguientes hacia el servidor, haciéndolos sólo legibles para el propio servidor. Entonces el cliente genera una clave de cifrado para la sesión en curso, que envía cifrada al servidor junto con el algoritmo seleccionado, y a partir de este momento todo el tráfico entre cliente y servidor viaja cifrado y seguro.

Llegados a este punto el cliente y el servidor se han puesto de acuerdo en un cierto algoritmo de cifrado, han acordado una clave para su sesión, y el servidor se ha identificado ante el cliente con su clave pública RSA (u opcionalmente DSA, en la versión 2 del protocolo). Pero aún falta que el cliente se identifique ante el servidor, que deberá decidir entonces si deja o no acceder al cliente remoto. La identificación del cliente podrá ser mediante pareja de usuario y contraseña, rhost, rhost más identificación de máquina mediante clave RSA o simplemente mediante claves RSA o DSA.

De todos los mecanismos sólo nos interesan el primero y el último. En el primero, el servidor nos dará acceso siempre y cuando la pareja de usuario y contraseña introducida por el cliente sean los de un usuario válido en el sistema operativo del servidor, salvo restricciones adicionales. En la identificación por claves el cliente dispone, al igual que el servidor, de su propia pareja de claves, que envía al servidor durante la identificación. Si el servidor confía en el usuario cuya clave ha recibido, entonces le dará permiso de acceso.

A grandes rasgos el mecanismo de conexión y de identificación del protocolo SSH es sencillo, aunque conviene destacar un par de aspectos relevantes de cara al uso y configuración de los programas relacionados:

  • Las conexiones las inicia siempre el cliente hacia el puerto TCP número 22 del servidor.
  • Las versiones de los protocolos soportados por cliente y servidor deben coincidir, o la conexión no se llevará a cabo.
  • El servidor siempre necesita disponer de una pareja de claves, puesto que usa la clave pública para establecer la conexión segura con el cliente. El tipo de clave tiene que estar soportado en el cliente.
  • El cliente y el servidor deben tener algún algoritmo de cifrado en común, o la conexión no se establecerá.
  • Dependiendo de los mecanismos de identificación soportados por ambas partes, o exigidos por el servidor, la identificación podrá o no fallar.
  • Aún cuando haya un mecanismo de identificación soportado por ambas partes, el cliente deberá proporcionar credenciales válidas al servidor, bien sea una pareja de usuario y contraseña, bien una clave pública.

Al margen de todo lo anterior, el servidor del protocolo SSH, sshd podrá implementar restricciones adicionales de acceso, así como el propio sistema operativo donde ejecuta. Por ejemplo, no es infrecuente que sshd esté compilado con soporte de TCP-wrappers, que esté configurado para aceptar o rechazar el acceso a determinados usuarios o máquinas cliente, o simplemente que algún firewall intermedio no permita establecer la conexión.

Instalación y configuración inicial

1.-Abrir una terminal como root y escribir:

# Apt-get install openssh-server

2.-Cuando se termina de instalar viene con una configuración por default que debemos cambiar para tener una mejor seguridad para esto nos vamos al archivo /etc/ssh/sshd_config

# Vim /etc/ssh/sshd_config

El archivo es algo extenso solo se mencionaran las secciones que son de gran importancia:

El servicio SSH por default trabaja sobre el puerto 22 pero se puede cambiar:

Port 22 ## PUERTO POR DEFAULT

El parámetro ListenAddress especifica las direcciones de las interfaces de donde se van a recibir peticiones OJO con esta sección si vamos a accesar desde una red externa como la casa entonces dejarlo como esta sino pues hay que especificar la red:

ListenAddress 0.0.0.0 ## IP por Default para acceder desde cualquier red

Esta es la sección critica a mi manera de ver porque indicamos si el usuario ROOT puede acceder vía ssh yo en lo personal lo deshabilito y entro con un usuario del sistema diferente a root

PermitRootLogin no

También podemos especificar si se va a ejecutar aplicaciones graficas mediante SSH por ejemplo podemos usar VLC a través de SSH por si no son muy dados a usar comandos yo lo dejo como esta:

X11Forwarding no

Otra opción es permitir el acceso a ciertos usuarios de la siguiente manera:

AllowUsers tusuario, miotrousuario, uncolado

En fin son muchas las opciones que trae el archivo seria bueno que le echaran un vistazo y modifiquen lo que mejor crean ustedes que es para su servidor pero siempre pensando en la seguridad y los riesgos que conlleva hacer una mala configuración.

Por último reiniciamos el servicio:

# /etc/init.d/ssh restart

NOTA: Si están detrás de un firewall tienen que abrir el puerto que han especificado pero si están en DMZ pues les recomiendo que pongan reglas IPTABLE por seguridad.

Ahora a hacer un test desde un cliente usando el terminal:

# Ssh usuario@midominio

Cuando se logueen verán lo siguiente:

Cuando se loguea

También se pueden conectar desde un Windows utilizando la Putty

Loguearse usando Putty

Mas info sobre configuración: Aquí

Fuente: Aquí

Descargar el Putty: Aqui

Optimizando el servidor Mysql

Posted by Epsilon On enero - 9 - 2010

Trabajando en un proyecto personal (que pronto les contare en que consiste),  me surgió la necesidad de optimizar al máximo el servidor MySQL, es decir, necesitaba configurar el servidor MySQL  de una forma adecuada para que soportara todo el trabajo necesario.  Navegando en la red, me encontré con este articulo,  en el cual nos comparten una configuración óptima para nuestro servidor  MySQL (lo que estábamos buscando).  Implemente este archivo de configuración,  y desde ese momento mi servidor ha mejorado en cuanto a rendimiento, disponibilidad y eficiencia.

Por esta razón comparto el archivo de configuración por si  alguno tiene el mismo problema, en este archivo se hacen modificaciones principalmente, en el tamaño de la memoria,  conexiones concurrentes y otros aspectos:

[mysqld]
 socket=/path/to/mysql.sock
 datadir=/var/lib/mysql
 skip-locking
 skip-innodb
 # MySQL 4.x has query caching available.
 # Enable it for vast improvement and it may be all you need to tweak.
 query_cache_type=1
 query_cache_limit=1M
 query_cache_size=32M
 # max_connections=500
 # Reduced to 200 as memory will not be enough for 500 connections.
 # memory=key_buffer+(sort_buffer_size+read_buffer_size)*max_connections
 # which is now: 64 + (1 + 1) * 200 = 464 MB
 # max_connections = approx. MaxClients setting in httpd.conf file
 # Default set to 100.
 #max_connections=200
 #interactive_timeout=180
 interactive_timeout=100
 #wait_timeout=180
 #wait_timeout=100
 # Reduced wait_timeout to prevent idle clients holding connections.
 #wait_timeout=30
 wait_timeout=15
 connect_timeout=10
 # max_connect_errors is set to 10 by default
 #max_connect_errors=10
 #table_cache=256
 #table_cache=1024
 # Checked opened tables and adjusted accordingly after running for a while.
 table_cache=512
 #tmp_table_size=32M by default
 #thread_cache=128
 # Reduced it to 32 to prevent memory hogging. Also, see notes below.
 thread_cache=32
 # key_buffer=258M
 # Reduced it by checking current size of *.MYI files, see notes below.
 key_buffer=128M
 # Commented out the buffer sizes and keeping the default.
 # sort_buffer_size=2M by default.
 #sort_buffer_size=1M
 # read_buffer_size=128K by default.
 #read_buffer_size=1M
 # read_rnd_buffer_size=256K by default.
 #read_rnd_buffer_size=1M
 # myisam_sort_buffer_size=8M by default.
 #myisam_sort_buffer_size=64M
 # thread_concurrency = 2 * (no. of CPU)
 thread_concurrency=2
 # log slow queries is a must. Many queries that take more than 2 seconds.
 # If so, then your tables need enhancement.
 log_slow_queries=/var/log/mysqld.slow.log
 long_query_time=2
 [mysql.server]
 user=mysql
 basedir=/var/lib
 [safe_mysqld]
 err-log=/var/log/mysqld.log
 pid-file=/var/run/mysqld/mysqld.pid
 open_files_limit=8192

[mysqldump]
 quick
 max_allowed_packet=16M
 [mysql]
 no-auto-rehash
 # Remove the next comment character if you are not familiar with SQL
 #safe-updates
 [isamchk]
 key_buffer=64M
 sort_buffer=64M
 read_buffer=16M
 write_buffer=16M
 [myisamchk]
 key_buffer=64M
 sort_buffer=64M
 read_buffer=16M
 write_buffer=16M
 [mysqlhotcopy]
 interactive-timeout 
 [client]
 socket=/path/to/mysql.sock

Para  aplicar esta configuración,  lo podemos hacer de varias formas:

  • Abrimos el archivo /etc/mysql/my.cnf borramos todo su contenido y por ultimo pegamos el contenido de esta configuracion. ( No sobra decir que debemos guardar).
  • Por otro lado  podemos borrar el archivo /etc/mysql/my.cnf, descargamos el nuevo archivo desde aca y lo copiamos en la misma ubicacion.

nota: cabe aclarar que no soy un experto en el tema, simplemente doy mis comentarios apartir de la experiencia que tuve usando esta configuracion,   si alguien tiene un archivo my.cnf mas optimizado seria esplendido que lo compartiera con todos nosotros

Para mas informacion pueden ir a este enlace

Openfire termina la conexión de los usuarios!!!

Posted by mirphak On diciembre - 31 - 2009

En  RincónInformático nuestro amigo SpiderM@N  ya ha hablado de OpenFire, instalación, configuración, ventajas.

Uno llega a acostumbrarse a que OpenFire no moleste, y de hecho no lo hace, los problemas se presentan por configuraciones no óptimas,  por ejemplo,   la memoria de  Java por defecto para OpenFire  resulta suficiente  cuando se tienen pocos usuarios,   en caso contrario  estamos en problemas, tendremos a los usuarios  encima diciendo que no pueden  “chatiarr”, que  de repente  se les cae la conexión.

memoria Openfire termina la conexión de los usuarios!!!

Para solucionar ésto solo basta con modificar el script  openfire y cambiar los parámetros de la máquina virtual:

primero detenemos el servicio.

La ruta es  /opt/openfire/bin/ , editamos la línea

INSTALL4J_ADD_VM_PARAMS=”-Xms128m -Xmx256m

con el valor minimo y máximo en Megas.

Guardamos, iniciamos el servicio y listo.

mem2 Openfire termina la conexión de los usuarios!!!

HTTP Tunneling – Evadiendo los Firewall [Parte I]

Posted by Epsilon On septiembre - 23 - 2009

Generalmente los sysadmin, ya sea por seguridad o  diversas politicas, restringen el uso de servicios como:  FTP, IRC, SSH,  entre otros, dentro de la red privada la cual es de su responsabilidad.  En algunas empresas y universidades se puede observar  este tipo de limitaciones,  que sumadas con la implementacion de un Servidor Proxy, hacen que el usuario final, solo pueda navegar en la red.

Una imagen vale mas que mil palabras:

300pxgatewayfirewallsvg HTTP Tunneling   Evadiendo los Firewall [Parte I]

Sin embargo, hay ocasiones en las cuales necesitamos hacer uso de algun puerto o servicio dentro de una red privada. Para poder conectarse de forma correcta, debemos encapsular todo el trafico de determinado protocolo  a traves del unico servicio el cual no esta filtrado: el servicio web, a este concepto es a lo que se denomina http tunneling:

HTTP Tunneling is a technique by which communications performed using various network protocols are encapsulated using the HTTP protocol, the network protocols in question usually belonging to the TCP/IP family of protocols. The HTTP protocol therefore acts as a wrapper for a covert channel that the network protocol being tunneled uses to communicate.

HTTP Tunnel software consists of client-server HTTP Tunneling applications that integrate with existing application software, permitting them to be used in conditions of restricted network connectivity including firewalled networks, networks behind proxy servers, and NATs.

The HTTP stream with its covert channel is termed an HTTP Tunnel.

Teniendo claro el concepto de HTTP Tunneling, podemos ir a la practica, para aplicar esta tecnica de evasion, necesitamos  un software que se encargue de hacer todo el proceso, por fortuna, existe una aplicacion libre que nos hace este trabajo,  los usuarios de Debian y Ubuntu pueden descargarlo desde los repositorios y para  las demas distribuciones pueden descargar las fuentes haciendo click aqui

apt-get install proxytunnel

Despues de instalar nuestra aplicacion, procederemos usarlo, siempre es recomendable leer el manual de cada aplicacion para conocer sus todas opciones, parametros  y modo de uso, de esta forma  evitaremos posibles errores “tontos” de sintaxis.

El modo de uso es el siguiente:

Proxytunnel -a puerto -p proxy:puerto -d host:puerto -v
Donde:
-a -> Indica que puerto quedara a la escucha de conexiones.
-p -> debemos poner alli la direccion del proxy con su respectivo puerto
-d -> Aqui ponemos el servidor y puerto de destino
-v -> Modo verbose

Ahora un ejemplo claro, supongamos que deseamos ingresar al irc de la comunidad DragonJAR, como todos saben el IRC trabaja en el puerto 6667, debido al firewall de la red interna no podemos acceder de forma normal, pero si lo podemos hacer, con ayuda de nuestra aplicacion asi:

Proxytunnel -a 2525 -p ip_proxy:puerto -d irc.chatx.net:6667 -v

Eso es todo, si queremos ahora solo tendremos que conectarnos al irc, con los siguientes datos:

servidor: localhost
puerto:2525

Despues de esto, muchos de ustedes estaran pensando, como podemos abrir el msn o mejor aun, como podemos hacer que todo el trafico pase por otra maquina y podamos navegar sin restricciones?? La respuesta a esta pregunta es,  todo esto se puede hacer siempre y cuando dispongamos de un servidor SSH(obviamente con cuenta en el)  afuera de nuestra red, en teoria, debemos conectarnos al servidor SSH y decirle  que sirva de pasarela, es decir, que a traves de el, pase todo  el trafico. ¿Y como lo hacemos?

  1. SSH: En este paso es donde puede variar mucho la situacion dependiendo de las restricciones que tenga la red interna de tu trabajo o universidad, si el puerto 22 no esta bloqueado, estas hecho puedes saltar al paso numero 2. Pero no te preocupes si en tu red privada esta bloqueado el puerto del SSH podemos hacer uso de nuestra proxytunnel:
  2. proxytunnel -a 1000 -p ip_proxy:puerto -d ip_servidor-SSH:22 -v -q
    Con esto ya podemos conectarnos al SSH.

  3. Ya estamos seguros  de que podemos conectarnos al servidor SSH, ya sea de forma directa o haciendo el tunel, ahora debemos conectarnos al SSH e indicarle que servira como pasarela
  4. Para aquellos que no necesitaron tunnel

    ssh usuario@ip_Server -D 2000
    Donde el 2000 es el puerto que hara el tunel SSH.

    Para los que necesitaron del tunel para poder conectarse al servidor

    ssh -p 1000 usuario@localhost -D 2000
    Hay que tener en cuenta que el 1000 se refiere al puerto del tunel, y el 2000 es el puerto que hara el tunnel SSH

  5. Con esto debemos tener nuestra configuracion y pasarela de forma correcta, lo unico que nos queda es ir a nuestras aplicaciones (msn, pidgin, thunderbird) y configurarlas para que usen el proxy con los datos:
  6. direccion_proxy= localhost
    puerto= 2000
    socks5

Con esta tecnica podemos evadir muchas restricciones, pero no las restricciones web, es decir, no  podemos navegar libremente, ya que estaremos condicionados a las reglas del proxy, si estabas pensando implementar esta tecnica para poder abrir el facebook, youtube, hi5,  o lo que sea desde tu trabajo o universidad, ps debo decirte que no servira de mucho. Pero tranquilos no se alarmen, para todo hay solucion, en la segunda parte de este articulo, les mostrare como podemos  saltar las reglas del proxy y navegar libremente sin restricciones.

Guia – Aprendiendo a usar IRSSI

Posted by Epsilon On septiembre - 7 - 2009

En entradas anteriores, hemos hablado sobre  la  instalacion de un servidor irc,  sin embargo, en esta ocasion hablaremos de un cliente irc, se trata de Irssi un cliente muy potente para consola, y desarrollado bajo la licencia GPL:

Irssi fue desarrollado para funcionar principalmente en plataformas Unix, pero también funciona en Microsoft Windows a través de Cygwin o compilándolo de manera nativa a costa de la pérdida de algunas funciones.

Está escrito desde cero, sin usar código de otros clientes de IRC. Se destaca por ser altamente modificable en comparación con otros clientes, especialmente con los clientes GUI. Tiene la posibilidad de usar el lenguaje de guión Perl para aumentar la funcionalidad del cliente. Como así también posibilita la instalación de diversos themes para modificar la apariencia del cliente en cuanto a colores, formatos y notificación de eventos. Además, tiene soporte de IPv6, UTF-8 y conexión simultánea a varias redes. También admite conexiones SSH, lo que le hace un cliente irc totalmente configurable y seguro.

Irssi es un cliente IRC, pero con ciertos complementos, ha sido testeado y verificado que puede conectarse al protocolo del msn.

Ahora que sabemos, que es Irssi,  podemos entrar a estudiar su funcionamiento y manejo, esta entrada pretende ser una guia basica para el uso de este cliente,  asi que si deseas  entrar mas a  fondo te invito a  te des una vuelta por la pagina oficial y aprendas muchas mas opciones, configuraciones y comandos que trae esta excelente  aplicacion.

Configurando el inicio.

Cuando te vuelves usuario del IRC y especificamente del irssi es muy molesto y tedioso, conectarse al servidor todos los dias, haciendo la misma rutina siempre:

/connect servidor puerto
/join canal

Sin embargo, esto no es necesario ya que  en Irssi podemos configurar el inicio para que  al abrir la aplicacion se conecte automaticamente al servidor y al canal deseado. para hacer esto, abrimos irssi  y escribimos lo siguiente:

/network add red // creamos una red (es util si nos conectamos a varios servidores)

/server add -4 -auto -ircnet red irc.chatx.net 6667

-4 -> Indica que estamos usando Ipv4
-auto -> que se conecte al inicio
-ircnet nombrered -> Asignamos este servidor a la red que creamos anteriormente
irc.chatx.net -> servidor al que me quiero conectar
6667  -> puerto

Si usamos SSL:

/server add -4 -auto -ircnet red -ssl irc.chatx.net 9999

Ya al iniciar la aplicacion se conectara automaticamente al servidor que deseamos, el paso siguiente es hacer que al conectarse se una a un canal de dicho servidor:

/channel add -auto #DragonJAR red

En cualquier momento podemos listar los servidores y canales asi:

/server list
/server help -> comando de ayuda
/channel list

Ahora solo nos queda reiniciar nuestro irssi  y ver si los cambios se han hecho, si   las leyes de murphy no  aparecen, quiere decir que nuestro irssi se  conecta automaticamente a donde nosotros queremos.

Algunos comandos basicos.

En este momento ya debemos estar en nuestro canal de irc, y listos para comenzar con una buena conversacion y pasar un rato agradable, hablando con nuestros geeks,  para charlar es necesario saber algunos comandos como:

/msg usuario <mensaje>- Manda un mensaje privado a un usuario deseado
/me <mensaje>- habla en tercera persona
/nick  <nuevonick> – Cambias de nick
/close <usuario> .- cierra la ventana de ese usuario
/dcc <usuario> <fichero> – inicia la transferencia de un archivo con usuario
/exit – se desconecta del servidor
/whois <usuario> – Hace un whois a determinado usuario
/channel – muestra informacion sobre el canal y los usuarios que estan conectados.
/win # ventana – cambiar de ventana – tambien se puede hacer presionando la tecla ESC + el # de ventana

Eso son solo algunos de los tantos comandos que tiene irssi, son los basicos para poder empezar a charlar, e ir aprendiendo mas sobre esta aplicacion a nivel que vayamos conociendola.

Instalacion de themes.

Al igual que muchas aplicaciones, nuestro cliente permite la personalizacion gracias a la instalacion de nuevos themes, los cuales los puedes encontrar en la pagina oficial de irssi, la instalacion es muy sencilla solo basta descargar el paquete del theme y ponerlo en ~/.irssi/ y para probarlos hacemos lo siguiente en nuestra ventana:

/set theme nombrepaquete
tenga en cuenta que no lleva extension

Instalacion de Scripts

Al igual que themes,  irssi trae la posibilidad de instalar script, para adaptar nuevas funcionalidades al cliente, en la pagina oficial hay muchos scripts para todos los gustos, la instalacion es muy parecida a  los themes, descargamos el script deseado desde aca, lo copiamos a ~/.irssi/script/autorun/ y procedemos a la carga de nuestro script, asi que en nuestra ventana tecleamos:

/script load nombre_script -> Sin extension
/help script -> comando de ayuda.

Es importante tener en cuenta, que muchos de estos scripts necesitan algunos requerimientos funcionales, como archivos y librerias, por eso es recomendable, leer la documentacion, o en su defecto el codigo fuente del script, para que este funcione adecuadamente.

Configurar VirtualBox con conexion Brigde

Posted by Epsilon On mayo - 2 - 2009

virtualbox Configurar VirtualBox  con conexion Brigde

La mayoria de ustedes apreciados lectores, han escuchado hablar sobre VirtualBox he incluso algunos lo manejan a la perfeccion, sin embargo, al igual que Vmware, nuestro  software de virtualizacion libre, nos permite configurar la conexion de red del equipo virtual, dependiendo de lo que necesitemos.

La configuracion de la red en el equipo virtual por defecto  es NAT, esta es util  si lo unico que queremos es que nuestro sistema virtualizado  tenga salida a internet. Si por el contrario queremos que la máquina virtual sea parte de nuestra red física y de esta manera acceda a recursos de nuestra red de manera directa. debemos configurar en modo “BRIDGE“.

En Vmware es muy sencillo realizar el cambio de BRIDGE a NAT, pero  en VirtualBox,  se necesita un poco mas de trabajo por que   hay que crear una interfaz virtual, y  realizar el puente respectivo. tratare de explicar el procedemiento a seguir,  para que  el puente  funcione  solo por una sesion,  si desean que  el puente quede de forma permanente hay que  realizar algunos cambios en el archivo /etc/network/interfaces.

Lo primero que debemos hacer es  descargar algunos paquetes necesarios:

aptitude install uml-utilities bridge-utils

Esperamos a que apt-get haga su trabajo, cuando termine procedemos hacer el puente:

brctl addbr br0
brctl addif br0 eth0

Donde eth0 es la interfaz de la red local

ifconfig eth0 0.0.0.0
ifconfig eth0 up
ifconfig br0 192.168.0.1
ifconfig br0 up

Con esto hemos creado el puente, el siguiente paso es crear la interfaz virtual,  y configurar nuestro VirtualBox  para que use el puente:

VBoxAddIF vbox0 usuario_de_virtualbox br0

Vamos hacia la configuracion de nuestra maquina virtual, en la pestaña de red, seleccionamos “interface anfitrion” y en nombre de la interfaz ponemos  la que acabamos de crear, en este caso “vbox0″.

Por ultimo,  arrancamos nuestra maquina virtual y  configuramos la red (si es en windows, panel de control, conexiones de red, click derecho propiedades, y propiedades del protocolo tpc/ip ),   asignando una ip, la mascara de subred y la puerta de enlace:

Direccion IP 192.168.0.5
Mascara de subred 255.255.255.0
Puerta de enlace predeterminada 192.168.0.1

En los dns ponemos los que nos proporciona nuestro ISP.

Hemos terminado, con esto ya podremos hacer ping,  a la maquina virtual a la anfitriona y viceverza.  Cabe resaltar que en vmware es mucho mas facil, pero  si queremos usar software libre esta  es una posible solucion.

WiCD: Reemplazando network-manager

Posted by Heroe c0rtex On abril - 9 - 2009

wifilogo WiCD: Reemplazando network manager

Network-manager es el gestor de conexiones de red por defecto de las distribuciones Debian. Muchos hemos experimentado problemas a la hora de configurar y usar nuestras redes usando este gestor, además de las pocas opciones de configuración que incluye este.

WiCD es una alternativa a network-manager el cual incluye muchas más opciones de personalización tanto en la aplicación misma como en las redes que estemos usando, ya que nos permite crear perfiles para cada red en los que podemos definir los DNS a usar, la dirección IP, gateway, tipo de encriptación entre otras opciones más. Algunas otras capacidades que incorpora WiCD son:

  • Es independiente del entorno de escritorio que se esté usando, ya que no se requieren dependencias; por consiguiente funciona en XFCE, Enlightenment, Openbox, Gnome, etc.
  • Habilidad para conectarse tanto a redes alámbricas como inalámbricas.
  • Incluye varios esquemas de encriptación como WEP, WPA, WPA2, además de que brinda la posibilidad de agregar el tuy0.
  • Mayor información a la hora de listar las redes disponibles: Esquema de encriptación, BSSID, ESSID, Canal, etc.
  • Muchas más…

Instalación

Me centraré en la distribución Ubuntu para realizar la instalación, para otras distribuciones leer en la página oficial. Agregamos los repositorios:

sudo nano /etc/apt/sources.list

Agregamos al archivo las siguientes líneas

#Wicd
deb http://apt.wicd.net intrepid extras

Ahora agregamos la llave:

wget -q http://apt.wicd.net/wicd.gpg -O- | sudo apt-key add -

Recargamos apt e instalamos:

sudo aptitude update
sudo aptitude install wicd

En la instalación se nos informará de que se eliminaran los paquetes network-manager y network-manager-gnome (o KDE si es el caso), respondemos yes y esperamos a que termine la instalación.

Cuando termine, para ejecutar WiCD presionamos Alt+F2 y escribimos wicd-client. Nos fijamos en la bandeja del sistema y nos debe de aparecer el ícono, desde el cual podemos configurar la red a la que deseemos conectarnos. Por defecto WiCD se cargará automáticamente en cada inicio del sistema. Ahora dile adios a iwconfig XD