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