Postfix(SMTP)へのアタックにhashlimitで対処

June 9, 2015 – 10:57 am

最近、サーバーのログ監視ツール(logwatch)にSMTPへのアタック(辞書攻撃)の兆候が認められるようになった。アタックに対処するため、SMTP接続リクエスト(port: 25)をhashlimitを用いて制限することにした。

関連情報をメモしておいた。

logwatch の出力と事態の把握
ログ監視ツール(logwatch)で、ユーザー認証システムpam_unix についてのログ上に、気がかりなものがあらわれるようになった。気になったログの出力例を以下に掲げる:
 

--------------------- pam_unix Begin ------------------------ 

 dovecot:
    Authentication Failures:
       yamasnet.com rhost=186.178.107.190 : 128 Time(s)
       admin rhost=193.109.69.212 : 8 Time(s)
       oracle rhost=193.109.69.212 : 6 Time(s)
       test rhost=193.109.69.212 : 5 Time(s)
       webmaster rhost=193.109.69.212 : 5 Time(s)
       info rhost=193.109.69.212 : 4 Time(s)
       admin1 rhost=193.109.69.212 : 3 Time(s)
       backup rhost=193.109.69.212 : 3 Time(s)
       box@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       boy@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       broadcast@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       brother@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       business@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       cache@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       cafeuser@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       cam@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       camera@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       canon@yamasnet.com rhost=194.63.142.101 : 3 Time(s)
       dedicated rhost=193.109.69.212 : 3 Time(s)
       distro rhost=193.109.69.212 : 3 Time(s)
       nobody: 3 Time(s)
       postgres rhost=193.109.69.212 : 3 Time(s)
       test03 rhost=193.109.69.212 : 3 Time(s)
       tested rhost=193.109.69.212 : 3 Time(s)
       user1 rhost=193.109.69.212 : 3 Time(s)
       adm: 2 Time(s)
       customer rhost=193.109.69.212 : 2 Time(s)
       david rhost=193.109.69.212 : 2 Time(s)
       guest rhost=193.109.69.212 : 2 Time(s)
       html rhost=193.109.69.212 : 2 Time(s)
       pop rhost=193.109.69.212 : 2 Time(s)
       root: 2 Time(s)
       sales rhost=193.109.69.212 : 2 Time(s)
       scan rhost=193.109.69.212 : 2 Time(s)
       share rhost=193.109.69.212 : 2 Time(s)
       sysmanager rhost=193.109.69.212 : 2 Time(s)
       temp rhost=193.109.69.212 : 2 Time(s)
       tester rhost=193.109.69.212 : 2 Time(s)
       adam rhost=193.109.69.212 : 1 Time(s)
       administrator rhost=193.109.69.212 : 1 Time(s)
       admins rhost=193.109.69.212 : 1 Time(s)
       alias rhost=193.109.69.212 : 1 Time(s)
       amanda rhost=193.109.69.212 : 1 Time(s)
       andrea rhost=193.109.69.212 : 1 Time(s)
       apache: 1 Time(s)
       bin: 1 Time(s)
       connect rhost=193.109.69.212 : 1 Time(s)
       cpanel rhost=193.109.69.212 : 1 Time(s)
       cyrus rhost=193.109.69.212 : 1 Time(s)
       daemon: 1 Time(s)
       dean rhost=193.109.69.212 : 1 Time(s)
       debian rhost=193.109.69.212 : 1 Time(s)
       foster rhost=193.109.69.212 : 1 Time(s)
       ftp: 1 Time(s)
       ftpuser rhost=193.109.69.212 : 1 Time(s)
       games: 1 Time(s)
       george rhost=193.109.69.212 : 1 Time(s)
       halt: 1 Time(s)
       help rhost=193.109.69.212 : 1 Time(s)
       ident rhost=193.109.69.212 : 1 Time(s)
       john rhost=193.109.69.212 : 1 Time(s)
       library rhost=193.109.69.212 : 1 Time(s)
       mail: 1 Time(s)
       manager rhost=193.109.69.212 : 1 Time(s)
       master rhost=193.109.69.212 : 1 Time(s)
       michael rhost=193.109.69.212 : 1 Time(s)
       mysql: 1 Time(s)
       named rhost=193.109.69.212 : 1 Time(s)
       news rhost=193.109.69.212 : 1 Time(s)
       newsletter rhost=193.109.69.212 : 1 Time(s)
       operator: 1 Time(s)
       orders rhost=193.109.69.212 : 1 Time(s)
       oscar rhost=193.109.69.212 : 1 Time(s)
       pgsql rhost=193.109.69.212 : 1 Time(s)
       postfix: 1 Time(s)
       postmaster rhost=193.109.69.212 : 1 Time(s)
       proxy rhost=193.109.69.212 : 1 Time(s)
       redbull rhost=193.109.69.212 : 1 Time(s)
       roberto rhost=193.109.69.212 : 1 Time(s)
       sara rhost=193.109.69.212 : 1 Time(s)
       send rhost=193.109.69.212 : 1 Time(s)
       sgi rhost=193.109.69.212 : 1 Time(s)
       shop rhost=193.109.69.212 : 1 Time(s)
       shutdown: 1 Time(s)
       spam rhost=193.109.69.212 : 1 Time(s)
       sshd: 1 Time(s)
       stephen rhost=193.109.69.212 : 1 Time(s)
       student rhost=193.109.69.212 : 1 Time(s)
       support rhost=193.109.69.212 : 1 Time(s)
       sync: 1 Time(s)
       system rhost=193.109.69.212 : 1 Time(s)
       terry rhost=193.109.69.212 : 1 Time(s)
       tomcat rhost=193.109.69.212 : 1 Time(s)
       tony rhost=193.109.69.212 : 1 Time(s)
       unknown rhost=193.109.69.212 : 1 Time(s)
       user rhost=193.109.69.212 : 1 Time(s)
       visitor rhost=193.109.69.212 : 1 Time(s)
       web rhost=193.109.69.212 : 1 Time(s)
       webadmin rhost=193.109.69.212 : 1 Time(s)
       webpop rhost=193.109.69.212 : 1 Time(s)
       wwwrun rhost=193.109.69.212 : 1 Time(s)
    Unknown Entries:
       check pass; user unknown: 282 Time(s)
 
   (一部 省略)
 
 ---------------------- pam_unix End -------------------------

   
ここで示した(整形済の)ログは、生ログ /var/log/secure に対応するものであるが、ここで 193.109.69.212 など特定のIPアドレスから user名でを変えながらログインが多数回試みられている様子が見出された。user認証が失敗している状態が記録されているのだが、これは、pam_unix のモジュール Dovecot に関係していた。

我がメールサーバーで使用しているメール転送エージェントPostfixにおいては、Vers.2.3以降、Dovecot SASLの認証方式がSMTP Authについても使用可能になっている(参考情報はここ)。 Dovecot SASL は、本来、メールの受信サーバー(POP3,IMAP)の認証に携わるものではあるが、受信サーバーだけでなく送信サーバー(SMTP) の user認証 についても、このDovecot SASLを用いることができる。

我がサーバーのMTA(Mail Transfer Agent)として用いているPostfixにおいても、Scientific Linux 6.1を導入して以降、この認証方式を採用している。

認証方式として何を採用するかは、Postfixの設定ファイル /etc/postfix/main.cf 上で指定することができるが、Dovecot SASLの採用は、以下に示すように、設定ファイルで SMTP Auth の定義部で smtpd_sasl_type を dovecot とすることにより実現される。


# for SMTP-Auth settings

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_client_restrictions = permit_mynetworks,reject_unknown_client,permit
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

content_filter=smtp-amavis:[127.0.0.1]:10024

対処方策としてhashlimiを使用
SMTP-Authにおいては、SMTPにユーザーがアクセスする際に認証を行ない、許可されたユーザーに対してのみメールの送信を可能にする。SMTPサーバーにおいても、ユーザー名、パスワードにより認証が行われる。ここで、SMTPへのアクセスは 25番 portが用いられる。

前記したpam_unixの認証失敗の件は、user名を次々変えながらSMTPにアクセスを試みる辞書攻撃と呼ばれるものであったが、この攻撃でひとたびサーバーのユーザー名とパスワードが把握されるとメールシステムが乗っ取られるということになってしまう。

SMTPへのアタックとしてもうひとつ忘れてはならないのが他人のメールサーバーを踏み台サーバーとして「不正中継」の試みだ。この「不正中継」もSMTPへのアクセス、即ち 25番port を介するアクセスによって行われる。

こうしたSMTPへの不正なアクセスの制御は 25番port を介する通信のうち特定の送り元アドレスのものを制御することにより行なえる。制御方法として、hashlimit を採用することがひとつの方法と考えられる。

hashlimitにより、送信元のIPアドレスごとに接続回数をカウント制限することができることから、不正なアクセス以外の通信に影響を及ぼさなくてすむ。

hashlimitの設定
hashlimitの運用方式を示すために設定内容を記述しておく。

iptables のSMTPへの接続リクエストを制限するために導入したhashlimit関連部分は以下:


# For SMTP(tcp 25)
/sbin/iptables -A INPUT -p tcp --dport 25 -m state --state NEW -m hashlimit \
    --hashlimit-name smtp_limit --hashlimit 2/h --hashlimit-burst 2 \
    --hashlimit-mode srcip --hashlimit-htable-expire 3600000 -j ACCEPT

ハッシュテーブルの中身は –hashlimit-name で指定したファイル名 smtp_limit (/proc/net/ipt_hashlimit におかれる)において記録されるが、ここでは1レコードにつき1行で、各送信元の現在のカウント数を知ることができる。以下に、記録例を示しておく。

/proc/net/ipt_hashlimit/smtp_limit の例:

295 103.54.60.244:0->0.0.0.0:0 17688640 115200000 57600000

   
最後に
書きたいと思ったことの半分も書けない記事になってしまった。
書いた本人が読み返しても理解できない部分があるのには閉口してしまう。日本語を書くこともできないのに驚きを感じてしまう。
なんとか、理解可能なものにしようと奮闘している。最終版に至る前に、公開してしまっている。従って、中身が、日を追って変化している。


  1. 1 Trackback(s)

  2. Jun 21, 2015: WordPress プラグインTwitter Cards Metaを導入 | Yama's Memorandum

Post a Comment