ALERT
зупинити відправку листів на сервері ubuntu
Залежно від того, який саме поштовий сервер у тебе на Ubuntu (Postfix, Exim, Sendmail, OpenSMTPD, qmail тощо), «зупинити відправку» можна кількома способами. Ось перевірені варіанти:
1. Повністю зупинити сервіс (грубо, але надійно)
Наприклад, якщо Postfix:
sudo systemctl stop postfix
sudo systemctl disable postfix # щоб не стартував після перезавантаження
Якщо Exim4:
sudo systemctl stop exim4
sudo systemctl disable exim4
Це миттєво зупинить приймання й відправлення пошти.
2. Тимчасово заборонити вихідну пошту, залишивши вхідну
У Postfix можна:
sudo postconf -e "default_transport = error"
sudo postconf -e "relayhost ="
sudo systemctl reload postfix
Це залишить сервер «живим» для приймання/черги, але не дасть йому надсилати листи. Або ще простіше:
sudo postsuper -h ALL
– поставить усі листи у черзі «на паузу» (hold).
Потім повернути:
sudo postsuper -H ALL
3. Блокувати вихідні порти брандмауером
Наприклад, через UFW/IPTables заблокувати 25, 465, 587:
sudo ufw deny out 25
sudo ufw deny out 465
sudo ufw deny out 587
– і пошта фізично не піде.
4. Відключити MTA-агента, який відправляє системні листи
На «чистій» Ubuntu без Postfix часто стоїть nullmailer
чи msmtp
. Їх теж можна:
sudo systemctl stop nullmailer
Якщо напишеш, який у тебе MTA (Postfix, Exim, тощо) – я дам точну команду.
Хочеш, щоб сервер повністю перестав відправляти листи (але міг отримувати), чи щоб все поштове спілкування стало?
хто-куди відправляв?
Добре — якщо це Postfix, то всі основні логи йдуть у системний журнал, зазвичай у /var/log/mail.log.
На Ubuntu Server структура така:
/var/log/mail.log
основні події Postfix (приймання, передача, відправка)
/var/log/mail.err
лише помилки Postfix
/var/log/syslog
дублюється частина поштових подій, якщо mail.log не ведеться
Подивитися останні події
sudo tail -f /var/log/mail.log
(реальний час — поки сервіс запущений)
або просто останні 100 рядків:
sudo tail -n 100 /var/log/mail.log
Витягнути, хто кому відправляв
Наприклад:
sudo grep 'to=' /var/log/mail.log
sudo grep 'from=' /var/log/mail.log
Або одразу разом:
sudo grep 'postfix' /var/log/mail.log | grep 'from=\|to='
Вийде щось таке:
Sep 30 10:45 mail postfix/qmgr[1234]: 9A1B2C3D4E: from=<root@example.com>, size=...
Sep 30 10:45 mail postfix/smtp[5678]: 9A1B2C3D4E: to=<user@gmail.com>, relay=...
from=
— відправник, to=
— одержувач.
Переглянути чергу (якщо листи ще в ній)
sudo postqueue -p
або
sudo mailq
одна команда, яка покаже «відправник → одержувач» у зручному вигляді:
Оскільки у Postfix усі реальні відправлення йдуть у лог із рядками from=
та to=
, можна витягти їх разом.
Найзручніше – зробити маленький awk-фільтр по mail.log
:
sudo awk '/from=</{from=$0; next} /to=</{to=$0; print from " | " to}' /var/log/mail.log
Він проходить лог, запам’ятовує рядок з from=
і, коли натрапляє на to=
, виводить у стилі:
Oct 3 08:15:00 mail postfix/qmgr[1234]: ABC123: from=<root@example.com>, size=1234, ...
| Oct 3 08:15:01 mail postfix/smtp[5678]: ABC123: to=<user@remote.tld>, relay=..., ...
Якщо хочеш саме «коротко відправник → одержувач», то можна трохи скоротити:
sudo awk '/from=</{match($0,/from=<[^>]+>/); id=$5; f=substr($0,RSTART,RLENGTH)}
/to=</{match($0,/to=<[^>]+>/); t=substr($0,RSTART,RLENGTH); print id, f,"→",t}' /var/log/mail.log
Вивід буде приблизно такий:
ABC123 from=<root@example.com> → to=<user@remote.tld>
DEF456 from=<daemon@example.net> → to=<admin@gmail.com>
Так ти одразу бачиш, хто відправляв і куди.
(Якщо в логу таких рядків нема — це значить, що пошта ще не надсилалась.)
Last updated