Installing Milter-Greylist with GeoIP to control the spam

Discussion in 'Server Operation' started by Henrique Dias, Jun 27, 2007.

  1. Henrique Dias

    Henrique Dias New Member

    The Milter-Greylist is a milter to sendmail written in C that implements the greylist filtering system, as proposed by Evan Harris.
    The page of project have a full explanation who the Greylisting work.

    1 System requirements

    - Sendmail that supports the milter interface
    - Berkeley DB Library
    - GeoIP C Library

    2 Installing

    To install milter-greylist, we need download the most recent stable release from ftp://ftp.espci.fr/pub/milter-greylist/
    Code:
    $ wget ftp://ftp.espci.fr/pub/milter-greylist/milter-greylist-3.1.8.tgz
    But, first install the GeoIP C Library. Follow the instructions to install from this page.

    If your system not have Berkeley DB library, please install.

    Now, unpack and compile.

    Code:
    $ tar xvfz milter-greylist-3.1.8.tgz
    $ cd milter-greylist-3.1.8
    Check the documantation and the optional packages

    Code:
    $ more README
    $ ./configure --help
    Code:
    $ ./configure --with-libGeoIP
    $ make
    $ sudo make install
    3 Configuring

    Edit the greylist.conf and take a look.
    Code:
    $ sudo nano -w /etc/mail/greylist.conf
    Code:
    pidfile "/var/run/milter-greylist.pid"
    socket "/var/run/milter-greylist.sock"
    dumpfile "/var/milter-greylist/greylist.db"
    user "smmsp"
    
    # Be verbose (or use -v flag)
    #verbose
    
    # Do not tell spammer how long they have to wait
    quiet
    
    # The geoipdb statement is used to specify the location of GeoIP database
    geoipdb "/usr/share/GeoIP/GeoIP.dat"
    
    # 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 "yellow countries" geoip { \
            "BR" "CR" "DE" "FI" \
            "FR" "GB" "HU" "IL" \
    }
    
    list "red countries" geoip { \
            "CN" "HK" "KR" "RU" "TR" "TW" "UA" \
    }
    
    # And here is the access list
    acl whitelist list "my network"
    
    # Followed by an operator and a recipient count, this is used to select
    # the amount of recipients
    acl blacklist rcptcount >= 25 msg "No more than 25 recipients, please"
    
    acl greylist list "yellow countries" delay 15m autowhite 3d
    acl greylist list "red countries" delay 30m autowhite 3d
    
    # During office hours from 9:00 to 18:00 from monday to friday (like crontab)
    acl greylist time "* 9-18 * * 1-5" delay 5m autowhite 7d
    
    acl greylist default delay 10m autowhite 7d
    Test if the configuration is ok
    Code:
    $ sudo /usr/local/bin/milter-greylist -c
    Start the milter
    Code:
    $ sudo /usr/local/bin/milter-greylist
    Edit the /etc/mail/sendmail.mc file and add the lines below.

    Code:
    define(`_FFR_MILTER','1')dnl
    dnl
    dnl Greylist
    dnl
    INPUT_MAIL_FILTER(`greylist',`S=local:/var/run/milter-greylist.sock, F=T, T=S:4m;R:4m')dnl
    define(`confMILTER_MACROS_CONNECT', `j, {if_addr}')dnl
    define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')dnl
    define(`confMILTER_MACROS_ENVFROM', `i, {auth_authen}')dnl
    define(`confMILTER_MACROS_ENVRCPT', `{greylist}')dnl
    dnl
    Rebuild the sendmail.cf file
    Code:
    $ sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
    Restart the sendmail
    Code:
    $ sudo /etc/init.d/sendmail restart
    Finally check the logs to verify if everything is fine.
    Code:
    $ sudo tail -f /var/log/mail.log
    4 Links

    http://projects.puremagic.com/greylisting/
    http://hcpnet.free.fr/milter-greylist/
    http://www.maxmind.com/download/geoip/api/c/
     
    Last edited: Jun 27, 2007
  2. falko

    falko Super Moderator Howtoforge Staff

    Thanks a lot! Maybe you can contribute this to the main site ( http://www.howtoforge.com/add_howto ) so that I can publish it on the front page? If you don't have the time, I can do it for you. Just let me know.
     

Share This Page