Esta pagina se ve mejor con JavaScript habilitado

Blackhole postfix

 ·  🎃 kr0m

En multitud de ocasiones es interesante configurar postfix para que no responda cuando se le envía un email a una determinada cuenta o a una cuenta inexistente(wildcard), por ejemplo se podría utilizar para evitar la enumeración de cuentas existentes, lo que vamos a hacer es que envíe dicho email a /dev/null.

Creamos el alias local:

vi /etc/aliases

devnull: /dev/null

Indicamos a postfix donde estan los alias disponibles:

vi /etc/postfix/main.cf

alias_maps = hash:/etc/aliases
newaliases_path = /usr/bin/newaliases

Actualizamos la base de datos de alias:

/usr/bin/newaliases

Configuramos postfix para que consulte la base de datos para determinar que alias utilizar dependiendo de la dirección destino, estos alias pueden ser tanto locales como remotos:

vi /etc/postfix/main.cf

virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
vi /etc/postfix/mysql/mysql_virtual_alias_maps.cf
user = XXXXX
password = XXXXXXXX
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

La tabla debe tener la siguiente estructura:

mysql> desc alias;
+----------+--------------+------+-----+---------------------+-------+
| Field    | Type         | Null | Key | Default             | Extra |
+----------+--------------+------+-----+---------------------+-------+
| address  | varchar(255) | NO   | PRI | NULL                |       |
| goto     | text         | NO   |     | NULL                |       |
| domain   | varchar(255) | NO   | MUL | NULL                |       |
| created  | datetime     | NO   |     | 0000-00-00 00:00:00 |       |
| modified | datetime     | NO   |     | 0000-00-00 00:00:00 |       |
| active   | tinyint(1)   | NO   |     | 1                   |       |
+----------+--------------+------+-----+---------------------+-------+

Un ejemplo de alias a devnull@localhost:

mysql> select * from alias where address='bounce@alfaexploit.com';
+------------------------+---------+-----------------+---------------------+---------------------+--------+
| address                | goto    | domain          | created             | modified            | active |
+------------------------+---------+-----------------+---------------------+---------------------+--------+
| bounce@alfaexploit.com | devnull | alfaexploit.com | 2017-02-15 12:49:57 | 2017-02-15 12:49:57 |      1 |
+------------------------+---------+-----------------+---------------------+---------------------+--------+

Cuando alguien envia un mail a bounce@alfaexploit.com se aplicará el alias a devnull@localhost entrando en acción el alias para direcciones locales de /etc/aliases

Si queremos un blackhole para todas las direcciones inexistentes tendremos que meter dos querys, primero la de los alias reales y luego la de las direcciones inexistentes, cuando no machee la primera query lo intentará con la segunda que siempre macheará.

virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf proxy:mysql:/etc/postfix/mysql/mysql_virtual_devnull_alias_maps.cf
vi /etc/postfix/mysql/mysql_virtual_devnull_alias_maps.cf
user = XXXXX
password = XXXXXXXX
hosts = localhost
dbname = postfix
query = SELECT goto FROM devnullalias WHERE domain='%d' AND active = '1'

Creamos la segunda tabla:

mysql> create table devnullalias ( domain varchar(255), goto text, active tinyint(1) );
mysql> insert into devnullalias (domain, goto, active) values ('alfaexploit.com', 'devnull', '1');
mysql> select * from devnullalias;
+------------------------+---------+--------+
| domain                 | goto    | active |
+------------------------+---------+--------+
| alfaexploit.com        | devnull |      1 |
+------------------------+---------+--------+
Si te ha gustado el artículo puedes invitarme a un RedBull aquí