Я запускаю Postfix в Linux с парой сотен локальных пользователей с почтовыми ящиками.
Есть ли способ контролировать все входящие подключения (SMTP) к службе Postfix? Т.е. прямой поток «IP-адрес x.x.x.x только что подключен к серверу Postfix» и «IP-адрес y.y.y.y только что отключен»?
Я хочу отслеживать все входящие соединения, чтобы я мог искать тенденции того же IP-адреса, который пытается отправить несколько спама моим пользователям или, возможно, пытается ретранслировать (кстати, это не открытый ретранслятор!).
Было бы идеально просто выгружать все подключения и отключения с указанием IP-адреса в текстовый файл или системный журнал. Или, возможно, есть другой способ получше?
Спасибо!
postfix регистрирует каждое входящее соединение, и строки журнала выглядят как
Jul 8 16:25:15 swiss postfix/smtpd[11127]: connect from some.host.or.other [192.0.2.1]
так что вы можете tail -F
ваш файл журнала (в моей системе это /var/log/mail.log
), используйте grep
для фильтрации нужных вам строк и просмотра трафика в реальном времени.
Вышеупомянутый плакат близок.
tail
позволяет видеть последние 10 строк файла. В -f
switch позволяет вам видеть новые строки по мере их добавления в файл maillog.
cd /var/log
tail -f maillog
Ctrl+c Сбежать.
Видя, что это уже записано в файл с именем /var/log/maillog
, не уверен, зачем вам создавать другой файл, если вы не хотите извлекать конкретную информацию.
Если вы хотите просто прочитать журнал рассылки, используйте свой любимый редактор или сделайте следующее:
less maillog
ударяя по Войти Клавиша (return) перемещает файл вниз по одной строке за раз, или вы можете нажать Листать вниз клавиша для полноэкранного перехода.
H Нажатие на q Ключ ускользнет от вас.
Это даст вам подсчет всех IP-адресов в вашем файле mail.log, чтобы вы могли идентифицировать мешающие IP-адреса.
grep connect /var/log/mail.log |grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | sort | uniq -c | sort
Используйте ipset для создания черных списков и добавления их в свои таблицы ip
Создавать черные списки:
ipset create <nameof blacklist> hash:ip (or net) -hashsize 4096
ipset add <nameof blacklist> <IP or network/nn>
Сопоставьте черные списки и отбросьте:
iptables -I INPUT -m set --match-set <nameof blacklist> src -j DROP
iptables -I FORWARD -m set --match-set <nameof blacklist> src -j DROP
Вы могли бы, вероятно, написать сценарий и автоматизировать это.
Я нашел следующее полезным:
tail -f maillog | grep connect
Но вы можете использовать grep для отключения или конкретного IP-адреса, если хотите?