viernes, 27 de enero de 2012

postfix con sasl

Hoy en día no concibo un servidor de correo con postfix y sin autenticación... es como un zapatero sin un barco. El otro día un paisano me pregunta que como configurar sus postfix con autenticación SMTP. En mi didiwiki tengo los pasos que di durante la instalación asi que abusaré de mi memoria para ver como armo el muñeco.


Primero y principioso, instalar los paquetes necesarios. En debian todo es muy fácil.


aptitude install postfix-tls libsasl2-modules sasl2-bin


Ahora editamos el fichero de configuración:


mc -e /etc/default/saslauthd


 # arranque autamatico
 START=yes
 # "shadow" or "sasldb", like this:
 MECHANISMS="shadow"
 PARAMS="-m /var/spool/postfix/var/run/saslauthd/"
 PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"


Ahora le decimos a smptd que funcione de una forma diferente. En /etc/postfix/sasl/smtpd.conf ponemos esto otro:


 saslauthd_path: /var/run/saslauthd/mux
 pwcheck_method: saslauthd
 mech_list: plain login


Si te pones de suerte alomejor puedes quitar plain, yo tuve esa suerte pero se de gente que no. Ahora toca decirle a postfix que pida nombre de usuario y contraseña.


#sasl
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtp_sasl_auth_enable = no
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination


Ojo, no tiene que remplazar el cotenido de su "smtpd_recipient_restrictions" la cuestión es que estas dos deben estar de última, póngale encima todo lo que se le ocurra. Ya que estamos asegurando, pongamos a postfix a funcionar como chroot. Dicen que eso se hace así. En /etc/postfix/master.cnf debemos tener algo como esto:


smtp inet n - - - - smtpd


Cámbielo por esto:


smtp inet n - y - - smtpd


Note una "y" en lugar del segundo "-"


Ahor creamos el directorio para saslauthd. Mucho ojos, hay que hacer un paso raro con los permisos.


mkdir -p /var/spool/postfix/var/run/saslauthd
chown root.sasl -R /var/spool/postfix/var/
dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd


Para que postfix y sasl se entiendan, postfix debe pertencer al grupo sasl


adduser postfix sasl


Bueno solo faltaría reinicera postfix.


/etc/init.d/postfix restart

jueves, 26 de enero de 2012

evitar remplazo de dominio

Resulta que SASL no es tan bueno nada. Con postfix en estado natural podemos autenticarnos con un usuario y mandar con otro. Pregunte en la lista de correo local si había una solución  pero acabe respondiéndome yo mismo. Para que tenga una idea de lo que hablo:


AUTH fulano@dominio.tld
MAIL FROM: siclano@dominio.tld


Y se envia sin problemas porque ya autenticamos como fulano, no importa como salga el correo. Supuestamente postfix tiene como controlar eso con:


reject_unauthenticated_sender_login_mismatch
reject_authenticated_sender_login_mismatch
reject_sender_login_mismatch




Pero ni mierda!



No funciona. Sucede algo incrible. Cuando envias como fulano. Te dice que fulano, no ortenece al usuario fulano. Apesar de que tengan el nombre IDENTICO. Entonces...


Como resuelve?


Simple pero no sencillo. Primero necesitamos postfix con las extensión pcre. Si eres usaurio de debian te salvaste. 


aptitude install postfix-pcre


Con eso tendremos la extensión de perl para postfix, ahora podemos crear ficheros con expresiones regulares de perl. Ahora le agregamos esto al main.cf


smtpd_sender_login_maps = pcre:${config_directory}/sender_login.pcre



...y conjuramos este echizo. En el pertinente archivo /etc/postfix/sender_login.pcre le ponemos esto:


/^(.*)@tudominio\.tld$/ $1



Entonces es cuando viene a jugar la sentencia que ya habiamos visto.


smtpd_recipient_restrictions =
     [...]
     reject_sender_login_mismatch,
     permit_sasl_authenticated


OJO, debe ir antes de permit. Ya solo faltaría reinicar postfix.

jueves, 12 de enero de 2012

HP P1006

Decir HP-P1006 es una mala impresora sería decir muy poco. Habría que buscar un grado superlativo de la palabra "desastroso" para entonces decírselo a la impresora. Realmente echarla a funcionar con foo2zjs es algo bien sencillo si tienes acceso a internet. Primero descargamos el código fuente en este link. Descomprimimos el fichero y nos posicionamos en la carpeta. Se compila como lo mas normal del mundo.



make

Después viene el toque mágico. Dentro del directorio resultante de la descompresión ejecutamos:

./getweb P1006


Esto sirve para las Pxxx y para otras muchas mas extrañas.

lunes, 9 de enero de 2012

squid autenticando con IMAP

El archiconocido servidor proxy squid, tiene muchas maneras de autenticar. Mucha gente lo hace contra mySQL o contra ldap. Gente muy obtusa y estrambótica (como yo) suelen usar métodos de autenticación mas sencillos que ldap. Por ejemplo, si ya tenemos un server de correo, porque usar otro? Acá conozco algunos coterraneos míos que montan un ldap para el server de correo y otro para el de navegación. GENIAL! :-D Es como decir, pasar trabajo al cuadrado.



Bueno en cuestión, la idea es simple y la implementación sencilla. El server proxy, usará como autenticador externo una aplicación que consultara un servidor imap. El autenticador de squid quedaría así.

auth_param basic program /usr/local/sbin/imap.py
auth_param basic children 5
auth_param basic realm Autenticacion de LEX-SA para la navegacion
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl ncsa_users proxy_auth REQUIRED

El script imap.py lo pueden recoger en este link. De todas formas lo pegare aquí:


#!/usr/bin/env python
from imaplib import IMAP4
import sys
#IMAP server against which we authenticate
server="127.0.0.1"
port=143
while 1:
 line=sys.stdin.readline()[:-1]
 [user,password]=line.split(' ')
 p=IMAP4(server,port)
 try:
  p.login(user,password)
 except:
  sys.stderr.write("ERR authenticating %s\n"%user)
  sys.stdout.write("ERR\n")
  sys.stdout.flush()
  continue
 sys.stderr.write("OK authenticated %s\n"%user)
 sys.stdout.write("OK\n")
 sys.stdout.flush()

viernes, 6 de enero de 2012

policyd-light y posftix

Hay un software llamado policydaemon que es verdaderamente potente. También hay hay una versión de muerde y huye que si bien no es la máxima cosa al menos hace bien el trabajo. Es un script de perl "sencillo" Lo que hace es consultar las listas de RBL mas clásicas. Por eso entendemos a: njabl.org, spamcop.net, spamhaus.org y ix.dnsbl.manitu.net Con el de averiguar si el que veía esta cachado en una de ellas. Ahora usted dirá "postfix hace eso" pero este soft, aparte de tener una cache propia, consulta todas las listas de un solo palo; dando una respuestas más rápida. Como ya es normal, no hay una razón especial para usar un software que recomiendo.


Como dirían los miserables callejeros "manos a las sobras" Primero descargamos el script:


wget http://www.policyd-weight.org/policyd-weight


Ahora lo ponemos de manera apropiada para que se ejecute; hay que crearle un usuario llamado


useradd polw


Ahora lo hacemos que parezca una aplicación.


mv policyd-weight /usr/local/bin/policyd-weight
chmod 0555 /usr/local/bin/policyd-weight
chown polw /usr/local/bin/policyd-weight


Ahora hay que hacerle un ficherito de configuración:


/usr/local/etc/policyd-weight.conf
chmod 0644 /usr/local/etc/policyd-weight.conf

y a ese fichero le ponemos lo siguiente:

$dnsbl_checks_only = 1;
$TCP_PORT = 12525;


Por último, vamos al postfix y le configuramos la política de restricción. En la sesión de "smtpd_recipient_restrictions" le agregamos una linea que diga:

check_policy_service inet:127.0.0.1:12525,

Con eso, miramos el log y verán como va filtrando y probado cada correo que entre. El programa debe arrancar con cada inicio del sistema, si el servidor arranca sin policyd andando, rechazará todo los correos. Puedo palear este problema poniendo en /etc/rc.local


/usr/local/bin/policyd-weight start

Otra opción seria poner eso en /etc/init.d/postfix bajo la linea que dice:




start)
log_daemon_msg "Starting Postfix Mail Transport Agent" postfix


Así arranca junto con postfix.








jueves, 5 de enero de 2012

weechat & bitlbee

Como hago con todas las entradas, para empezar; justificaré el porque usar un software estrambótico del cual quizás usted nunca a oído hablar o no se convence de una buena razón para usarlo.


Un buen motivo para usar weechat es que mi computadora tiene 64 de RAM y encontrar un buen cliente IRC es una tragedia, para que hablar de un cliente Jabber. Otra gran ventaja de weechat es que puede usar proxy. Un amigo me dijo que lo usaba en la consola de Geany mientras programa con php pero no me siento muy cavernícola como para sugerirlo. De los clientes de consola, irssi es uno de los mas famosos pero en mi  arrogante opinión este está mejor. Mas extensible y el auto-completamiento está violento.


Nota preliminar:
Esta entrada se enfocará en configurar un weechat, en vista a un bitlbee previamente instalado y corriendo. Si no tienes uno echa un vistazo a está entrada o simplemente usa el de Wilmer como sale en el presente manual.


Mientras tanto, pasemos a la parte fácil de debian.


aptitude install weechat


Se especula de una interfaz Qt pero yo desconozco del tema por falta de interés. Entonces! ejecutamos weechat-curses. Abremos caido ante la interfaz principal de weechat. Ahora todo es cuesiton de "comandos" estilo IRC.


weechat-curses


Puede crear cuantos servidores le venga en gana pero primero crearemos un server llamado "bitlbee" para no confundirnos.


 /server add bitlbee testing.bitlbee.org/6667 -autoconnect


El último parámetro hace que se conecte de manera automática cuando arrancamos weechat, realmente muy útil. Pero aqui viene lo que mas me gusta. Con esto se autenticara en bitlbee de manera automática.


 /set irc.server.bitlbee.command "/msg &bitlbee identify mipassword"


Explico en letras de molde. Esto es decir la cadena de texto "identify mipassword" en el canal llamado "&bitlbee". Practicamente nos autenticara en el bitlbee sin necesidad de la intervención del usuario. Usted valore si le parece conveniente o seguro.


Ahora fijamos el nick a nivel local, es decir para este servidor somos "Fulano" Quizas usted tenga un nick muy terrorista y macabro para cada servicio, pero prefiere ver su nombre constante y sonante en el canal &bitlbee


/set irc.server.bitlbee.nicks Fulano


Eso es con respecto a bitlbee. A weechat como tal, yo le configuro algunas cositas. Por ejemplo, el mensaje que nos mostrara al partir de un canal:


/set irc.network.default_msg_part "Mientras lees esto, un gatito muere"
/set irc.network.default_msg_quit "Volvere en la proxima reencarnación"


Wee-chat por defecto usará nuestro nombre de usuario para autenticar, prefiero caerme de culo por un barranco antes de ponerle el nombre de usuario local a Internet.


/set irc.server_default.nicks Catracho-418
/set irc.server_default.username cucarachon
/set irc.server_default.realname Fulano_Letal


Ahora y siempre me ha parecido que la pantalla de weechat esta muy apretada, mi pantalla es de 1024x768. Con esto, ganamos espacio.


/set weechat.bar.nicklist.size 12
/set weechat.bar.nicklist.size_max 15
/set weechat.look.buffer_time_format %H:%M
/set weechat.look.nickmode off


...y estamos listos para usar "jabber al estilo retro".




Superviciencia con weechat y atajos de teclado:


weechat es un clasico cliente IRC de consola pero realmente si no tiene experiencia con este tipos de cosas encontrara grandes estorbos. Aquí les daré uno de los mas básicos.


Primero y "principioso": Cambios de buffer. Los buffer son las "ventanas" del IRC. Una puede ser la del servidor, otra un canal y otra una querry. Con Ctrl+N avanzamos a la siguiente pero hay algo mucho mejor. El llamado "smart Jump", literalmente salto inteligente. Esto se hace con "Alt+A" y nos conduce al próximo buffer con mensajes sin leer.  CUando todos sean leídos, tocamos por última vez Alt+A y nos traerá al primero del cual salimos. Muy útil.


Otra caracteristica potente de weechat es el completamiento. Autocompleta incluso configuraciones. Pero vallamos de los básico a lo complejo.


Pongamos el caso de que estamos en un canal. Tenemos un compañero que se llama "ammattikorkeakoulu" Pero teclear su nick resulta incomodo porqueee... bueno por mil razones. En ese caso tecleamos las dos o tres primeras letras.


amm[Tab]


Entonces tocamos la tecla "Tab" o Tabulador, es decir la de las dos flechitas que esta sobre el "CapsLock" y el como todo cliente IRC decente, nos completara el nick.


Pero tenemos el caso de que podemos completar comandos. Por ejemplo,
tenemos el comando /connect


/con[Tab]


y pondrá


/connect


Con un espacio al final y todo. En weechat, tambien las opciones de
configuracion son autocompletables.


/set ir[Tab]


Ahí nos saldrá seguramente:


/set irc.color.input_nick


Tienes dos opciones. Una es ser menos vago y tecleará:


/set irc.server.bi[Tab]


Esto completaría:


/set irc.server.bitlbee.addresses


La otra opción hubiera sido tocar el Tabulador de nuevo. Así es el caso que cuando con completo hasta .addresses. Tocamos Tab de nuevo y saldrá sucesivamente.


irc.server.bitlbee.autoconnect
irc.server.bitlbee.autojoin
irc.server.bitlbee.autoreconnect
irc.server.bitlbee.autoreconnect_delay
irc.server.bitlbee.autorejoin


...y así sucesivamente. Podemos completar de todo. Por último agregaré que si queremos ayuda para los comando, solo tenemos que pedirla.


/help


Ahi saldrá toda una lista de comandos. Con poner:


/help server


Veremos la ayuda especificamente del comando "/server" Generalmente a usar ayuda saldrá una bola de cosas. Puedes subir y bajar el texto que el buffer a dejado atras con PgUp y PgDn sucesivamente o bien puedes buscar con Ctrl+R


Hasta aquí por hoy. Algún comentario?