人気ブログランキング |
(Linux)LogwatchのログメールをGmailに送りたい
Redhat系Linux CentOS には Logwatch というログ監視ツールが入っており、毎日の結果をCentOS内部の root ユーザにメールの形で送っています。

しかし、いちいちLinuxサーバにログインしてrootのメール見るは鬱陶しいということで、このroot宛てのサーバ内部からのメールをGmailに転送しようというのが今回の要件です。

送信元MTAにはデフォルトの sendmail を使うので、sendmail の設定が必要となります。この設定方法は sendmailからGmailへメールを転送する方法 : カブに乗ったプログラマSendmailでGmailに転送 - みゃあの主記憶装置 が参考なりました。
以下ほぼコピペですが、一応メモしておきます。

GmailはSMTPにSubmission(ポート587)で、SMTP認証とTLSを使っているので設定が結構厄介です。


1.sendmail.mcでの設定
まず、sendmail.mc で、SMTP/SubmissionやSMTP Auth の設定をします。

# vi /etc/mail/sendmail.mc

===dnl define(`SMART_HOST’, `smtp.your.provider’)dnl の次行に下記入力===
define(`SMART_HOST', `smtp.gmail.com')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')
define(`RELAY_MAILER_ARGS', `TCP $h 587')
FEATURE(authinfo, DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`authinfo')
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')

===dnl # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnlのコメント解除===
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

===dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea’)dnlのコメントを解除===
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

===dnl FEATURE(masquerade_envelope)dnlの次の行に以下の内容を入力===
FEATURE(masquerade_envelope)dnl
FEATURE(genericstable, DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`genericstable')
GENERICS_DOMAIN_FILE(MAIL_SETTINGS_DIR`genericsdomain')
FEATURE(`generics_entire_domain')

sendmail.mcの設定が終わったら、sendmail.cfを作成します。

m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf


2.authinfo,genericstableの作成
SMTPの認証情報を格納するauthinfoファイルを作成します。

# vi /etc/mail/authinfo

AuthInfo:smtp.gmail.com "U:hoge" "I:hoge@gmail.com" "P:passwd"
(UはGmailの@より前、IはGmailのアドレス、Pはパスワードを入れます)

authinfoファイルが作成できたらauthinfo.dbファイルを作成します。makemapコマンドでsendmail用のデータベースマップを作成できるわけですが、hash オプションにより生パスワードが見られるリスクは軽減できますね。設定が終わったら、/etc/mail/authinfo は削除した方が安全かもしれません。

makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo

また、下記コマンドでgenericsdomainファイルを作成します。

echo localhost >> /etc/mail/genericsdomain
echo `hostname`>> /etc/mail/genericsdomain

さらに、下記コマンドを実行しgenericstableファイルを作成します。

echo root nasubi@gmail.com > /etc/mail/genericstable
makemap hash /etc/mail/genericstable.db < /etc/mail/genericstable


これでsendmail再起動します。

/etc/rc.d/init.d/sendmail reload



3.root宛のメール転送設定
下記コマンドでaliasesファイルを編集しroot宛てのメールをGmailに送るようにします。

# vi /etc/aliases

(最下行の root: を修正(デフォルトはコメント))
# Person who should get root's mail
#root: marc
root: hoge@gmail.com

(保存してからnewaliasesで反映します)
# newaliases


下記コマンドでテストメールを送信できます。Gmail側で受信しているか確認してみましょう。

echo test|mail root


しかし、実際テストしてみると届きません。
/var/log/maillog でメールのログを見てみると下記のようになっていました。

Mar 10 10:49:40 localhost sendmail[21224]: p2A1md2K021223: to=hoge@gmail.com, ctladdr= (0/0), delay=00:01:01, xdelay=00:01:01, mailer=relay, pri=30559, relay=smtp.gmail.com [74.125.53.109], dsn=4.0.0, stat=Deferred: Connection timed out with smtp.gmail.com

タイムアウトしてるようです。
結局原因はファイアウォールの設定を見逃してたことでした。


ここで書いてるiptablesのスクリプトに下記を追加し、反映することでようやく無事にroot宛てメールが転送されるようになりました。

#################
#smtp(gmail) myhost-> any
#################
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $myhost -d $any --dport 587 -j ACCEPT
iptables -A INPUT -p tcp -s $any --sport 587 -d $myhost -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $myhost -d $any --dport 8001 -j ACCEPT
iptables -A INPUT -p tcp -s $any --sport 8001 -d $myhost -j ACCEPT



補足:
SMTP認証はせず、サブミッションポート(ポート587)対応だけなら、「1.sendmail.mcでの設定」で以下の部分のみ設定すればいいようです。


# vi /etc/mail/sendmail.mc

===dnl define(`SMART_HOST’, `smtp.your.provider’)dnl の次行に下記入力===
define(`SMART_HOST', `smtp.gmail.com')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')
define(`RELAY_MAILER_ARGS', `TCP $h 587')

===dnl # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnlのコメント解除===
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

===dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea’)dnlのコメントを解除===
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl


あとは、sendmail.cfを作成し、sendmailサービスを再起動するだけです。

補足2:

sendmail.mcからsendmail.cf作成時に以下のようなメッセージが出た場合、sendmail-cf がインストールされていない可能性があるので、RedHat系の場合、yumでインストールしてやります。

# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
m4: /usr/share/sendmail-cf/m4/cf.m4: No such file or directory
/etc/mail/sendmail.mc:10: m4: cannot open `/usr/share/sendmail-cf/m4/cf.m4': No such file or directory

 ↓ sendmail-cfをインストール

#yum search sendmail-cf

by jehoshaphat | 2011-08-25 12:20 | Linux


<< (ツール)複数のユーザのIE履... (HTML)IE8でページ内リ... >>