当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

実験:OpenSMTPDでメールサーバ構築(CentOS7,Ubuntu Server(20.04.1 LTS)で最新設定仕様のファイルもあります。)

実験:OpenSMTPDでメールサーバ構築(CentOS7,Ubuntu Server(20.04.1 LTS)で最新設定仕様のファイルもあります。)


ちょっとメールサーバ(MTA)としては、レアなサーバを使って見ました。OpenSMTPDというBSD系UNIXでは知られているSMTPサーバらしい。ネットで調べてみると日本では情報が極めて少ないどんなもんかなーと思い構築してみました。メールは普段IMAPしか使いませんがちょっとレトロなPOPサーバでも入れて見ようかと懐かしいQpopperと組み合わせて見ようと思います。脆弱性とか色々あるけれどセキュリティツールでいくらでも抑え込めるので気にしない。 使ってみた感触は悪くないですね。設計の思想がまた他のMTAと全く異なるのでそこは面白い。postfixには無いこともできそうに思います。このMTAは受信ネットワークインターフェイス単位で制御を細かくできる点が素晴らしいです。本当はfilter文が使えるなら色々試せたのですが必要最低限セキュリティを担保して作ってみました。細かいヘッダやボディチェックはprocmailに任せ、DNSBLとベイジアンフィルターでスパム撃退を行っています。実際の25,587のフロントはfuというDNSBL smtpプロキシーで受信チェックしてそれから後ろにあるopensmtpdへ渡しています。

インストール

ソースでコンパイルしてもよかったが、依存ライブラリーを入れるのが面倒くさいのでパッケージインストールをすることに。epelがインストール済みなら問題無し。 後で調査してみたがopensmtpd-extras*はどうもopensmtpd起動時にロードできないようだ。バグかな。debianの過去issueで同じようなロードできないバグが見つかったので同類の問題か。。。 OpenSMTPDはOS環境によって出来具合いが違うという記述を見たので移植仕切ってなかった可能性はある。ソースでコンパイルするといけるかもしれ無いけども、まあしょうがない。

CentOS7の場合

Ubuntu Server

設定ファイルの作成

細かい解説は省く。インストールすると/etc/opensmtpディレクトリが生成されその配下にopensmtpd.confが出来ているのでそのファイルを編集します。受信箱に入る前にベイジアンフィルターbsfilterを使用しているため内部的にprocmailを使っています。その箇所は割愛します。opensmtpdは前述の通りDNSBLプロキシーから受け取った受信を後ろで待ち受けるためListenはローカルアドレスで受け取るようにしています。ubuntu serverでは、/etcの直下にsmtpd.confが生成されます。

上記の設定はCentOS7のバージョンなので現状は古い設定となっています。下記はUbuntu Serverの最新版 20.04.1 LTSで検証したものです。ディレクティブが所々微妙に違いがあります。DKIMとリレーのあたりの記述は結構苦戦しました。ほとんど資料がなくて当てずっぽうで書いてみた実験の末、ようやく動きました。約5時間程試行錯誤したかもしれません。Ubuntu Serverではデフォルトの設定パスが/etcの直下になります。設定ファイルは/etc/smtpd.conf

ユーザ登録関連ファイルの作成

サポートドメイン毎のユーザ登録

パスワードの作成と格納

メーラ側ではSMTP認証のタイプはプレーン認証(暗号化なし)を選ぶことになるが上記の通り内部では暗号化しているのでサーバに侵入されて盗まれたところで実害は無いと思います。接続タイプがSTARTTLS/SSLならまあ概ね安全じゃないでしょうか。

filter機能が使えないので、fuを経由してDNSBLをする。

extraパッケージが機能しないのでfilter文が無視される。しょうがないのでDNSBLをproxy仕様で対応することにした。尚、Ubuntu serverではfilter文が動作するか試しておりません。しかしfu自体はUbuntu Serverでも同様に利用できました。

DNSBL proxy fuの起動

Python2.7とするかpythonとするかはセッティング次第なので環境に合わせてください。

DKIM Proxyの設定

postfixでおなじみのOpenDKIMは使えないという噂なので、 DKIM Proxyを使用します。dkimproxy用のユーザ作成は必要です。dkimユーザを予め作っておいてください。

DKIM Proxyのサービス登録

DKIM用のDNSレコード設定は他のSMTPサーバと同様なので割愛します。

DKIM proxy起動

qpopperのインストール

Qpopper設定ファイル

/etc/qpopper995.cfgファイルの編集

xinetdのインストール

ログローテーションの設定

APOPのユーザ登録

APOP仕様にするとメールソフトの設定でパスワードの暗号化(CRAM-MD5)が選択できます。

Firewalldで必要なポートをオープンします。

ポート番号、25,587,995をオープンします。

Ubuntu serverの場合ufwでFirewallオープンします。

Ubuntu serverではpopsにdovecotを使う

qpopperのコンパイルがgccのバージョン関連の仕様相違があり、コンパイルできませんでした。ソースコードを改変するのもかったるいのでdovecotでいきました。

pop認証の編集

メールボックスの形式設定

SSLの設定

ユーザ認証の認証タイプを設定

ユーザ認証形式とDBの所在を設定

ユーザパスワードの書式設定

ユーザのパスワードファイル設定

「doveadm pw」で実行した内容と/etc/passwdを合成して/etc/dovecot/passwdを生成してください。以下のような形式です。

dovecotの起動

タグ: , , , , , ,

Fail2ban:PostfixAdminで使っているDovecotログへの対応(備忘録)


fail2banは有名なソフトで攻撃してきたサービスの吐き出すログをベースにほぼリアルタイムで悪い輩のアクセスIPを記憶してFirewallでブロックしてくれるサービス。

一般的にsshdやhttpd等はお決まりのサービスを使用するケースがあるためデフォルトでブロックを有効にすればたちまちにBANしてくれる優秀なfirewallの補完ツールだ。でも逆を言ってしまうと既定でないサービスはうまくフィルターが効かない。

今回、管理しているサイトでPostfixAdmin構成でDovecotを使用していたサイトが非常に煩いDovecot DDos攻撃のジェネレーションアタックがあり、rejectではおっつかない状況に陥り、fail2banを使おうと思った。しかしPostfixAdminの吐き出すdovecotのログパターンが通常とは違っていたのでfilterをちょろちょろ書き直した。おかげで2日で攻撃者が消えた。

/etc/fail2ban/filter.d/dovecot.confの書き換え

タグ: , , , , , ,