Restricciones de envío y recepción a dominios cu con Postfix
22 comentariosSí, una de las primeras tareas que se asignan a los administradores de red en empresas, para muchos una política un poco restrictiva (mi opinión es neutral): permitir a cierto de grupo de usuarios enviar y recibir correo a cualquier dominio y a otro grupo solo .cu.
Quizá sea una tarea bastante engorrosa o por lo menos para entenderla al inicio es un poco difícil, es por ello que en esta entrada trataré de explicar cómo implementar estas políticas con Postfix.
Clases de restricciones
El primer paso es crear clases de restricciones, en este caso usando expresiones regulares.
Agregar las siguientes líneas en el archivo principal de configuración de Postfix (/etc/postfix/main.cf)
smtpd_restriction_classes = cu-in, cu-out, int-in, int-out
cu-in = check_sender_access regexp:/etc/postfix/cu, reject
cu-out = check_recipient_access regexp:/etc/postfix/cu, reject
int-in = check_sender_access regexp:/etc/postfix/int, reject
int-out = check_recipient_access regexp:/etc/postfix/int, reject
La clase cu-in se encargará de filtrar el remitente y cu-out el destinatario, lo mismo pasa con int-in e int-out.
Crear los archivos con las expresiones regulares.
/etc/postfix/cu
/\@*\.cu$/ RELAY
/\@*/ REJECT El mensaje no fue entregado: ACCESO DENEGADO
/etc/postfix/int
/\@*/ RELAY
Ejemplo:
El usuario foo tiene permisos para enviar y recibir correo solamente a dominios .cu y desea enviar un mensaje a bar@dominio.tld.
Cabeceras del mensaje
...
From: foo@dominio.cu
To: bar@dominio.tld
...
Postfix filtra del encabezado el campo To (destinatario) porque el mensaje saldría de nuestro SMTP. Como la dirección de correo del destinatario no coincide con la expresión regular, Postfix lo rechaza inmediatamente.
De otro modo si alguien con dirección de correo bar@dominio.tld envía un mensaje a foo@dominio.cu, Postfix chequea el From (remitente) y como no coincide con la expresión regular entonces el mensaje es rechazado de la misma manera.
Base de datos con los nombres de usuarios que son afectados por las políticas
La base de datos que contiene el par dirección de correo y restricción puede ser de tipo, hash, MySQL, LDAP, sqlite, en este caso usaremos hash.
Agregar las siguientes líneas en el archivo de configuración principal de Postfix, dentro de las secciones smtpd_sender_restrictions y smtpd_recipient_restrictions respectivamente.
smtpd_sender_restrictions =
...
check_sender_access hash:/etc/postfix/access-out.cf,
...
smtpd_recipient_restrictions =
...
check_recipient_access hash:/etc/postfix/access-in.cf,
...
Posteriormente crear los archivos /etc/postfix/access-out.cf y /etc/postfix/access-in.cf con el siguiente contenido.
/etc/postfix/access-out.cf
foo@dominio.cu cu-out
bar@dominio.cu int-out
/etc/postfix/access-in.cf
foo@dominio.cu cu-in
bar@dominio.cu int-in
En este caso el usuario foo solo puede enviar y recibir a dominios .cu y el usuario bar puede enviar y recibir de cualquier dominio.
Por último generar las bases de datos y recargar Postfix
postmap /etc/postfix/access-in.cf
postmap /etc/postfix/access-out.cf
postfix reload
Comprobaciones
Para comprobar que las restricciones funcionan lo podemos hacer a través del comando postmap
postmap -q foo@dominio.tld regexp:/etc/postfix/int
RELAY
postmap -q foo@dominio.cu regexp:/etc/postfix/int
RELAY
postmap -q foo@dominio.tld regexp:/etc/postfix/cu
REJECT El mensaje no fue entregado: ACCESO DENEGADO
postmap -q foo@dominio.cu regexp:/etc/postfix/cu
RELAY
postmap -q foo@domain.cu hash:/etc/postfix/access-in.cf
cu-in
postmap -q foo@domain.cu hash:/etc/postfix/access-out.cf
cu-out
postmap -q bar@domain.cu hash:/etc/postfix/access-in.cf
int-in
postmap -q bar@domain.cu hash:/etc/postfix/access-out.cf
int-out
Notas:
Estas restricciones pueden ser bastante flexibles y lograr otras cosas como filtrar por dirección de correo o dominios exactos.
Esta semana a través de los sitios que lee “elcolimador” descubrí este blog (muy bueno, sobre todo porque nos permite a los usuario que solo tenemos navegación nacional acceder a contenidos “educativos – instructivos” que normalmente son muy frecuentes en internet) y creo que ya me he leído todos los artículos. Con el tema de Postfix primeramente quisiera publicar la forma en que tengo implementado las restricciones para enviar / recibir de dominios diferentes al .cu:
smtpd_restriction_classes = local_only, input_local_only
local_only = check_recipient_access hash:/etc/postfix/local_domains, reject
input_local_only = check_sender_access hash:/etc/postfix/local_domains, reject
smtpd_sender_restrictions =
check_recipient_access hash:/etc/postfix/restricted_users_input,
permit_mynetworks,
pcre:/etc/postfix/sender_access_prohibido
smtpd_recipient_restrictions =
check_sender_access hash:/etc/postfix/restricted_senders
#permit_sasl_authenticated
permit_mynetworks
#check_relay_domains
reject_unauth_destination
#reject_unknown_recipient_domain
Donde los las bases de datos hash lo que contiene es: usuario@mydominio local_only y usuario@mydominio input_local_only para enviar y recibir respectivamente.
Ahora lo que quisiera implementar desde el Postfix, no desde el servidor de correo (tengo Exchange) es limitar a un grupo de usuarios el envío y recepción incluso al dominio .cu es decir este grupo de usuarios solo tendría correo dentro de mi dominio.
Nuevamente gracias por el Blog
Gracias por el comentario, lo que quieres se puede hacer fácilmente con Postfix, permitir a ciertos usuarios en envío y recepción de correos dentro de tu dominio. En cuanto tenga el tiempo armo el post.
Saludos
EDITADO:
Como mismo se explicó en el post se puede resolver el problema, solamente se necesita crear otras clases de restricciones y en los filtros usar lo siguiente:
/\@tudominio\.cu$/ RELAY/\@*/ REJECT El mensaje no fue entregado: ACCESO DENEGADO
Claro, aplicar las restricciones al grupo de usuarios que se afectarán.
En estos momentos lo estoy probando. Muchas gracias.
Listo! Muchas gracias, mira el mensaje que me devuelve el postfix cuando intento mandar desde el correo de un usuario con la restruccion de solo en el dominio: mydomain
Algunos de los destinatarios no recibieron su mensaje.
Asunto: test
Enviado el: 26/06/2014 12:58
No se puede localizar a los destinatarios siguientes:
usuariox@nomydomain en 26/06/2014 11:58
No tiene permiso para enviar a este destinatario. Póngase en contacto con el administrador del sistema para obtener ayuda.
<servidorexchange.mydomain #5.7.1 smtp;554 5.7.1 : Sender address rejected: El mensaje no fue entregado: ACCESO DENEGADO FUERA DE DOMINIO MYDOMAIN>
Nuevamente gracias
Un placer haber sido útil.
Buscando en internet encontre este post
les pido ayuda
tengo un correo de nauta
lleve mi celular a revisar 3 veces me dicen que esta bien..
el tema es que no recibe los email internacionales
que puedo hacer..me han mandado de varios lugares diferentes
y no los recibo en cambio yo escribo y llegan sin problemas
Saludos
ENP
Te pudiera sugerir varias cosas, entre ellas:
Ir a las oficinas de Cubacel/ETECSA y plantearles el problema.
Verificar que la persona que te escribe esté usando correctamente tu dirección de correo.
Probar la línea (SIM) en otro teléfono para descartar.
Verificar que la configuración de la aplicación del correo electrónico es la correcta.
Tengo una dudita cuando le doy
postmap -q jessy@xxxxx.cu regexp:/etc/postfix/data_postfix/usuarios/users_access_in
me devuelve
postmap: warning: regexp map /etc/postfix/data_postfix/usuarios/users_access_in, line 1: ignoring unrecognized request
en dicha linea tengo puesto esto
jessy@arnac.cu nac_in
porque yo declare nac_in y nac_out como reglas creo que no tiene nada que ver
Muy util la guia y facil de implementar. Me funciono perfcto
ahora bien si quiciera agregar otra restriccion adicional por ejemplo tengo usuarios nacionales e internacionales hasta ahora con esta explicacion lo logre implementar, pero tengo otros usuarios que necesitan enviar y recibir de ciertos dominios especificos, pero que no son considerados que tengan correo nacional o internacional, o sea usuarios locales que necesitan por su trabajo mandarle correos a algunos dominios. como podria agregar esa regla o restrccion adicional y quizas en unfuturo seguir agregando posibles reglas de acuerdo a las necesidades de loque me pidan.
Exactamente como dice la guía, pero atendiendo a las expresiones regulares que ya no serían por dominio, serían por direcciones, por ejemplo:
foo@bar\.tldoneohthree Por favor serias amable de citar un ejemplo de como agregar una restriccion mas sumado a las restricciones de nacional e internacional, ya que como te decia en mi comentario anterior tengo usuarios que no son nacionales ni internacionales, pero que necesitan enviar mensajes de correo a ciertos dominion completos /\@dominio\.co\.cu$/ por ejemplo, estoy intentando agregarla corrigeme si estoy en lo correcto o no.
ssmtpd_restriction_classes = cu-in, cu-out, int-in, int-out, bcc-in, bcc-out
bcc-in = check_sender_access regexp:/usr/pbi/postfix-amd64/etc/postfix/bcc, permit
bcc-out = check_recipient_access regexp:/usr/pbi/postfix-amd64/etc/postfix/bcc, permit
cu-in = check_sender_access regexp:/usr/pbi/postfix-amd64/etc/postfix/cu, reject
cu-out = check_recipient_access regexp:/usr/pbi/postfix-amd64/etc/postfix/cu, reject
int-in = check_sender_access regexp:/usr/pbi/postfix-amd64/etc/postfix/int, reject
int-out = check_recipient_access regexp:/usr/pbi/postfix-amd64/etc/postfix/int, reject
Ahora en los ficheros access-in.cf
usuario@midominio.cu bcc-in
y access-out.cf usuario@midominio.cu bcc-out para especificar que usuarios tienen o no permisos a enviar a esos dominios
en el fichero: /usr/pbi/postfix-amd64/etc/postfix/bcc agrego:
/\@dominio1\.co\.cu$/ RELAY
/\@dominio2\.com$/ RELAY
dime por favor si asi puedo insorporar esa regla para permitir que los usuarios especificados puedan mandar correos a esos dominios
saludos
Para cada usuario que entre en este tipo de restricciones se deben crear nuevas clases de restricciones, por ejemplo:
smtpd_restriction_classes = foo-in, foo-outfoo-in = check_sender_access regexp:/etc/postfix/foo, rejectfoo-out = check_recipient_access regexp:/etc/postfix/foo, reject
Archivo
/etc/postfix/foo:/direccion\@dominio\.tld$/ RELAY/@otrodominio\.tld$/ RELAY
/\@*/ REJECT El mensaje no fue entregado: ACCESO DENEGADO
En este caso, el usuario que entre en las restricciones
foo-inyfoo-outpodrá enviar y recibir de la direccióndireccion@dominio.tldy de cualquier dirección del dominiootrodominio.tldPor supuesto, es necesario actualizar los archivos
access-in.cfyaccess-out.cfcon los usuarios afectados respectivamente.Entonces creo estar en lo correcto, rectificame esto por favor:
# resticciones #
smtpd_restriction_classes = bcc-in, bcc-out, cu-in, cu-out, int-in, int-out
bcc-in = check_sender_access regexp:/usr/pbi/postfix-amd64/etc/postfix/bcc, reject
bcc-out = check_recipient_access regexp:/usr/pbi/postfix-amd64/etc/postfix/bcc, reject
cu-in = check_sender_access regexp:/usr/pbi/postfix-amd64/etc/postfix/cu, reject
cu-out = check_recipient_access regexp:/usr/pbi/postfix-amd64/etc/postfix/cu, reject
int-in = check_sender_access regexp:/usr/pbi/postfix-amd64/etc/postfix/int, reject
int-out = check_recipient_access regexp:/usr/pbi/postfix-amd64/etc/postfix/int, reject
# fin restricciones #
smtpd_sender_restrictions = reject_non_fqdn_sender,
check_sender_access hash:/usr/pbi/postfix-amd64/etc/postfix/access-out.cf,
reject_unknown_sender_domain,
reject_unauth_pipelining,
reject_multi_recipient_bounce,
permit
t
smtpd_recipient_restrictions = permit_mynetworks,
reject_unauth_destination,
reject_unauth_pipelining,
check_recipient_access hash:/usr/pbi/postfix-amd64/etc/postfix/access-in.cf,
check_client_access pcre:/usr/pbi/postfix-amd64/etc/postfix/cal_pcre,
check_client_access cidr:/usr/pbi/postfix-amd64/etc/postfix/cal_cidr,
check_sender_access hash:/usr/pbi/postfix-amd64/etc/postfix/sender_access,
reject_non_fqdn_helo_hostname,
reject_unknown_recipient_domain,
reject_non_fqdn_recipient,
reject_multi_recipient_bounce,
reject_unverified_recipient,
reject_spf_invalid_sender,
permit
Gracias de antemano muy agradecido por este blog un saludo
Realmente no veo nada que tenga que ver con lo que hablablas en el otro comentario. A no ser la clase
bccy esta parte:permitt
Una ‘t’ de más ¿no?
Al pie de la letra y nada…no me funciona
Estoy comenzando a ver las reglas que se pueden configurar en postfix en zimbra y estoy tratando de hacer lo siguiente:
La idea es que postofix detecte direcciones de correos a las cuales esta prohibido enviar correo desde nuestro servidor.
Por ejemplo: si usuario@midominio.com trata de enviar un correo a cuenta_probida@dominiox.algo, que postfix lo detecte y elimine o impida que ese correo salga a esa direccion.
Cualquier ayuda me vendria de diez.
Muchas gracias.-
Usando postfix, cuando confirmo el recibo de un correo me da el siguiente error.
Error SMTP (554): No se ha podido establecer destinatario “usuario.1@empreza.organismo.cu” (5.7.1 : Sender address rejected: Esta cuenta no puede enviar ni recibir correo internacional.).
Muy buen Dato,
Tengo una pregunta, tal vez me puedes dar una guia, en mi postfix necesito bloquear que los usuarios envien correo a determinada cuenta, dentro del mismo servidor, es decir, xxx@dominio.com envie a todos@dominio.com, “todos” hace referecia a una lista donde tengo a todos los usuarios del SRV, lo que necesito es que una determinada cuenta: info@dominio.com envie unica y exclusivamente a todos@dominio.com, y que nadie mas pueda enviar correo a “todos”
Con el mismo principio de lo que se describe en la entrada puedes lograrlo, de hecho uso esto mismo para lo que quieres, exactamente lo que pides.
solo piensan en restringir?
Salud2s
El blog esta muy bueno.
Una duda. Estoy implementado un servidor de correo con postfix y dovecot mi proveedor de datos es etecsa alguien sabe que valor tengo que poner en el relay para poder entregar porque lo tengo sin relay y los correos se quedan perdidos y no salen ya que intenta conectarse a la ip de mi wan por el 25 y me devuelve Connection refused)
Si tu MX está directo a Internet no es necesario un relayhost.