ホーム > FreeBSD Server

FreeBSDでsendmailを使う

FreeBSDでインターネットメールの送受信をするための設定をまとめます。SMTPポート開放についてはVultr固有の作業も書いておきます。

ポート開放

sshやhttp(s)に加えてメール関連のポート(25,110,587)を開きます。/usr/local/etc/ipfw.rulesファイルに以下を追記後、service ipfw restartでファイアウォールを再起動して設定反映します。

1
2
3
4
5
6
7
# open port mail(25), pop3(110), smtp(587)
ipfw -q add 220 allow tcp from any to any 25 in
ipfw -q add 230 allow tcp from any to any 25 out
ipfw -q add 240 allow tcp from any to any 110 in
ipfw -q add 250 allow tcp from any to any 110 out
ipfw -q add 260 allow tcp from any to any 587 in
ipfw -q add 270 allow tcp from any to any 587 out

通常であればこれでいいんですが、VultrはデフォルトでSMTPポート(587番)が閉じられていて、ここを開きたい場合には個別に申請が必要になります。同社のポリシーでスパムメール対策のためだそうです。

Vultrの管理画面にログインしてticketを発行します。

Request to open the port for sending e-mail messages.というタイトルで、「ポート開けて~(Would you open the port for sending e-mail messages? I’d like to send them from my server toward outside to know its status.)」ってお願いしたら、「何のためにどのくらい送信するのか?」と訊かれたので適当に答える。

I tell you the information as below.

1.The business name and organization URL(s) under which you offer services.
-> There’s no business name. I’m planning to manage several blogs.

2.Describe, in as much detail as possible, the nature of the emails you intend to send.
-> Assumed outgoing emails are OS update information or blog comment notifications.

3.The volume of email that you plan to deliver on a regular basis.
-> As mentioned above, since it is an iregular transmission, it is expected to be several to tens of mails per month.

Please tell me if you need any other information.

Vultrはアメリカ東部時間のようで、日本の23時が彼らの業務開始時間9時。怪しげなメッセージを送って寝て起きたら「ポート開けたからサーバー再起動してね」という回答とともにANTI-SPAM policyのリンクが送られてきていました。

sendmailの設定

まずはsendmailデーモンの有効化。それからホスト名にドメイン指定も忘れずに。/etc/rc.confに以下内容を追記します。

1
2
hostname="example.com"
sendmail_enable="YES"

続いてドメインとユーザーの紐付け。/etc/mail内に3つの設定ファイルを配置します。

アクセスデータベースの設定

/etc/mail/accessファイルでローカルメールサーバーに接続できるホストやIPアドレスの設定をおこないます。それぞれのホストには接続の種類としてOK, REJECT, RELAYを指定することができます。

IPv6を有効にしている場合にはlocalhost指定よりもアドレス指定のほうが良さそうです。

1
2
Connect:IPv6::1 RELAY
Connect:127.0.0.1 RELAY

OKはローカルマシン宛のメール送信を許可、REJECTはメール接続を拒否します。上記のようにRELAYを指定すると任意の宛先へメールを送ることができます。

受信ドメインの設定

/etc/mail/relay-domainsファイル内に受信するメールアドレスのドメインを記述します。ちなみに以前はlocal-host-namesというファイル名だったのですが、FreeBSDハンドブックを見ていたらいつの間にか変わっていました。

1
2
example.com
example.jp

ここで設定されたドメイン名はすべてローカルホスト名として認められ、これらのドメインメールを受信することができるようになります。

受信ユーザーの設定

/etc/mail/virtusertableファイル内でメールを受信するユーザー名を指定します。

1
postmaster@example.com root

これでpostmaster@example.com宛のメールはrootユーザーのメールボックスに配送されるようになります。

これらのファイルが用意できたら最後に/etc/mailディレクトリ内でmakeしてすべての設定を反映します。

メールの閲覧

先の設定でインターネットメールと紐付いたユーザーでログインしたらmailコマンドで受信メールを読みます。パラメータなしで立ち上げると、(あれば)新着メールのリストが表示されます。

プロンプトに対してコマンドなしでリターンキーを押すと、未読の若い番号のメールから順に表示されます。

任意の番号のメールを読むときはプロンプトに対してその番号を、メールを削除する際はdコマンドに続けてメール番号を入力し、mailコマンドを終了するときはqコマンドを入力します。

既読メールを読む場合にはmail -fとすると既読メール一覧が表示されます。

メールの送信

mailコマンドはフィルタになっていて、タイトルと送信先を指定して本文テキストを流し込むとメールを送ることができます。

1
echo "content" | mail -s "title" address

なお日本語などのascii以外の文字や添付ファイルの送信はややこしいのでここでは割愛します。(受信はnkf通せば読めるものもある)