メールサーバー · 1 min read · Oct 23, 2025

スパム防止のための自宅メールサーバーの設定 (やや代替的な方法) (Debian Squeeze)

スパム防止のための自宅メールサーバーの設定 (やや代替的な方法) (Debian Squeeze)

はじめに

メールのスパムは大きな問題です。しかし、私は自分自身にとって非常にシンプルな解決策を見つけましたが、完全に「移行」するには時間がかかります。

その解決策は、誰かにメールアドレスを渡す必要があるたびにユニークなメールアドレスを作成することです。Twitterのアカウントが欲しい場合は、「[email protected]」を使用します。ウェブベースのサービスには、@の左側に完全なドメイン名(サブドメインを含む)を使用します(いくつかの設計が不十分なウェブサイトはwwwを有効なメールアドレスとして認識しないため、その場合は省略します)。

人には、次のような形式を使用します:「[email protected]」。または「[email protected]」のように使用することもできます。良い点は、メールアドレスの@の左側はほぼ「無限」であることです。

各連絡先に対してユニークなメールアドレスを生成するため、どこでメールアドレスが漏洩したかを簡単に特定でき、その後簡単に削除できます。

このハウツーでは、簡単なメール管理を行うためのスクリプトを含む完全に機能するメールサーバーを設定します。また、DNS設定部分も含まれています - たとえ動的アドレスであっても - たとえば、自宅から小さなメールサーバーを運営したい場合です。

概要

このハウツーでは、サーバーとしてDebian Squeezeを使用します。他のLinuxディストリビューションでは、適宜変更を行う必要があります。

このハウツーで行われることの簡単な概要は次のとおりです:

  • ドメイン名の取得
  • 動的IPの管理 - 必要に応じて
  • DNSとルーティングの管理
  • postfixの設定
  • procmailの設定
  • dovecotの設定
  • メールアドレス管理用のウェブサーバーの設定
  • アドオン付きのThunderbirdの設定

クレジット

このハウツーでは、特にbindとメールサーバーの設定に関して、他のいくつかのハウツーにも依存しています。そのため、私はFalkoのPerfect Debian Serverハウツーからほぼそのままコピーしました。また、メールリレーセクションはsjauによるこちらのハウツーから借用しました。これらがなければ、私はおそらくこれを設定することができなかったでしょう。

ドメイン名の取得

自分のメールサーバーを運営する前に、MXレコードを設定できるドメイン名が必要です。数多くのドメインレジストラが存在するため、具体的な提案はしたくありません。私が知っている中で最も安価なものの一つはGoDaddyです。

私はGoDaddyを使用していませんが、私が聞いた限りでは、彼らは堅実なサービスを提供しています。

動的IPの管理

もう一つの課題は、動的IPアドレスでの管理方法です。どこかに専用のボックスを借りていない場合は、自宅のインターネット接続を使用しているため、静的IPを持っていない可能性が高いです。

ウェブ上では、他の人が常にあなたに連絡できるように静的IPを持つことが重要です。しかし、それを助けるサービスもあります。

私が使用しているサービスの一つはEveryDNSです。彼らは私にドメイン名のDNSをホストさせてくれます。

現在、彼らはまだ無料でサービスを提供しています。2010年に買収されましたが、その時の顧客が寄付したお金を持っている場合、今後も無料でシステムを使用できるという約束がありました。彼らのウェブページには、新しい顧客が支払う必要があるとはまだ記載されていませんが、確実ではありません。

EveryDNSを使用する理由は、DNSを更新するために使用できる小さなperlスクリプトも提供しているからです。これは、静的IPアドレスを持っていない場合、時間とともにIPが変わるため、重要です。このperlスクリプトはここから入手できます。

ドメイン名を取得したら、まずWhat Is My IPにアクセスします。これにより、現在のパブリックIPアドレスが表示されます。次に、EveryDNSにアカウントを作成し、少なくとも次のエントリを作成します。ここでMYDOMAIN.COMはあなたのドメイン名です:

(1) “A”レコードタイプを作成し、完全修飾ドメイン名を”MYDOMAIN.COM”に設定し、値をあなたのパブリックIPアドレスに設定します。

(2) “CNAME”レコードタイプを作成し、完全修飾ドメイン名を”*.MYDOMAIN.COM”に設定し、”MYDOMAIN.COM”に設定します。

(3) “MX”レコードタイプを作成し、完全修飾ドメイン名を”MYDOMAIN.COM”に設定し、値を”MYDOMAIN.COM”に設定し、”MX Value”を”10”に設定します。

これで、ドメインのDNSを設定しました。メインドメインはあなたのIPアドレス(aレコード)で見つかり、他のすべてのドメインもそこに見つかります(cnameレコードの*がメインドメインを指しています)し、メールサーバーもそこで運営しています(mxレコード)。

rootユーザー

以下の作業はrootユーザーとして行います - 特に指示がない限り。

動的IPの更新

前述のように、静的IPアドレスを持っていない場合は、DNS情報を定期的に更新する必要があります。

(1) perlスクリプトを取得し、実行可能にします

cd /root  
wget http://www.everydns.net/eDNS.pl  
chmod 0755 eDNS.pl

(2) perlスクリプトを呼び出すbashスクリプトを作成します(他の方法もありますが、私はこれが最も簡単だと思いました):

touch eDNS.sh  
echo "#!/bin/bash" > eDNS.sh  
echo "perl /root/eDNS.pl -u USERNAME -p PASSWORD -d MYDOMAIN.COM" >> eDNS.sh

USERNAMEとPASSWORDをあなたのeverydnsログイン資格情報に置き換えます。

(3) 定期的に実行するためのcronを設定します

私はすべてのcronを含むcron.txtファイルで作業するのが好きです。そうする方が維持が簡単だと思います。

まず、すでにcronエントリがあるかどうかを確認します:

crontab -l

まだcronエントリがない場合は、次のコマンドを実行します

touch cron.txt  
chmod 0700 cron.txt  
echo "*/5 * * * * /root/eDNS.sh >/dev/null 2>&1" > cron.txt

すでにcronエントリがある場合は、それらをコピーし、cron.txtファイルを作成して挿入し、次のコマンドも追加します:

*/5 * * * * /root/eDNS.sh >/dev/null 2>&1 

これでcron.txtをcronとして読み込みます:

crontab cron.txt

そして、正しく追加されたかどうかを確認します:

crontab -l

LAN/ルーティング/BIND

次の問題は、LAN内でドメインを解決する方法です。メールサーバーがルーターの背後にある場合、192.168.0.xまたは10.0.0.xのようなローカルIPを持つ可能性があります。

ルーターの背後にいる場合は、次のポートをサーバーに転送する必要があります:25、80、143、443、991。587のような他のポートが必要な場合もあります。

また、LAN内からドメイン名を解決する方法の問題にも直面します。LANの外部には、現在のIPアドレスを指すDNSエントリがあります。しかし、LAN内にいると、DNSクエリを行うと、パブリックIPのみが返され、通常は失敗します。

この問題にはいくつかの解決策があります - その問題が存在するかどうかは別として。

一つの方法は、ルーターでdnsmasqを使用することです(例:dd-wrtまたはtomato-wrt)。ただし、これが機能するかどうかは保証できないため、私が考える唯一の他のオプションは、メールサーバー上に完全なDNSサーバーを設定することです。

このチュートリアルでは、私は最も慣れているchrooted Bind9を使用します。他のDNSサーバーについては、オンラインで豊富なドキュメントが見つかります。

(1) ソフトウェアをインストールし、停止します

apt-get install bind9  
/etc/init.d/bind9 stop

(2) /etc/default/bind9の設定を変更し、オプション行を次のようにします:

OPTIONS="-u bind  -t /var/lib/named" 

(3) /var/libの下に必要なディレクトリを作成します:

mkdir -p /var/lib/named/etc  
mkdir /var/lib/named/dev  
mkdir -p /var/lib/named/var/cache/bind  
mkdir -p /var/lib/named/var/run/bind/run

(4) 次に、/etcから/var/lib/named/etcに設定ディレクトリを移動します:

mv /etc/bind /var/lib/named/etc

(5) 古い場所から新しい設定ディレクトリへのシンボリックリンクを作成します(将来BINDが更新されたときの問題を避けるため):

ln -s /var/lib/named/etc/bind /etc/bind

(6) nullおよびrandomデバイスを作成し、ディレクトリの権限を修正します:

mknod /var/lib/named/dev/null c 1 3  
mknod /var/lib/named/dev/random c 1 8  
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random  
chown -R bind:bind /var/lib/named/var/*  
chown -R bind:bind /var/lib/named/etc/bind

(7) /etc/rsyslog.d/bind-chroot.confファイルを編集し、次を追加します

$AddUnixListenSocket /var/lib/named/dev/log 

(8) サービスを再起動します

/etc/init.d/rsyslog restart  
/etc/init.d/bind9 start

そして、/var/log/syslogでエラーを確認します。

これで、chrooted環境にBind9を設定しました。次に行うべきことは、実際にドメインのゾーンファイルを追加することです。

(9) /etc/bind/named.conf.localを編集し、次を追加します

zone "MYDOMAIN.COM" IN {
        type master;
        file "/etc/bind/zones/MYDOMAIN.COM.db";
        allow-update { none; };
};

(10) ゾーンフォルダーとゾーンファイルを作成します

mkdir /etc/bind/zones  
touch /etc/bind/zones/MYDOMAIN.COM.db  
chown -R bind:bind /etc/bind/zones/MYDOMAIN.COM.db

(11) MYDOMAIN.COM.dbにゾーンファイル情報を追加します

$TTL    86400
@               IN SOA  @ MYDOMAIN.COM. (
                                        1              ; serial
                                        2600              ; refresh
                                        15M             ; retry
                                        3600              ; expiry
                                        360 )            ; minimum
@               IN NS           ns.MYDOMAIN.COM.
ns              IN A            LOCALIP
www             IN A            LOCALIP
MYDOMAIN.COM.             IN A            LOCALIP
MYDOMAIN.COM.     IN MX   10      LOCALIP

もちろん、MYDOMAIN.COMを実際のドメイン名に、LOCALIPを静的LAN IPアドレスに置き換えます。基本的に、ここではそのドメインのネームサーバーが”ns.MYDOMAIN.COM”にホストされており、”ns.MYDOMAIN.COM”は静的ローカルIPアドレスで見つかることを伝えています。

(12) Bind9を再起動します

/etc/init.d/bind9 restart

(13) ルーターのNS解決を変更します

Bind9が設定されたので、最後に行うべきことがあります。ルーターでネームサーバーの解決順序を変更する必要があります。最初のネームサーバーは、対応する静的ローカルIPを持つあなたの「メールサーバー」でなければなりません。そうでなければ、全体のbind9設定は無意味になります。2番目のネームサーバーには、すでに最初のものとして入っていた値を入力します。ルーターによっては、少し難しい場合があります。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。