IPTABLESでSPAMメールFILTER構築

自宅サーバーマシンに、IPTABLESでSPAMメールFILTER構築してみましたので、その方法について。

まず、ユーザー定義チェインを作成。
SPAMFILTERには、フィルターを行うIPアドレスの定義を行う。
SPAMFILTEREDには、フィルターの実際のアクションの定義を行う。
 iptables -N SPAMFILTER
 iptables -N SPAMFILTERED
 iptables -A SPAMFILTERED -j DROP
 iptables -I SPAMFILTERED -j LOG --log-prefix '[IPTABLES SPAMFILTER] : '
 iptables -I INPUT -p tcp -m state --state NEW -j SPAMFILTER
ログが、必要ない場合、
 iptables -I SPAMFILTERED -j LOG --log-prefix '[IPTABLES SPAMFILTER] : '
の、設定は、必要ありません。
フィルターを行うIPアドレスの定義は、次のように行います。
 iptables -A SPAMFILTER -s 58.8.0.0/14 -p tcp --dport 25 -j SPAMFILTERED
 iptables -A SPAMFILTER -s 58.14.0.0/12 -p tcp --dport 25 -j SPAMFILTERED
 iptables -A SPAMFILTER -s 58.29.0.0/10 -p tcp --dport 25 -j SPAMFILTERED
と、必要に応じてフィルターを行う。
実際問題として、中国(CN)や韓国(KR)からのスパムメールに困っている場合、次の方法でフィルターを作成することができる。
filter.sh
#!/bin/bash

wget http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
./filter.cgi > spam-tmp.sh
spam-tmp.sh
filter.cgi
#!/usr/local/bin/php
<?
  $fl_name="delegated-apnic-latest";
  $ar_data = file($fl_name);
  echo "iptables -F SPAMFILTER\n";
  foreach($ar_data as $line){
    $lines = explode('|',$line);
    if($lines[0]=='apnic' and $lines[2]=='ipv4'
 and ($lines[1]=='CN' or $lines[1]=='KR')){
      $str_ip1 = $lines[3];
      $tmp_ct = $lines[4];
      $mask = 32;
      while($tmp_ct > 1){
        $tmp_ct = $tmp_ct /2;
        $mask--;
      }
      echo "iptables -A SPAMFILTER -s {$str_ip1}/{$mask} -p tcp --dport 25
 -j SPAMFILTERED\n";
    }
  }
?>
本ホームページの転載・複製を禁じます。
--- KONDO-NET.GR.JP ---
今日のアクセス人目