Sendmailを用いてメールサーバを運用している際に、急にメール送受信が不安定になったり、サーバ上の他サービスが不安定になることがあります。その場合は、「もしかすると、スパムメールの踏み台になっているかもしれない」とまずは思って欲しい。
Sendmailを用いてSMTP認証を行なった際に記録されるログから、各ユーザのSMTP認証回数を割り出し、その回数が以上に多いユーザが居る場合には、まずはユーザのパスワードを強制的に変更し、次に該当ユーザにメール大量送信があったことをつげ、その送信がそのユーザによるものなのか、または外部からの踏み台になっていたかを特定する。なお、SMTP認証を行なった際の接続元を調べることもできるので、必要であれば接続元情報を前もって確認しておくと、該当ユーザへの対応がスムーズになると思う。
SMTP認証回数を調べる(Sendmail編)
# zgrep AUTH /var/log/maillog* | perl -ne 'print $1,"n" if/authid=(.*), mech/' | sort | uniq -c | sort -nr | less
/var/log/maillog*から「AUTH」を含む行をgrepしています。
対象となるファイルがgz形式で保存されていてもgrepできるようにここでは「zgrep」を用いています。
次にperlを用いて、もし「authid=*, mech」というフレーズを見つけたらその「*」の部分をprintしろという指示です。
「print $1」はif/~/の中で「(」と「)」に囲われたものを意味します。
ここまでで、/var/log/maillog*から「AUTH=*」の部分の「*」を表示できました。
あとは、結果を並び替え(sort)、それぞれの数をカウントし(uniq -c)、出現数順に並び替えるだけです(sort -nr)。
特定のユーザの接続元を調べる(Sendmail編)
# zgrep 'authid=username' /var/log/maillog* | perl -ne 'print $1,"n" if/relay=(.*), authid/' | sort | uniq -c | sort -nr
先ほどと同じくzgrepを用いて「authid=username」を/var/log/maillog*から検索します。
/var/log/maillog*にて認証時に記録されている接続元情報の「relay=*」をperlでprintし、並べ替え、カウントしています。
以上
コメント