Hola Matias, esto me lo paso un amigo, Santi que es un mostro!

Tal vez te sirva, dado que son recomendaciones acerca de como
aplicar filtros a encabezados y dem�s desde postfix.

Una abrazo

andr�s

-----------------------------------------------------------------------------------------

andres ha escrito:
>
> No s� si me falta algo o ya est� la configuraci�n realizada... en
> realidad em faltan cosas, te cuento:
> me cuesta entender el uso de las tablas Lookup : HASH y REGEXP para
> filtros.

no es dif�cil, la tabla la pon�s en un archivo externo y luego en el
main.cf pon�s la referencia.
Las tablas tipo regexp consisten en expresiones regulares, una por l�nea
(busc� expresiones regulares en google). Las tablas tipo hash son bases
de datos que se generan con el programa postmap.

Dos ejemplos:

1. para rechazar espamers conocido uso una tabla hash con expresiones
regulares que se comprueban en el encabezado de todos los mensajes que
entran en el servidor. En el main.cf pongo (da igual donde, ponelo al
final del fichero):

header_checks = regexp:/etc/postfix/header_checks

esta l�nea le dice a postfix que vamos a activar la "feature"
header_checks usando un fichero de expresiones regulares que se llamar�
header_checks y estar� en el directorio /etc/postfix
El fichero header_check lo creas con VI o cualquier editor de texto y
pon�s una expresi�n regular por l�nea seguida de la acci�n a realizar
con el mensaje que la cumpla, por ejemplo algo as�:

/^Subject: Enanito si, pero con que pedazo!/ REJECT
/^From:[EMAIL PROTECTED]/ REJECT
/^From:.*(l|L)(o|O)(n|N)(d|D)(o|O)(n|N)([0-9]?)@eresmas.com.*/ REJECT

la expresi�n regular va encerrada entre los /, y REJECT hace que el
mensaje se rechace. Los caracteres especiales que uso significan:

^  al comienzo de una l�nea
.* cualquier caracter repetido cero o mas veces
(a|b) o la letra a o la letra b
[0-9] cualquier cifra entre cero y nueve
?  cero o una aparici�n del caracter que le precede.

por lo tanto la primera expresi�n significa: si hay una l�nea que sea
exactamente "Subject: Enanito si, pero con que pedazo!"

la segunda significa: la l�nea empieza por "From:" seguido de cualquier
cosa, seguido de "@infoidiomas.com" seguido de cualquier cosa. Es decir
que rechazo todo el correo que tenga como remitente cualquier direcci�n
de ese dominio.

la tercera la hice (con ayuda de aep) para rechazar el correo de uno
spammers que usaban varias direcciones del tipo

[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
etc...

rechaza mensajes que en su encabezado tengan una l�nea que empiece por
"From:", seguido de cualquier cosa, seguido de una ele may�scula o
min�scula, seguido de una o may�scula o min�uscula, seguido de una ene
may�scula o min�scula, (.....) seguido o no de una cifra entre cero y
nueve, seguido de "@eresmas.com", seguido de cualquier cosa.
Esto de las expresiones regulares es un l�o increible, adem�s hay varias
versiones: las de perl, las de procmail, etc... Creo que postfix usa las
de perl.

La tabla para usar headers_checks puede ser tambi�n de tipo pcre, en vez
de regexp (=regular expresion). Pero no tengo ni idea de como es ese
formato.

Casi todo lo dicho sirve para body_checks, salvo que en ese caso las
expresiones regulares se verifican en el cuerpo del mensaje, la
principal utilidad puede ser rechazar mensajes con determinados tipos de
archivos adjuntos. Chequear todos los cuerpos de los mensajes entrantes
requiere mas recursos de hardware que chequear los headers, as� que hay
que hacer bien la expresi�n regular para evitar un consumo excesivo de
CPU y RAM (aunque en tu caso esto no debe ser relevante). Tambi�n puede
ocurrir que una expresi�n mal hecha provoque el rechazo de TODO el
correo entrante, as� que despu�s de cambiar algo hay que estar atento a
los logs, por ejemplo con

tail -f /var/log/syslog |grep reject

Pod�s optar por usar s�lo uno de los m�todos (o body_checks o
headers_checks), usar los dos o no usar ninguno. Si no los vas a usar
ten�s que comentar la l�nea correspondiente del main.cf (y un "postfix
reload" despu�s) pero no hace falta que borr�s los ficheros de
expresiones regulares.


2. segundo ejemplo. Para definir los dominios a los que les damos correo
y sus usuarios virtuales uso una tabla hash. En main.cf se pone

virtual_maps = hash:/etc/postfix/virtual

que activa la "feature" virtual_maps usando un fichero tipo hash que se
genera a partir de un fichero llamado virtual localizado en /etc/postfix
Ojo, postfix lo que lee en realidad es el fichero
/etc/postfix/virtual.db
para generarlo hacemos

postmap /etc/postfix/virtual

y despu�s postfix reload

El contenido del fichero virtual (el que editamos con VI o cualquier
editor de texto) es algo as�

congde.org 1
cgt.es 2
cnt.es 3
[EMAIL PROTECTED] administracion
[EMAIL PROTECTED] coordinadora
[EMAIL PROTECTED] info_cgt
[EMAIL PROTECTED] info_cnt

Primero va la lista de dominios que alojamos. NO hay que poner nuestro
dominio principal (aquel definido en mydomain del main.cf, en tu caso
menudeldia.net), s�lo los que consideramos secundarios.
El nombre de dominio tiene que ir seguido de un espacio en blanco
seguido de cualquier cosa (se suele poner un n�mero para tenerlos
numerados).
Despu�s pon�s en cada l�nea una direcci�n de correo seguida del usuario
local (existente en el /etc/passwd) al que se le entregar�n los
mensajes.
En el ejemplo vemos que esto nos permite tener las mismas direcciones
(lo que va antes de la @) para dominios diferentes. En el programa de
correo de la persona que lea [EMAIL PROTECTED] tendr� que poner info_cgt como
nombre de usuario para el servidor de correo entrante.
Todos los usuarios reales (del /etc/passwd) reciben el correo que vaya a
su nombre @dominio_principal (el de mydomain). Eso hace que tengamos
direcciones raras como [EMAIL PROTECTED] (en el caso de revolware),
pero da igual porque nadie la va a usar.


> Encontre est� bibliograf�a, que est� basante bien, pero no entiendo si
> d�nde van las tablas
> Lookup, es decir los ficheros HASH y REGEXP
> -------------------------------------------------------------
> Esta es la bibliograf�a:
>
>             Hay algunas de las opciones de Postfix que requieren saber
> que son
>             tablas lookup (lookup tables). Son tablas, contenidas en un
> formato
>             que Postfix define como diccionario.
>
>             Estos diccionarios pueden ser de la siguiente forma:
>               regexp:/file/name
>               pcre:/file/name
>               hash:/file/name
>               mysql:/file/name.cf
>             Existen mas, pero estos son los mas conocidos.
>
> Ac� no comprendo si tengo que crear esto ficheros con VIM... si fuera
> as� /file/name
> �es la ruta d�nde se encuetra el fichero que voy a crear y definirle un
> nombre X?

en principio con VIM edit�s las regexp y el fichero de origen de la
tabla hash. Para tipo mysql el fichero que se crea tiene en realidad los
datos de acceso (usuario, pass, base de datos, etc...) a una base en
MySQL. Esto se puede usar para tener usuarios de correo completamente
virtuales, es decir no existen en el /etc/passwd si no que tenemos en
una tabla de MySQL su nombre, su contrase�a, el nombre de su buz�n y no
se que cosas mas. Claro que esto tambi�n lo tiene que entender el
servidor POP e IMAP. La ventaja es velocidad (se lee mas r�pido una base
de datos que un fichero de texto como el /etc/passwd) y la seguridad (no
ten�s usuarios reales o ten�s los justos).


>             Pcre y Mysql requieren que Postfix se recompile con este
> soporte.
>

El tipo pcre no se que es.



>             Las tablas (maptype) son archivos (mapname) con separacion
> por comas
>             o espacios (o una dbase) donde se crea una expresion regular
> y un
>             resultado. Los resultados pueden ser los siguientes:
>
>             OK : permitida la accion
>             REJECT : accion rechazada
>             RELAY : permite relay
>             ERRORNO razon : un numero de error y una razon del error
>
>             Algunos de los numeros de errores que se deben devolver son:
>
>             450 : Unknown address - DNS error
>             554 : UCE restriction
>             504 : Non-FQDN sender

esto viene a ser las tablas hash



>             Regexp y PCRE (Perl Common Regular Expressions) son muy
> similares en
>             su uso.
>
>             Una tabla regexp puede ser, por ejemplo:
>
>             /[EMAIL PROTECTED]/      OK
>             /[EMAIL PROTECTED]/            RELAY
>             /[EMAIL PROTECTED]/    REJECT
>             /hahaha/                     550 Esto es un vil SPAM
>
> �Est�s tablas van en alg�n lugar especial?, las tengo que crear con VIM
> o
> con qu�?
>
>             Una tabla HASH es de la siguiente forma:
>
>             (patron) (separacion) (accion)
>
>             y recuerda bastante la generacion de /etc/mail/access de
> Sendmail.
>
>             Una separacion puede ser un blanco (espacio).
>             Un patron puede venir de una base de datos, tabla NIS, SQL
> etc. de
>             la siguiente forma:
>
>             [EMAIL PROTECTED]
>             nombre.de.dominio
>             usuario@
>             numero.ip.de.cliente, numero.ip.de , numero.ip , numero :
>             direcciones de red.
>
>             Las acciones son de la siguiente forma
>             [45]XX text : rechaza el mensaje que aparezca en el patron y
>
>             responde con el codigo y con el texto indicado.
>             REJECT : simplemente rechaza. Un error generico es
> desplegado
>             OK : acepta.
>
>             Un ejemplo de una tabla HASH puede ser:
>             midominio1.com                OK
>             [EMAIL PROTECTED]    REJECT
>             spammer@                      REJECT
>             192.168.1.99                  450 Unresolved
>
> La tabla HASH la tengo que crear con VIM?, d�nde dobo ubicarla, es
> un fichero con n mbre determinado y sin extensi�n alguna no?


bueno, con lo que te explique arriba queda mas o menos aclarado. La
historia es que no ten�s porque crear todas las tablas que postfix
soporta. Yo s�lo a�ad� a la configuraci�n por defecto headers_checks,
body_checks y virtual.
Tambi�n tengo por supuesto

alias_maps = hash:/etc/aliases

que tiene la misma funci�n que el aliases de sendmail. Cada vez que lo
modificamos creamos el aliases.db ejecutando newaliases (en vez de
postmap).



> A la vez cree:
>
> Filtrado de cabeceras as�:
>
>             header_checks = regexp:/etc/postfix/header_check
>
>             y creamos el archivo /etc/postfix/header_check con
>             /^to: [EMAIL PROTECTED]/       REJECT
>
>             Seg�n la bibliograf�a evita que direcciones del tipo
> [EMAIL PROTECTED],
>             [EMAIL PROTECTED], [EMAIL PROTECTED] puedan o enviar o
> recibir o
>             usar el servidor.
>
>             Filtrado de contenido
>
>            body_checks
>
>             /keyword/       REJECT
>
>             Esto evitara que alguien envie un correo que contenga en
> alguna
>             parte del BODY del mensaje la palabra "keyword", por ejemplo
>


bien, �hiciste pruebas para ver si funciona? desde el windows intent�
mandar un mensaje con la palabra keyword a ver si te lo rechaza, y
mientras mir� el /var/log/syslog
El ejempo de header_checks es un poco raro, pues es para el destinatario
del mensaje. Cambialo por

/^From:[EMAIL PROTECTED]/ REJECT

y enviate un mensaje desde esa cuenta de hotmail. Aunque mejor te
recomiendo que dej�s los headers_checks y body_checks para mas adelante
(comentalos en el main.cf). Primero deber�a funcionar bien la entrega de
correo para direcciones @menudeldia.net y el env�o para cualquier
dominio de internet, si eso no est� bien y luego te fallan los filtros
headers y body no vas a saber que es lo que est� mal en realidad.

Otra cosa, dec�s

> Seg�n la bibliograf�a evita que direcciones del tipo [EMAIL PROTECTED], 
> [EMAIL PROTECTED], [EMAIL PROTECTED] puedan o enviar o recibir o usar el 
> servidor.

postfix no tiene nada que ver con recibir el correo (con que el usuario
reciba sus mensajes en su programa de correo), de eso se encarga el
servidor POP o IMAP. Cuando decimos que se rechazan los mensajes quiere
decir que se rechaza el env�o (para la gente que te use como servidor de
correo saliente smtp en su programa de correo) y que se rechaza la
entrega desde otros servidores (de smtp a smtp)



> Me falta algo m�s?, estos ficheros lo ubique dentro del /etc/postfix
>
> Otra cosa es que no se como y d�nde debo crear la tabla de usuarios que
> tendran cuenta de mail, es decir d�nde creo la centa de un usuario
> ([EMAIL PROTECTED])

entendiendo que pepito.com es uno de tus dominios secundarios (que est�
declarado en el virtual).
Lo mas f�cil es crear el usuario pepito en el /etc/passwd (sin shell) y
luego a�adir al /etc/postfix/virtual lo siguiente

[EMAIL PROTECTED] pepito

y ejecutar

postmap /etc/postfix/virtual
postfix reload

Pero claro, que ocurre si quer�s tener tambi�n [EMAIL PROTECTED] y
que sean dos cuentas separadas. En ese caso el usuario que corresponde a
[EMAIL PROTECTED] deber�a ser algo distinto que pepito, pues al ser
menudeldia.net el dominio principal no le pod�s poner alias. As� que
ser�a mejor esto:

[EMAIL PROTECTED] pepitocom

y te reserv�s el usuario pepito por si alg�n d�a te hace falta para
crear [EMAIL PROTECTED]


>
> Bueno, nada m�s =)
>
> Gracias
>
> andr�s

de nada, as� refresco mis conociemientos. Estos mensajes me los guardo.

Santi


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Responder a