- Почта старше гоада архивируется, старше пяти-семи лет удаляется
[[Migrate mails to microsoft]]
2
[[Работа с очередью сообщений в Postfix]]
[[%mailq]]
#### [[% Postfix]] log analyze
##### Вывести статусы сообщений:
Принято | отправлено | отброшено, etc..
```bash
tail -f /var/log/maillog |grep "status="
```
##### Выводить новые ошибки из мейлога:
```bash
tail -f /var/log/maillog |egrep -i '(warning|error|fatal|panic)'
```
##### Ящики получателей
```bash
grep "=sent " /var/log/maillog | awk '{print $7}' | sed 's/to=<//g;s/>,//g' | sort | uniq -c | sort -nk 1 |grep -v gmail
```
##### Домены получателей
```bash
grep "=sent " /var/log/maillog-20200412 | awk '{print $7}' | sed 's/to=<//g;s/>,//g' |awk -F@ '{print $2}'| sort | uniq -c | sort -nk 1
```
##### Вывести статусы сообщений из мейллога:
```bash
CUR_DATE="Aug 31" && \
echo -e "\n User unknown in virtual mailbox top errors " && \
cat /var/log/maillog |grep "$CUR_DATE" |grep " User unknown in virtual mailbox" |awk '{print $13 }' |sort -h |uniq -c |sort -h |tail &&\
echo -e ' \nRelay access denied top errors' &&\
cat /var/log/maillog |grep "$CUR_DATE" |grep "Relay access denied" |awk '{print $13 }' |sort -h |uniq -c |sort -h &&\
echo -e ' \n Domain not found top errors ' &&\
cat /var/log/maillog |grep "$CUR_DATE" |grep " Domain not found " |awk '{print $7, $8, $19 }' |sort -h |uniq -c |sort -h &&\
echo -e ' \n Domain not found; top errors' &&\
cat /var/log/maillog |grep "$CUR_DATE" |grep " Domain not found;" |awk '{print $10, $13 }' |sort -h |uniq -c |sort -h &&\
echo -e ' \n ANOTHER top deferred errors' &&\
cat /var/log/maillog | grep "$CUR_DATE" |grep status=deferred |awk '{print $5, from, $7}' FS=: |sort -h |uniq -c |sort -h |tail -n6
```
```bash
zcat /var/log/maillog-2022{09,10,11,12}* | pflogsumm --detail 0 -u 999999 -h 30 --no_no_msg_size -q > /tmp/report
```
```bash
top 100 @domain.com Recipients by message count
zgrep -e "orig_to=<[A-Za-z0-9._%+-]*@domain.com" /var/log/maillog-2022{09,10,11,12}* > /tmp/orig-to-report
cat /tmp/orig-to-report | awk '{print $8}' | sed 's/orig_to=<//g' |sed 's/>,//g' | sort -h | uniq -c | sort -h > /tmp/orig-to-report-sort
```
##### Несколько запросов для вытягивания из мейллогов, адресов, на которые не доставляется почта.
```bash
zcat /var/log/maillog-20230* | grep "Domain not found" |awk '{print $13}' |sort -h |uniq -c |sort -h
zcat /var/log/maillog-20230* | grep "The email account that you tried to reach does not exist" |awk '{print $7 }' | sort -h |uniq -c | sort -h
zcat /var/log/maillog-20230* | grep " user does not exist " |awk '{print $7 }' | sort -h |uniq -c | sort -h
zcat /var/log/maillog-20230* | grep " The email account that you tried to reach is over quota and inactive" |awk '{print $7 }' | sort -h |uniq -c | sort -h
```
##### Other
```bash
rm -f /tmp/sep-to-* ; for log in /var/log/maillog-2022{09,10,11}* ; do cd /tmp/splied/ && rm -f /tmp/splied/* && zcat $log | split -l 5000; for log_part in /tmp/splied/* ; do zgrep -e 'orig_to=<[A-Za-z0-9._%+-]*@domain.com' $log_part > /tmp/sep-to-com; cat /tmp/sep-to-com | awk '{print $6}' | sort | uniq > /tmp/sep-to-com-ids; zgrep -f /tmp/sep-to-com-ids $log_part | grep -e "from=<" | tee -a /tmp/sep-to-result ; done ;
cat /tmp/sep-to-result | awk '{print $7}' | sed 's/from=<//g' |sed 's/>,//g' |sort |uniq -c |sort -h | grep -v netsuite | tail -n 100
```
##### Списсок папок (дат, адресов )
```bash
for domain in jirasupport test_for_empty test_2_for_cash test_for_old_vendor_info; do for folder in cur new .Sent; do ll -d -tr /srv/vmail/domain.com/$domain/$folder/ | tail -n1 ; done; done
```
##### Вывести cписок уникальных SMTP логинов и количество их повторений, отсортированный по убыванию.
```bash
zgrep "sasl_username=" /var/log/maillog-202409* | awk '{print $9}' | sed 's/sasl_username=//' |sort -h |uniq -c |sort -nk1 -r
```
#### [[! %Dovecot]] log analyze
##### Посмотртеть отформатированыый список количества подключений к серверу (довекоту) за дату
```bash
cat /var/log/dovecot/info.log | grep -P '^2030-11-19\s*' | grep 'Info: Login' | awk '{print $6}' | sed 's/user=<//g;s/>,//g' | sort | uniq -c | sort -rn | less
```
если лог в старом формате
```bash
zcat /var/log/dovecot.log-2030111* | grep 'Login: ' | awk '{print $8}' | sed 's/user=<//g;s/>,//g' | sort | uniq -c | sort -rn
```
##### Посмотртеть отформатированыый список количества ОТБРОШЕННЫХ попыток подключений к серверу (довекоту) за дату
```bash
tac /var/log/dovecot/info.log | grep -P '^2019-05-*' | grep 'Info: Aborted login' | awk '{print $14}' | sed 's/user=<//g;s/>,//g' | sort | uniq -c | sort -rn | less
```
##### Список адресов с которых конектился пользователь.
```bash
grep 'pop3-login: Info: Login: [user=<
[email protected]](mailto:user=%
[email protected])>' dovecot/dovecot.log | awk '{print $8}' | sort | uniq -c | sort | less
```
##### Вывести список айпи адресов, с которых заходил пользователь за заданное время
```bash
tail -n 100000 /var/log/dovecot/dovecot.log |grep "Login: user=<
[email protected]>" | grep "2018-03-" | awk '{print $8}' |sort | uniq –c | less
```
## [[% PostfixAdmin]]
##### Алиасы и мейлбоксы
```bash
#алиасы
mysql postfix -e "SELECT address, goto FROM alias WHERE goto NOT LIKE CONCAT('%', address, '%') INTO OUTFILE '/var/lib/mysql-files/export-aliases-to-microsof.csv' FIELDS TERMINATED BY ';' ENCLOSED BY ' ';"
#мейлбоксы
mysql postfix -e "SELECT address, goto FROM alias WHERE goto LIKE CONCAT('%', address, '%') INTO OUTFILE '/var/lib/mysql-files/export-mailboxes-to-microsof.csv' FIELDS TERMINATED BY ';' ENCLOSED BY ' ';"
```
##### РАзмер ящиков
```bash
mysql postfix -e "SELECT local_part FROM mailbox INTO OUTFILE '/var/lib/mysql-files/export-mailboxes-to-microsof.csv' FIELDS TERMINATED BY ';' ENCLOSED BY ' ';"
while read LINE; do (echo -n "mailbox $LINE has: " >> /tmp/microsoft_migration_size.txt; du -sh /srv/vmail/domain/$LINE >> /tmp/microsoft_migration_size.txt); done < /var/lib/mysql-files/export-mailboxes-to-microsof.csv
```
#### Логины
##### Количество логинов за пол года
```bash
while read -r mailbox; do zgrep "Info: Login: user=<$mailbox" /var/log/dovecot/info.log-20230* | awk '{print $6}' | sed 's/user=<//g;s/>,//g' | sort | uniq -c >> /tmp/mailboxes_login_since_2023.txt ; done < /tmp/mailboxes.txt
```
##### Число логинов, тип дата и адрес последнего логина.
```bash
log_file=/tmp/mailboxes__last_logins_since_08_2023.txt && while read -r mailbox; do echo -en "\n$mailbox ">> $log_file && zgrep -h "Info: Login: user=<$mailbox" /var/log/dovecot/info.log-2023080* | awk '{print " ", $3, $8, $1";"$2 }' |tee >(tail -n 1 >> $log_file) >(wc -l |{ read -r count; echo -n "$count";} >> $log_file ); sleep 0.3; > /dev/null ;done < /tmp/mailboxes.txt
```