jueves, 31 de mayo de 2012

proxy inverso con nginx

En Cuba se ha puesto de moda el asunto este de el proxy inverso. Generalmente los hacen con squid y yo para no quedarme cheo decidí implementar uno. Los resultados fueron nefastos en cuanto a seguridad. Eso de tener un servidor proxy como proxy inverso no me gusto ni un poquito. Cuando lo terminé, es una herramienta par detectar vulnerabilidades web (cuyo nombre escapa de mi memoria) y por favor la vida. El proxy inverso llego a pedir autenticación para navegar y hasta mostró mi phpmyadmin y en fin, las nalgas en el cristal de la ventana como quien dicen.

Nginx, es un servidor web muy seguro y ligero creado por los rusos. Resulta que el hombre tiene soporte para proxy inverso.

El fichero /etc/nginx/nginx.conf queda así:


user                www-data www-data;
worker_processes    2;
error_log           /var/log/nginx/error.log warn;
pid                 /var/run/nginx.pid;
events {
    worker_connections  1024;
    use epoll;
}
http {
    # allow long server names
    server_names_hash_bucket_size 64;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    log_format main '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log          /var/log/nginx/access.log;
    # spool uploads to disk instead of clobbering downstream servers
    client_body_temp_path /var/spool/nginx-client-body 1 2;
    client_max_body_size 32m;
    client_body_buffer_size    128k;
    server_tokens       off;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         off;
    keepalive_timeout   5;
    ## Compression
    gzip on;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_proxied any;
    gzip_min_length  1100;
    gzip_buffers 16 8k;
    gzip_types text/plain text/html text/css application/x-javascript \
        text/xml application/xml application/xml+rss text/javascript;
    # Some version of IE 6 don't handle compression well on some mime-types, 
    # so just disable for them
    gzip_disable "MSIE [1-6].(?!.*SV1)";
    # Set a vary header so downstream proxies don't send cached gzipped 
    # content to IE6
    gzip_vary on;
    # proxy settings
    proxy_redirect     off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_max_temp_file_size 0;
    proxy_connect_timeout      90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;
    proxy_buffer_size          4k;
    proxy_buffers              4 32k;
    proxy_busy_buffers_size    64k;
    proxy_temp_file_write_size 64k;
    include             /etc/nginx/sites-enabled/*;
}

y el fichero /etc/nginx/sites-enabled/proxy
queda así:


server {
    listen       80;
    server_name  lexsa-proxy.lex-sa.cu;
    access_log  /var/log/nginx/proxy.access.log;
    error_log   /var/log/nginx/proxy.error.log;
    # proxy to Apache 2 and mod_python
    location / {
        proxy_pass         http://192.168.1.3:8080/;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 0;
        client_max_body_size       10m;
        client_body_buffer_size    128k;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}

Ojo con la linea señalada en rojo, indica a donde estará redireccionado el tráfico. 

Simple, seguro y ligero... esto si es vida.

jueves, 24 de mayo de 2012

enviar por piezas

Aveces queremos mandar algo por correo muy grande (por "N" motivos) y nos vemos obligados a divir el archivo en pedazos. Para los amantes de Mutt aquí les dejo un script que hace esa tarea muy bien. Pues divide, envía y luego confirma que todo fue enviado; e incluso cual fue la última pieza enviada. Solo es cuestión de correr:

script.sh /path/fichero.ext direcion@dominio.tld


#!/bin/bash
rm -rf /tmp/splitter/
When a FIRE monster(s) on your side of the field is destroyed and sent to the Graveyard, inflict 500 points of damage to your opponent's Life Points.mkdir /tmp/splitter
split -b 312000 $1
mv x* /tmp/splitter/
cd /tmp/splitter/
ALIST=( `ls -w1 /tmp/splitter/` )
RANGE=${#ALIST[@]}
for i in x* ; do
    ULTIMO=$i
    echo """
    Envio a las $(date +%H:%M)
    md5sum: $(md5sum $i)
    longitud $(du -h $i) """ |mutt -a $i -s "Envio: $i" -- $2
    echo $i enviado
    rm $i
    sleep 5
done
echo "Completo!"
echo """
Todos los pedazos fueron enviados.


  Nombre del ultimo: $ULTIMO


  Archivos enviados: $RANGE


Para armar el archivo, coloquelos todos en una carpeta.
Deben tener un nombre relativo a x??, luego ejecute:


cat x* > $1


Donde $1 sera el nombre del archivo resultante
luego de armar los $RANGE pedazos. Suerte!


"""| mutt -s "el ultimo fue $i" -- $2




Así de simple, niin helpompaa