-
nginx w roli smtp proxy
Co jakiś czas odkrywam nowe funkcjonalności starych narzędzi / aplikacji. Niedawno „bawiłem” się czymś co się nazywa „smtp proxy” przy użyciu nginx-a.
Co do praktyczności rozwiązania, to mam mieszane uczucia, ale może komuś to się przyda. Przystąpmy od razu do wdrożenia :). Zakładam przypadek, że posiadamy jeden publiczny adres IP np. 79.411.20.12. Nginx będzie musiał nasłuchiwać na tym adresie, na porcie 25, a nasz MTA na 127.0.0.1:25. Poniżej przykładowy plik „nginx.conf”:
user nginx;
worker_processes 1;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {
worker_connections 1024;
}http {
include /etc/nginx/mime.types;
default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;
sendfile on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enable/*.conf;# odtąd zaczyna się sekcja związana z smtp proxy
server {
listen 127.0.0.1:8008;
server_name localhost;
access_log /var/log/nginx/localhost.access_log main;
error_log /var/log/nginx/localhost.error_log info;root /var/www/localhost/htdocs;
location ~ .php$ {
add_header Auth-Server 127.0.0.1;
add_header Auth-Port 25;
return 200;
}
}
}
mail {
server_name localhost;auth_http localhost:8008/auth-smtppass.php;
server {
listen ip_publiczne_na_ktorym_ma_sluchac_nginx:25;
protocol smtp;
timeout 10s;
proxy on;
xclient off;
smtp_auth none;
}
}
W opisanym przypadku, gdy nasze główne MTA nasłuchuje na 127.0.0.1:25, trzeba pamiętać aby w ustawieniach np. exima, nie mieć ustawionego adresu 127.0.0.1 jako relay, lub trust. W przeciwnym wypadku, staniemy się tzw openrelay-em.