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:
devnull: /dev/null
Indicamos a postfix donde estan los alias disponibles:
alias_maps = hash:/etc/aliases
newaliases_path = /usr/bin/newaliases
Actualizamos la base de datos de alias:
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:
virtual_alias_maps = proxy:mysql:/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
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 |
+------------------------+---------+--------+