Jak vymazat selektivně frontu Postfixu

Minulý týden jsem řešil nuceně problém s nutností selektivně pročistit frontu Postfixu od spamů generovaných zneužitým účtem (uživatelka zřejmě použila heslo typu anicka1 nebo tak něco složitého).

Asi každý správce zná příkaz postqueue -p, který vysype seznam mailů držených ve frontě:

[root@zeus ~]# postqueue -p
-Queue ID- –Size– —-Arrival Time—- -Sender/Recipient——-
E670C3B5463 4235 Wed Jun 28 21:21:03 Petr_Santrucek/exTerra%EXTERRA@exterra-services.cz
(connect to client.tvujweb.cz[109.123.220.123]:25: Connection timed out)
webmaster@client.tvujweb.cz

C363A3B5469 4322 Thu Jun 29 15:28:37 Petr_Santrucek/exTerra%EXTERRA@exterra-services.cz
(connect to produkce.tvujweb.cz[109.123.220.123]:25: Connection timed out)
root@produkce.tvujweb.cz

— 9 Kbytes in 2 Requests.

S tím se dá pracovat, pokud půjde o jednotky mailů, kterých se potřebujete zbavit. Řešením obvykle nebývá smazat celou frontu, protože tam mohou (a obvykle i budou) čekat legitimní maily. A zákon schválnosti pracuje spolehlivě, takže jistě smažete mail pana ředitele jeho manželce, že přijde pozdě na večeři a jako admin máte pak předplacenou jednosměrnou jízdenku na pracák.

Řešení je následující: použijte tento příkaz (zde jde o maily, které mají v hlavičce odesílatele „username@example.com“)
postqueue -p | tail -n +2 | awk ‚BEGIN { RS = „“ } /username@example.com/ { print $1 }‘ | tr -d ‚*!‘ | postsuper -d –

Co to vlastně dělá? Pokud odmažete konec příkazu “ | postsuper -d – „, uvidíte výpis názvů souborů (což je i ID) z fronty. Příkaz postsuper pak zajistí korektní vymazání.
[root@zeus ~]# postqueue -p | tail -n +2 | awk ‚BEGIN { RS = „“ } /root@produkce.tvujweb.cz/ { print $1 }‘ | tr -d ‚*!‘
C363A3B5469