taRgrey(S25R+tarpitting+greylisting)という手法※を用いてメールサーバー側でスパムメール送信元からの接続を拒否してスパムメールを受信しないようにする。
ここでは、milter-greylistを使用してスパムメール送信元からの接続を拒否する。メールサーバー(Postfix)とmilter-greylistとの連携はmilter-managerを利用して行なう。
なお、本手法をすり抜けたスパムメールは他の手法で除去する。
&color(red){※taRgreyとは
スパムメール送信元の特徴(・動的IPアドレスであることが多い、・大量のサーバーへメールを送るため応答が遅い、または拒否するサーバーへの送信はあきらめる)を逆手にとり、接続元IPアドレスが動的IPアドレスの可能性がある場合(S25R)、わざと応答を一定時間遅延させ、接続を切断せずに待ち続けた場合のみメールを受信する(tarpitting)。接続を切断して再度接続してきた場合でも一旦接続を拒否し、再送要求を行い、再送してきた場合のみ受信する(greylisting)。
なお、通常のメールサーバーは応答が遅延しても待ち続け、接続が拒否されても再送要求が行われた場合は再度送信を試みるため、本手法による影響は受けない。tarpittingとgreylistingを行う対象もS25Rで動的IPアドレスの可能性がある場合のみのため、通常のメールサーバーからのメール受信が遅延することもない。
※メールサーバーを導入済であること};
[root@localhost ~]# yum -y install milter-greylist ← milter-greylistインストール |
[root@localhost ~]# vi /etc/mail/greylist.conf ← milter-greylist設定ファイル編集 |
socket "/run/milter-greylist/milter-greylist.sock" 660 ← グループにソケットへの書き込み権限付加 # Your own network, which should not suffer greylisting #list "my network" addr { 127.0.0.1/8 10.0.0.0/8 192.0.2.0/24 } ← 行頭に#を追加してコメントアウト --追加(ここから)-- # 内部ネットワークアドレス list "my network" addr { \ 127.0.0.1/8 \ 10.0.0.0/8 \ 172.16.0.0/12 \ 192.168.0.0/24 \ } --追加(ここまで)-- #racl greylist list "grey users" delay 30m autowhite 3d ← 行頭に#を追加してコメントアウト #racl whitelist default ← 行頭に#を追加してコメントアウト racl whitelist tarpit 125s ← 追加(応答を125秒遅延させて接続が継続している場合は受信) racl greylist default ← 追加(125秒の遅延応答を待たずに切断後再接続してきた場合は一旦、受信拒否して再送要求) |
[root@localhost ~]# systemctl start milter-greylist ← milter-greylist起動 |
[root@localhost ~]# systemctl enable milter-greylist ← milter-greylist自動起動設定 |
[root@localhost ~]# vi /etc/postfix/main.cf ← Postfix設定ファイル編集 |
milter_command_timeout = 150 ← 追加(milterアプリケーションの応答を150秒待つ) |
[root@localhost ~]# systemctl reload postfix ← Postfix設定反映 |
[root@localhost ~]# curl -s https://packagecloud.io/install/repositories/milter-manager/repos/script.rpm.sh | bash ← milter-manager_reposリポジトリ追加 |
[root@localhost ~]# yum -y install milter-manager ← milter-managerインストール |
[root@localhost ~]# systemctl start milter-manager ← milter-manager起動 |
[root@localhost ~]# systemctl enable milter-manager ← milter-manager自動起動設定 |
[root@localhost ~]# vi /etc/postfix/main.cf ← Postfix設定ファイル編集 |
下記を追加 milter_protocol = 6 milter_default_action = tempfail milter_mail_macros = {auth_author} {auth_type} {auth_authen} smtpd_milters = unix:/var/run/milter-manager/milter-manager.sock |
[root@localhost ~]# usermod -G milter-manager -a postfix ← milter-managerグループにpostfixユーザーを追加 |
[root@localhost ~]# systemctl reload postfix ← Postfix設定反映 |
[root@localhost ~]# usermod -G grmilter -a milter-manager ← grmilterグループにmilter-managerユーザーを追加 |
[root@localhost ~]# usermod -G mail -a milter-manager ← mailグループにmilter-managerユーザーを追加 |
[root@localhost ~]# systemctl restart milter-manager ← milter-manager再起動 |
[root@localhost ~]# milter-manager --show-config | less ← milter-manager設定確認 |
・ ・ ・ define_milter("milter-greylist") do |milter| ← milter-manager・milter-greylist連携設定 # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:44 milter.connection_spec = "unix:/run/milter-greylist/milter-greylist.sock" # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:38 milter.description = "Grey listing filter for sendmail" # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:37 milter.enabled = true # default milter.fallback_status = "accept" # default milter.evaluation_mode = false milter.applicable_conditions = [ # default "Sendmail Compatible", # default "Stress Notify", # default "Trust", # default "Remote Network", # default "S25R", ← milter-greylist適用条件にS25Rが設定されている※ # default "Unauthenticated", ] |
※S25Rはmilter-greylist側に設定するのではなく、milter-managerから初期提供されているmilterの組み込み適用条件のS25R(/etc/milter-manager/applicable-conditions/s25r.conf)を利用する=milter-manager側にてS25Rを実施して該当する場合(接続元IPアドレスが動的IPアドレスの可能性がある場合)のみ、milter-greylistに制御を渡す。milter-greylist側ではtarpitting(遅延応答)とgreylisting(再送要求)を行う。