「メールサーバ」カテゴリーアーカイブ

外部のSMTPサーバを使ってメールをコマンドで発行するには

SMTPサーバの設定をやってからメールを配信する仕組みを作る手法については、何どもやっているのですが、意外とSMTPサーバの構築は必要なくてメール配信だけコマンドラインでやりたいってのが無かったので、ここにメモしておきます。

Rocky Linux 8/CentOS 8の環境下で行います。

色々なサイトを見ていると、「mailコマンドが標準で使えるよ/インストールされている」とか「sendmailが入ってるから・・・」とか、どれならコマンド叩いたら・・・と思ってmailコマンド叩くと無いって怒られるw

最近はセキュリティ絡みで、外部と連携する機能は標準でインストールされない様になっているんですかね?

ということで、必要なパッケージをインストールします。

dnf install mailx sendmail

これで準備は完了です。
mailxだけ入れて、mailコマンド叩くと、sendmailが無いって怒られるんですよw
だから入れました。

ということで、コマンド叩いてみます。

mail -s Test -S smtp=smtp://<SMTPサーバのドメイン>:<ポート番号> -S smtp-auth=login -S smtp-auth-user=xxxx -S smtp-auth-password=xxxxxx -r fromAddress@hogehoge.net toAddress@hogehoge.net

設定はそれぞれの環境で異なりますが、概ねこんな感じです。
あとは、自分にテストメール送ってみて、届いていたら完成です。

CentOS 8:postgreSQL 12 + Python

前回のpostgreSQLインストールでドタバタしたのも束の間、psycopg2がインストール出来ない!?

postgreSQL 12のインストールは前回を参考にしてください。

# pip3 install psycopg2
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting psycopg2
  Using cached https://files.pythonhosted.org/packages/84/d7/6a93c99b5ba4d4d22daa3928b983cec66df4536ca50b22ce5dcac65e4e71/psycopg2-2.8.4.tar.gz
    Complete output from command python setup.py egg_info:
    running egg_info
    creating pip-egg-info/psycopg2.egg-info
    writing pip-egg-info/psycopg2.egg-info/PKG-INFO
    writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
    writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
    writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'

    Error: pg_config executable not found.

    pg_config is required to build psycopg2 from source.  Please add the directory
    containing pg_config to the $PATH or specify the full executable path with the
    option:

        python setup.py build_ext --pg-config /path/to/pg_config build ...

    or with the pg_config option in 'setup.cfg'.

    If you prefer to avoid building psycopg2 from source, please install the PyPI
    'psycopg2-binary' package instead.

    For further information please check the 'doc/src/install.rst' file (also at
    <http://initd.org/psycopg/docs/install.html>).


    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-39d96x6o/psycopg2/

pg_configが使えない?

それでもだめなので、.bashrcにパスを追加

# vi ~/.bashrc
<<<<以下を追加>>>>
export PATH=$PATH:/usr/pgsql-12/bin

それでも、gccが無いと怒られたので

# dnf install gcc
# dnf install postgresql12-devel
# dnf install platform-python-devel.x86_64

 これでもか!ということで

# pip3 install psycopg2

最後良く分からないけど、なんかできた!

CentOS 7 メールサーバ構築

※本記事は執筆中であり、一部正確ではない部分があります。でも一応は動くはずです。

今更ですが、CentOS 7にメールサーバを構築します。
RHEL 8(RedHat Enterprise Linux 8)が公開されているのに、今更な感じは拭えませんが、多分、CentOS 8でも同じ感じで設定できるでしょう(^^;

インターネット上を散策すると、私を含めて色々な方がインストール方法をブログなどに掲載されていますが、簡単なインストール方法は分かるんだけど、実はファイアーウォールが無視されていたり。。。SELinuxを無効にするとか。。。それって良いの?という感じになったり、少し不安がよぎります。

そんなことがあって、自分に合った記事を見つけるのは意外と大変なんですよね。

ということで、この記事も私に合った記事になっていますので、参考にされる方はご自身の環境に合うか合わないかを判断した上で考えてみてください。

本記事では、メールサーバのインストールを何とか使えるレベルから少し踏み込んでセキュリティ対策も考えた状態までもって行こうと思っています。
それと合わせて、少しだけですけどデフォルトよりも少しパフォーマンスを上げてみようと思います。

こんなことやります。

まず最初に、本記事で紹介するメールサーバでは、postfixとdovecotを採用することにしました。
他のsendmailを使う方などは対象外になります。

以下の様な構成です。

サーバの種類概要パッケージ
SMTPサーバメール送信postfix
POPサーバメール受信dovecot

インストール前の準備

メールサーバを立ち上げようなんて考えている方はご存知とは思いますが、DNSの設定を行う必要があります。
ドメインを取得して、AレコードとMXレコードを設定してください。
まず、AレコードでグローバルIPアドレスとドメインを紐づけます。
次に、そのドメインとMXレコードを紐づけます。
サーバ本体とは別にファイアウォールを設置されている場合は、そちらの設定も忘れずに行います。

SMTPサーバ/postfix

SMTPサーバとしてpostfixをインストールします。

私の環境では、デフォルトでインストールが完了していました。
以下のコマンドでインストール状況を確認しましょう。

# yum list installed | grep postfix

インストールされていない場合には、いつものようにyumでインストールします。
#CentOS 8ではyumがdnfへ変更されるんでしたね。

# yum install postfix

インストール自体はこれで終わりです。

postfixの設定

postfixの設定を行います。
/etc/postfix/main.cfを編集します。
編集項目のみを抜粋します。

myhostname = mail.hogehoge.jp
mydomain = hogehoge.jp
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ,mail.$mydomain
mynetworks = 192.168.0.0/24, 127.0.0.0/8
home_mailbox = Maildir/

スパム対策

スパム対策を行います。
まず、必要なパッケージをインストールします。

# yum install spamassassin
# yum install procmail

spamassassinを利用したスパム対策では、procmailを使用します。
postfixの設定を変更します。
/etc/postfix/main.cf の下記の内容を有効にします。

mailbox_command = /usr/bin/procmail

/etc/procmailrcを作成し、以下の様に編集します。

MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/

PATH=/bin:/usr/bin

:0 fw
|/usr/bin/spamc

通常は、この後にfirewall-cmdでsmtpを有効にしいます。

# firewall-cmd --add-service=smtp
# firewall-cmd --runtime-to-permanent

ここまでは簡単な設定です。
SMTPサーバを外部の方が使われないのであれば良いのですが、SMTPサーバを勝手に外部の人が使うケースがあります。
そうならない為に、スパム対策が色々とあります。
そこまでの内容をここで記載するには、時間が掛かるので、今回はここまでにします。
会社などで外部からSMTPサーバへアクセス出来ないようなにしている場合にはこの程度で十分ではないかと思います。
社外からSMTPサーバを使えるようにすると、関係のない人もSMTPサーバを利用出来てしまいます。
インターネット上の公開サーバなども同じです。
その場合には、スパムホスト対策やSMTP-AUTHやCRAM-MD5認証など対策を行う必要があるでしょう。
詳しくは、別の機会に投稿したいと思います。
私の環境では、firewallでSMTPを閉じてしまいました。
外部からSMTPのサービスを使用できなくするだけでOKです。

POPサーバ/dovecot

POPサーバにはdovecotを利用します。
dovecotが入っていない場合には、以下のコマンドでインストールします。

# yum install dovecot

dovecotの設定

dovecotの設定を行います。
まず、/etc/dovecot/conf.d/10-mail.confを編集します。
SSL用のpop3sも有効にしていますが、使わなければコメントアウトしておきます。

mail_location = maildir:~/Maildir

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

firewallの設定を行います。

# firewall-cmd --add-service=pop3
# firewall-cmd --add-service=pop3s
# firewall-cmd --add-service=pop3

サービスを起動

サービスを起動します。

# systemctl start dovecot

mailx コマンドによる動作確認

mailxコマンドを用いて動作確認を行います。
まずは、mailxをインストールします。

# yum install mailx

mailxコマンドを実行します。

# date | xargs -I xxx mailx -s \"xxx\" -r user@hogehoge.jp  receive@domain.jp

dateコマンドで日時を出力し、その結果をメールのタイトルとして送信します。
-rで送信元のメールアドレスを指定し、一番最後に送信先を指定します。

実際に受信をしてみるとわかりますが、送信してから受信完了するまでに時間が掛かる場合があります。

失敗すると、次に再送を行うまでに3分程時間を要する設定にデフォルトではなっています。

ちょっとだけチューニング

ほんの少しだけチューニングします。
/etc/postfix/main.cfの最後に以下を追加します。

minimal_backoff_time = 60s
maximal_backoff_time = 180s
maximal_queue_lifetime = 5d
bounce_queue_lifetime = 5d
queue_run_delay = 120s

詳しくは別途調べてみてください。
少し改善されていると思います。

メールサーバの構築・設定(1) CentOS 6上にPostfix 多分、CentOS 7でもそんなに変わらないはず。

今更感はあるものの、まだまだ一般に普及しているクラウドサーバの多くはCentOS 6である。(2016年12月現在)
そこで、敢えてCentOS 6上にPostfixを構築する。

まずは、インストール作業から・・・・っていつもの様に簡単です

# yum install postfix

CentOSでは、標準でsendmailがインストールされている可能性があります。
sendmailの動作状況を確認します。

# service sendmail status
sendmail is stopped
sm-client is stopped
#

今回は停止する必要はなさそうです。
削除してしまっても良いのですが、取りあえず止まっていればOKということで次に進めます。
尚、停止させたい場合は、以下のコマンドを実行して下さい。

# service sendmail stop

ここで、MTAについて少し触れておきます。
用語説明程度です。
MTA(Mail Transfer Agent)とは、メール転送を行うためのエージェントです。
メールを送信するための機能で、メールサーバの一部です。
さて、戻ってsendmailは停止させましたが、どのMTAを使うかシステム内で設定が必要です。
多分、sendmailが指定されたままの状態になっているのではないでしょうか?
ということで、確認してみます。
※MTA:Mail Transfer Agent

alternatives --display mta
mta - status is manual.
 link currently points to /usr/sbin/sendmail.sendmail
/usr/sbin/sendmail.sendmail - priority 90
 slave mta-pam: /etc/pam.d/smtp.sendmail
 slave mta-mailq: /usr/bin/mailq.sendmail
 slave mta-newaliases: /usr/bin/newaliases.sendmail
 slave mta-rmail: /usr/bin/rmail.sendmail
 slave mta-sendmail: /usr/lib/sendmail.sendmail
 slave mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
 slave mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz
/usr/sbin/sendmail.postfix - priority 30
 slave mta-pam: /etc/pam.d/smtp.postfix
 slave mta-mailq: /usr/bin/mailq.postfix
 slave mta-newaliases: /usr/bin/newaliases.postfix
 slave mta-rmail: /usr/bin/rmail.postfix
 slave mta-sendmail: /usr/lib/sendmail.postfix
 slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
 slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
Current `best' version is /usr/sbin/sendmail.sendmail.

まだ、linkの項目を見るとsendmailが使用される設定になっています。

postfixを使えるように設定します。
alternativesコマンドでmtaの設定を変更します。

# alternatives --config mta

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail
   2           /usr/sbin/sendmail.postfix

Enter to keep the current selection[+], or type selection number: 2
#

system-switch-mailを使用できる環境の方は、system-switch-mailコマンドで操作した方が楽だと思います。
私の環境では、system-switch-mailをインストールするのにリポジトリを変更しなければならなかったので、alternativesコマンドで代用しています。

上記の画面が表示されたら、「2」にpostfixが登録されていますので、「2」を指定します。
設定されたのかどうか判らない感じで、終わってしまいます(^^ゞ

設定状態を確認してみましょう!

# alternatives --display mta
mta - status is manual.
 link currently points to /usr/sbin/sendmail.postfix
/usr/sbin/sendmail.sendmail - priority 90
 slave mta-pam: /etc/pam.d/smtp.sendmail
 slave mta-mailq: /usr/bin/mailq.sendmail
 slave mta-newaliases: /usr/bin/newaliases.sendmail
 slave mta-rmail: /usr/bin/rmail.sendmail
 slave mta-sendmail: /usr/lib/sendmail.sendmail
 slave mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
 slave mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz
/usr/sbin/sendmail.postfix - priority 30
 slave mta-pam: /etc/pam.d/smtp.postfix
 slave mta-mailq: /usr/bin/mailq.postfix
 slave mta-newaliases: /usr/bin/newaliases.postfix
 slave mta-rmail: /usr/bin/rmail.postfix
 slave mta-sendmail: /usr/lib/sendmail.postfix
 slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
 slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
Current `best' version is /usr/sbin/sendmail.sendmail.

3行目に表示されているlink項目がpostfixに変更になっているのが解りますね。
一応、これでpostfixになっています。

もう一つ確認方法を・・・

# alternatives --config mta

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
*  1           /usr/sbin/sendmail.sendmail
 + 2           /usr/sbin/sendmail.postfix

Enter to keep the current selection[+], or type selection number:

「+」の項目がカレントで設定されていますので、postfixになっています。
何も入力せずにEnterを押して終了しましょう。

以上で、sendmailは無効となって、Postfixが利用可能な状態になりました。

何も設定していないのに動いて大丈夫なの?と思うかも知れませんが、デフォルトのMTAを指定・設定しただけであり、Postfixが稼働し始めているわけではありません。

とは言いつつ、心配ですよね。私も本当かどうか心配です。

以下のコマンドで状態を確認してみます。

# service postfix status
master is stopped

きちんと「stopped」(停止)になっていました。
stoppedになっていなかった場合には、以下のコマンドで停止させておきましょう。

# service postfix stop

動いていても、設定が整っていないので外部からのメールを処理する状態にはなっていないはずですが、設定が完了していない状態で動いてしまうと心配ですよね。

ということで、作業準備は完了したはずです。

続きは次回。。。。(近日中に更新予定)

 

メールサーバを立ち上げることにした。

今までは、プロバイダが提供するメールサーバを利用していました。
個人ではなく法人で契約して、10年以上お世話になってきました。
メールアカウントの設定もメーリングリストの作成もGUIで管理出来て問題はないのですが、幾つか課題はありました。

迷惑メールをメールクライアント(メーラー)で仕分けしていたのですが、10年以上使っていると徐々に増える迷惑メールに対応が必要になってしまいました。
ドキッとするようなタイトルの迷惑メールに思わず反応してしまいそうになったり(^^ゞ
まあ、そんなことはどうでも良いですねw

迷惑メールのフィルタリング機能は、プロバイダでも提供されており、それを使用することも検討は行っていたのですが、フィルタリングに掛かる費用がレンタルサーバの費用と同じくらいになってしまうのが納得いかず、メールのフィルタリングサーバを考えたり、UTMの導入なども検討していました。

そんなモヤモヤが続いていたのですが、仕事が忙しいのを良いことに放置プレイをしていました。

ところが最近、プロバイダ側のメールサーバに大量のスパムが投入されて、本来届くはずのメールが受信できなるという状態が何日か続き、業務にも支障を来たす始末。
あるお客さんからはメールが配信エラーになったとの連絡も入ってきました。
これでは不味いということで、プロバイダに相談したところ、他社への移行も考えて頂いて結構です的な回答。悪い意味ではなく、良心的な回答ではありました。

そこで、他のプロバイダでメールサーバを考えたりもしていたのですが、メールフィルタリングのサポートなどを調べたりするのが面倒になり、プロバイダごと変えちゃおうかとも思ったり、色々と思案した挙句に出した結論は・・・

・メールサーバを自前で建てる。
・Webサーバも自前で建てよう。(後で)

セキュリティとかバックアップとか心配だから、プロバイダにお任せにしてきたのだが、どこが良いのか悩んでるくらいなら一度建ててから、後でじっくり考えようということにしました。

ということで、CentOSのサーバ構築バイブルを片手に、もう片手にインターネットで調べながら・・・・

結論としては、以下の構成で構築したいという方針に定まりました。

・Postfix+Dovecotでサーバ構築
・GUIの管理画面を追加する。
・Webメール機能も後で追加する。
・スパム対策としてSpamassasinを入れてみよう!

これで、私が求めていた
メールサーバで迷惑メールフィルタリングが出来て、Webメールも出来る環境が整うはず。パスワードも平文ではなく暗号化出来るし、セキュリティ上も進歩するはず。
一応求めていた機能は全て満足できる。
更には、Webメール機能は後でじっくり好きなツールを搭載すればよいわけで、プロバイダが準備している使い難いツールを使う必要はない。(別にWebメールだけ別に作っても同じなんですけどねw)

ということで、次回からサーバ構築をメモる!

記載が済み次第、ここで記事へのリンクをまとめるつもりです。

 

以上