メールサーバ管理者とスパムメールの飽くなき戦い
メールサーバを運用する上でのリスクは、改ざんや成りすましの他にも、「スパムメール」が挙げられます。このページではスパムメールとの飽くなき戦いの中で培われた対応策について解説します。
具体的には「OP25B」と「ユーザー認証」です。
OP25Bについて
「OP25B」とは「Outbound port 25 Blocking」の頭文字を取ったもので、2012年現在、ほとんどのISPがスパムメール対策として導入しています。
「OP25B」はスパムメールの温床になっている「ポート25番を利用したメールを遮断する」という対策です。しかしポート25番は外部のSMTPサーバと通信する際や、ローカルでのメール配信に利用するため、完全に遮断することはできません。そのためスパムに利用される特定の通信のみ遮断します。遮断するのは以下の場合です。
1.ISP内部のネットワークから、外部のSMTPサーバを利用してメールを送信する場合
ここでいう外部とは「メールソフトでISP提供のメールサーバを利用せず、外部のSMTPサーバへ接続すること」。
2.外部ネットワークから、ISPのSMTPサーバを中継してメールを送信する場合
この外部とは「ノートパソコンを外出先のホテルで利用したり、公共のWi-Fi利用時など、ISP以外のネットワークから、ISPのSMTPサーバに接続すること」
この対策を取ることで「ISPの内部から会員が外部のメールサーバを利用して、スパムメールを送信すること」と、「外部からISPのメールサーバを利用して、スパムメールを受信すること」を防止できます。
サブミッション・ポートについて 外部からのポート25番を遮断すると、ISPの外部からアクセスしている場合にメールが利用できなくなってしまいます。 そのために導入されたのが「サブミッション・ポート(Submission Port)」です。「ポート25番の代替ポート」として、「ポート587番」を利用するというものです。
サブミッションポートとユーザー認証
外部からの通信用に用意したサブミッションポートですが、ただポートを変えただけではスパマーも送信ポートを変えるだけで、またスパムメールを送り放題になってしまいます。
そこで「ポート587番」を利用した通信に対して「ユーザー認証」を導入するのが普通です。
この「ユーザー認証」を導入することで、外部のネットワークから匿名でメールサーバを利用することができなくなります。さらに利用者のパソコンがスパムを送信するウイルスに感染した場合や、ハッカーに遠隔操作されたとしても、ISPが送信元のユーザーアカウントを停止することで大量送信を阻止できます。
SMTPサーバで利用される「ユーザー認証」には主に2つの方法があります。
POP before SMTP
「POP before SMTP」はPOP3(受信サーバ)のユーザー認証機構を利用する技術です。あらかじめ認証機構のあるPOP3サーバへ接続してから、SMTPサーバでメールの送信を行います。
手軽に導入できるため広く利用されましたが、元々SMTPサーバ用として開発されたものでないため、認証機構に親和性がなく、現在ではあまり使われません。
SMTP認証
もともと認証機能を持たなかったSMTPサーバに認証機能を追加したもの。別名、「SMTP AUTH(SMTP Authentication)」とも呼ばれます。利用者とSMTPサーバで認証がとれた場合にだけ送信する仕組み。「AUTH CRAM-MD5」という認証方法を利用すればユーザー名やパスワードを暗号化してやり取りすることもできる。
導入にはサーバ側、クライアント側の双方が設定を変更する必要がありますが、厳格にユーザー認証を行えるため、現在ではこちらが主流になっています。
ISPでOP25Bが導入されている場合の対策
ポート25番を遮断するOP25Bですが、現在はほとんどのISPで導入されています。
ISPでOP25Bが導入されると、これから設定する「自分で契約したVPSなどのSMTPサーバ」もISPから見れば「外部のSMTPサーバ」と見なされます。そうなると当然「VPSのSMTPサーバ」と「ポート25番」を利用したメールの送信はできません。
殆どの場合は回避策として「サブミッションポート(ポート587)」が用意されています。そちらを利用してもいいですが、より安全性を高めるために「SSLによる暗号化」をサポートした「SMTPs(ポート465)」の利用をおすすめします。
もちろん「ポート465番」を利用した接続でも、「SMTP認証」を利用できます。つまり「SSLによる暗号化」と「SMTP認証」の2つの対策を講ずることができます。
Linuxのユーザー認証について
メールサーバのユーザー認証を理解するために、まずは基本となるLinuxのユーザー認証について解説します。
Linuxは「複数の人間(マルチユーザー)」で利用することを想定しています。システム管理者がそれぞれにユーザーに必要な権限を与えて、管理します。ユーザー認証にはいくつか種類がありますが、代表的なものは「UNIXパスワード認証」という認証法です。
「UNIXパスワード認証」は元々「/etc/passwd」というファイルに「ユーザー名やパスワード、グループ」を登録して、管理していました。
信頼できる身内だけで利用するには良かったのですが、不特定多数の人間が利用するには問題がありました。一般ユーザーもパスワードが記載された「/etc/passwd」ファイルを閲覧できるという点です。
そこで「/etc/passwd」のパスワード欄には「x」とだけ書いて、パスワードに関連する情報を「/etc/shadow」に分けて記載するようにしました。「/etc/shadow」の閲覧許可をrootユーザーだけにすれば、一般ユーザーにパスワードを見られることはありません。さらに「/etc/shadow」ではパスワードを暗号化して安全性を高めています。この「/etc/shadow」ファイルに分けられたパスワードのことを「シャドウパスワード」といいます。
「/etc/passwd」の書式を確認
言葉だけで説明するとややこしいので、実際にファイルを開いてみます。「/etc/passwd」は以下のコマンドで確認できます。
※コマンドラインの見方
「コマンド」「引数、その他」「コメント」「#(rootユーザ)」「$(一般ユーザ)」
# cat /etc/passwd root:x:0:0:root:/root:/bin/bash ←例(実際にはズラーッとユーザーが出ると思います)
「/etc/passwd」は6つの「:」で7つのフィールドに区切られています。
それぞれ先頭から以下の意味になります。
- ユーザー名
- 「x」という文字か、暗号化されたパスワード。「x」はシャドウパスワード使用の意味。
- ユーザーID
- グループID
- コメント(本名とか電話番号とか)。コメント無しの場合は何も記入されない。
- ユーザーのホームディレクトリ。
- ユーザーのログインシェル名。
続けて「/etc/shadow」の書式を確認
今度は「シャドウパスワード」を確認してみます。閲覧できるのはrootユーザーのみなので、rootユーザーにログインして確認してください。
「/etc/shadow」は8つの「:」で9つのフィールドに区切られています。
# cat /etc/shadow root:$1$aTuidzEz$Xlm:15590:0:99999:7::: ←例
それぞれ先頭から以下の意味になります。
- ユーザー名
- 暗号化されたパスワード
- 1970年1月1日から最後にパスワードを変更した日までの日数
- パスワードが変更可となるまでの日数(最低日数)
- パスワードを変更しなければならなくなる日までの日数(有効日数)
- パスワード有効期限が来ることを何日前からユーザーに警告するか
- パスワード有効期限が過ぎてからアカウントがロックされるまでの日数
- 1970年1月1日からアカウントがロックされる日までの日数
- 予約欄。特に使用されていない
UNIXパスワード認証でユーザーの追加、パスワードの設定
実際にユーザーの追加とパスワードの設定をしてみます。
rootユーザーでログイン(環境変数をリセットするため「-」を付ける。) # su - hogeユーザーを作成する # useradd hoge hogeユーザーのパスワードを決める # passwd hoge Changing password for user hoge. New UNIX password: ←パスワードを入力 Retype new UNIX password: ←確認のため同じパスワードを入力 passwd: all authentication tokens updated successfully.
これで新規にhogeユーザーを作り、パスワードを設定できました。
さっそく「suコマンド」でログインできるか確認します。
# su hoge パスワード: ←パスワードを入力
正常にログインできればプロンプトの表示が[hoge@~]という表記に変わったはずです。
ちなみに「rootユーザー」のパスワードを変更する場合は「passwd」とだけ入力してEnterしてください。
useraddの書式
ユーザーを作成する「useraddコマンド」は重要なためオプションも記載しておきます。
書式:useradd [オプション] ユーザー名
オプション
-c | コメント | ユーザーのコメントを付与。 |
---|---|---|
-d | ディレクトリ | ユーザーのログインディレクトリを指定。 |
-e | mm/dd/yy | ユーザーの有効期限をmm/dd/yy形式で指定。 |
-g | グループ | ユーザーの所属するイニシャル・グループを指定。 |
-G | グループ | ユーザーの所属するグループを指定。複数のときは「,」で区切る。 |
-u | ユーザーID | ユーザーのユーザーIDを指定。 |
-s | シェル | ユーザーのログインシェルを指定。 |
-m | ホームディレクトリを自動で作成。 |
その他ユーザー管理に関するコマンド
ユーザー管理をする際に利用すると便利なコマンドを紹介します。これだけ覚えればメールの利用者の作成・変更・削除ができるようになります。
usermodコマンドによるユーザー情報の変更
useraddと同じようにオプションで情報を変更します。
書式:usermod [オプション] hoge
オプション
-c | コメント | ユーザーのコメントを変更。 |
---|---|---|
-d | ディレクトリ | ユーザーのログインディレクトリを変更。 |
-e | mm/dd/yy | ユーザーの有効期限をmm/dd/yy形式で変更。 |
-g | グループ | ユーザーの所属するイニシャル・グループを変更。 |
-l | ユーザー名 | 新しいユーザー名に変更。 |
-u | ユーザーID | ユーザーのユーザーIDを変更。 |
-s | シェル | ユーザーのログインシェルを変更。 |
ユーザーの削除
# userdel hoge
ユーザーの削除と同時にホームディレクトリ(hogedir)も削除
# userdel -r hogedir hoge
ユーザーパスワードの有効期限を変更
# chage hoge
ユーザー作成時のデフォルトの設定の確認
# useradd -D
ユーザー情報の確認
# finger hoge
メールユーザーに既存のシステムユーザーを利用する際の注意点
Linuxでは今回追加するメールユーザーの他に、システムで利用するユーザー、プロセスが利用するユーザーなどが予め登録されています。それらのユーザーに送信されたメールは「エイリアス」という機能でrootユーザーに転送される設定になっています。
エイリアスの設定は「vi /etc/aliases」に記載されています。
実際に見たほうが早いと思います。「viコマンド」でファイルを開きます。
# vi /etc/aliases (省略) # General redirections for pseudo accounts. bin: root (省略) # Person who should get root's mail #root: marc
上の例で言えば「bin」がユーザー名。「root」が転送先という設定になっています。つまり「bin@example.com」へメールを送っても「rootユーザーのメールボックス」に転送されます。
もうひとつ、セキュリティの関係上rootユーザーはネットワーク経由でログインできません。メール送信サーバのDovecotもrootユーザーへの転送は許可していません。
そのため、rootユーザー宛のメールをネットワーク経由で受け取るには「/etc/aliases」で転送先を設定する必要があります。
「/etc/aliases」の最終行に「#root:marc」とありますが、コメントアウトを外して、転送したいユーザー名を指定してください。
例)hogeユーザーへrootユーザーのメールを転送する
# Person who should get root's mail root: hoge
編集が終了したら「newaliasesコマンド」で設定を有効にします。
# newaliases
これからメールユーザーを作成してテストをすると思いますが、「/etc/aliases」にすでに登録されているユーザー名を避けてテストしてください。
以上、スパムメール対策「OP25B」と「ユーザー認証」をについて解説しました。ユーザー認証の仕組みとして「UNIXパスワード認証」について触れましたが、次回はユーザー認証をさらに掘り下げるために「Linuxの各アプリケーションが共通して利用する「PAM認証」について」解説します。