'simscan'에 해당되는 글 3건

  1. 2012.09.03 simscan option 설명
  2. 2012.05.14 [qmail] antispam 관련.
  3. 2012.04.17 메일서버 구축 및 개발을 위한 정보 (링크만)

simscan option 설명

ITWeb/개발일반 2012.09.03 14:39

simscan 설치 시 option 설명


옵션 설명

--enable-user=유저명 (simscan을 유저를 셋팅한다. 기본값으로 simscan)

--enable-clamav=y|n (clamav 를 이용한 스캐닝. 기본값으로 y 이다.)


--enable-custom-smtp-reject=y|n (바이러스 이름을 포함하여 리턴 메시지를 보내도록한다)

주의 위의 옵션을 사용하기 위해서는 소스디렉토리/contrib/qmail-queue-custom-error.patch 의 패치를

Qmail에 해주어야 한다. 또한 나중에 설명되는 옵션중에 하나인 enable-dropmsg 의 값이 y이면 안된다.)

--enable-per-domain=y|n ( 많은 도메인에 대해서 메일서비스를 하고 있으며 각각에 대한 simscan 의 설정을

하고자 한다면 y를 택하도록 한다.)

--enable-attach=y|n ( 첨부파일에 대해서 체크를 할 것인지의 여부를 정한다. /var/qmail/control/ssattach 파일안에 필터링할 파일명이나 확장자를 넣어주면 된다.)

--enable-spam=y|n (스팸메일에 대한 필터링을 할 것인지에 대한 옵션이다. 스팸어세신에 의해서 status YES인 메일에 대해서는 반송을 하게 될것이다.)

--enable-spam-passthru=y|n ( 스팸 어세신에서 붙은 status값을 무시하고 그냥 통과시키고자 할 경우에 사용한다. 이는 나중에 procmail 이나 maildrop으로 스팸 편지함이나 별도의 디렉토리에 스팸 메일을 저장하고자 한다면 유용하게 사용될 수 있을 것이다.)

--enable-spam-hits=점수 (기본값으로 10 이 셋팅되며 스팸 어세신에서 정한 값을 넣으면 될 것이다.)

--enable-spamc=PTAH (spamc 바이너리파일의 위치를 잡아준다. 자동으로 잡을것이다^^)

--enable-spamc-args (spamc 에 필요한 옵션을 지정할 수 있다. 필자의 경우에 퍼포먼스를 위해 spamd 를 소켓을 사용하게 하였으며 소켓의 위치는 /tmp/spamd 였다, 쌍따옴표로 지정한다는 점에 주의 하라)

Ex) --enable-spamc-args=-U /tmp/spamd

--enable-dropmsg=y|n (스팸 메일에 대한 메시지를 sender 에게 보내지 않겠다는 옵션이다.)

--enable-quarantinedir=디렉토리위치( 스팸,바이러스 메일을 따로 저장해둘 디렉토리를 지정한다)

--enable-received=y|n ( 메일헤더에 received를 추가할 것인지에 대한 옵션이다. 버전정보 및 처리시간이 기록되어진다.)

Additional information and a guide can be found at

= Overview =
SimScan is a simplified scanner for qmail similar to qmail-scanner and qscand.
It uses clamav, trophie, and/or spamassassin.  It also supports attachment
blocking by extension.  Simscan is written entirely in C to ensure maximum
speed.  There are several options to allow simscan to scan per domain, and
reject spam mail.

= Requirements = 
# ripmime (If you plan on using attachment blocking)<br>
# qmail with qmail-queue patch<br>
# clamav (optional)<br>
# spamassassin (optional)<br>
# trophie (or sophie) (both optional)

= How it works =
* Simscan creates a temporary working directory. You can specify the base
working directory with the --enable-workdir=/path. The default location
of this base is the  /var/qmail/simscan directory. The temporary working
directory under this bass directory is named as
"unix time in seconds" . "microseconds" . "process id".

The email is read into a temporary file named "msg.unixtime.micro.pid.

* ripmime is called to break this file into separate mime parts.

* Optionally (--enable-attach) the mime message parts are checked against
the list of attachments to block.

Put the list of attachments in /var/qmail/control/ssattach or place the list
in the /var/qmail/control/simcontrol file for per-domain blocking.
This file gets read each time simscan is kicked off.

* clamdscan is called to check all the files in the working directory.
The return code of clamdscan is checked to see if it found a virus.
If it did, simscan exits back to qmail-smtpd with a permenent error,
causing the mail to be bounced back to the sender.

* Optionally (--enable-spam) spam assassin is called via spamc.
The email returned by spamc is checked X-Spam-Flag: header.  If this header
contains "YES", the spam is rejected.  You can reject instead on the calculated
hit count value by adding the --enable-spam-hits.  SimScan checks for both
"hits=" and "score=" so that both old and new versions of spamassassin are

* Optionally (--enable-per-domain) enable per domain clamav and
spamassassin processing. You will need to edit /var/qmail/control/simcontrol
to define what domains get what scans.  Further details on editing this file
are below.

Then run /var/qmail/bin/simscanmk to build the cdb files that simscan
uses. The changes will take effect immediately.

* Finally, if all of the above succeeds then the msg file is passed on to
qmail-queue. And the working directory and all the temporary files are deleted,
unless the SIMSCAN_DEBUG environment variable is set.

= Configuration Options =
Following is a list of all of the configure options and defaults:

  --enable-user=<user>              Change the user for simscan.
                                    Default: simscan.
  --enable-clamav=y|n               Turn on clamav scanning. default yes.
  --enable-clamdscan=PATH           Full path to clamdscan program.
  --enable-custom-smtp-reject=y|n   Return smtp reject message with virus name.
  --enable-per-domain=y|n           Turn on per domain based checking.
  --enable-attach=y|n               Turn on attachment scanning. default no.
  --enable-spam=y|n                 Turn on spam scanning. default no.
  --enable-spam-passthru=y|n        Pass spam email thru or reject
                                    Default: disable (reject)
  --enable-spamc-user=y|n           Set user option to spamc.
  --enable-spam-hits=number         Reject spam above this hit level.
                                    Default 10.0
  --enable-spamc=PATH               Full path to spamc program.
  --enable-spamc-args=ARGS          Arguments to pass to spamc.
  --enable-dropmsg=y|n              Drop message in case of virus/spam found.
                                    Don't return error to sender.
                                    Default: disable (return error)
  --enable-quarantinedir=DIR        Directory to keep spam and/or infected emails
                                    Default: disabled
  --enable-qmaildir=DIR             Base qmail directory /var/qmail.
  --enable-workdir=DIR              Directory to unpack emails
                                    Default: /var/qmail/simscan
  --enable-qmail-queue=PATH         Full path to qmail-queue program.
  --enable-trophie-path=PATH        Full path to the trophie binary.
  --enable-trophie-socket=PATH      Full path to the trophie socket.
  --enable-ripmime=PATH             Full path to ripmime program.
  --enable-received=y|n             Simscan should add a received line showing
                                    the version of all scanners that checked
                                    the message

These options are only needed when the received line option (--enabled-received=y)
and the corresponding scanners are enabled as well:

  --enable-spamassassin-path=PATH   Path to the spamassassin binary
  --enable-clamavdb-path=PATH       Directory where the clamav master.cvd and
                                    daily.cvd files are saved
  --enable-sigtool-path=PATH        Path to the sigtool binary

= Configuration Details =
Below are more detailed descriptions of each configuration option.

   This option defines the user that simscan will run as.  By default, the
   user is 'simscan'.

   This option turns clamav scanning on or off.  When enabled, an incoming
   email will be rejected if a virus is detected in the email.

   This option defines the path to the clamdscan binary.  This is the full
   path to the binary.
   Note : This option does nothing when clamav is not enabled.

   This option turns custom smtp reject messages on and off.  When enabled
   simscan will place the virus name in the reject message if a virus is
   Note : The qmail-queue-custom-error.patch is needed to make this option
          work properly.  You can find this patch in the contrib directory.
   Note 2 : Enabling dropmsg disables this option

   This option turns per-domain scanning on and off.  Per domain scanning
   allows the administrator to explicitly state what scanning occurs for
   what domain.  In addition, attachment scanning can be enabled or disabled
   for each domain.  Details about how to set up per-domain scanning are

   This option turns on attachment scanning.  Attachment scanning will block
   all attachments specified in /var/qmail/control/ssattach.  Attachment
   scanning is disabled by default.

   Ths option turns spam scanning on and off.  When enabled, simscan allows
   mail over a certain spam threshold to be rejected back to the sender.

   This option turns spam passthru on and off.  When enabled, email
   identified as spam via the X-Spam-Status: header will be passed on to the
   user instead of rejected.
   Note : Enabling spam-hits effectively disables this option.

   This option turns per-user spamassassin on or off.  When enabled, the email
   address of the first rcpt to user is sent to spamassassin.  This allows
   spamassassin to use customized rules and settings for that email.

   This option specifies the number of hits a spam must receive to be rejected
   by simscan.  This option defaults to 10 hits.
   Note : This option disables spam passthru

   This option specifies the full path to the spamc binary.

   This option defines the arguments to pass to spamc.  Be sure to place quotes
   around the options you define.

   This option causes messaged to be dropped when a virus/spam is found, rather
   than returning a 5xx error to the sender.  This option is disabled by default.
   Note : This option overrides the Custom SMTP Reject option
   Note 2 : If SPAM Passthru is enabled, SPAM will NOT be dropped unless 
            spam-hits is enabled

   This option defined a directory to keep spam and/or infected emails.  This
   option is disabled by default.

   This option defines the location of qmail.

   This option defines the location of the working directory.  Note : The
   default directory is /var/qmail/simscan

   This option defines the full path and name of the qmail-queue program.
   Incoming mail is passed to this program after being scanned by SimScan.

   This option defines the full path to the trophie binary. This option is only
   necessary if the received line option (--enable-received) is chosen.

   This option defines the path to the trophie socket.  Defining this option
   enables trophie scanning.

   This option defines the path to the ripmime program.  This program is used
   to rip apart emails into files.

   Simscan adds a Received line, showing the runtime, and a version string of
   the scanners that checked the message:
   Received: by simscan 1.0.6 ppid: 25399, pid: 25400, t: 4.7007s
         scanners: attach: 1.0.6 clamav: 0.80/m:27/d:556 trophie: 7.000-1011/218/74141 spam: 2.63

   This option defines the full path to the spamassassin binary.  This option
   is only necessary if the received line option (--enable-received) is chosen.

   This option defines the full path to clamav master.cvd and daily.cvd files.
   This option is only necessary if the received line option (--enable-received)
   is chosen.

   This option defines the full path to the sigtool binary.  This option is only
   necessary if the received line option (--enable-received) is chosen.

= Attachment blocking option =
Attachments can be blocked. It is disabled by default.
If you use the per domain scanning as well, look in that section of the
documentation on how to enable the checking.
With only the attachment blocker and NO per domain option it works like

Put the list of attachments in /var/qmail/control/ssattach.
List each attachment on it's own line. For example:
  [user@mailserver user]$ cat /var/qmail/control/ssattach

Then configure with:
  ./configure --enable-attach (with any other options you want)
  make install-strip

= SpamAssassin options =
There are four different ways to configure simscan with spamassassin
* no spam processing
  This is the default. No spamassassin processing will be done.

* Reject email at smtp level if spamassassin considers it spam. This might reject false positives (good email that looks like spam)

* Reject email above a "score" of some number, like 15 and pass everything else through to the user.
  --enable-spam --enable-spam-hits=15

* Do not reject anything. Pass the spamassassin processed message through to the user
  --enable-spam --enable-spam-passthru

In addtion you can enable per user preference processing for email with just one recipient. Add the following option

Look at the rc.spamd sample startup script for spamd options that work with vpopmail and per user preferences. Also look at the contrib directory for patches to spamassassin to make vpopmail/per user processing work.

= Trophie/Sophie option =
To enable the trophie virus scanner :

  ./configure --enable-trophie-socket=/path/to/the/socket \

As sophie uses the same interface it may work as well,
but is not tested!

= How SMTP rejection works =
There are currently three options for handling SMTP rejection.  SMTP
rejection occurs when a virus is detected, or when the spam score is
over the spam-hits level.

The default rejection option is to reject with a standard 5XX reject
message.  This rejection message looks as follows :
  554 mail server permanently rejected message (#5.3.0)

If --enable-dropmsg is used, messages are dropped with no rejection
message.  The connection is simply closed without warning.

If --enable-custom-smtp-reject is used, messages are rejected with
a custom message.  You will need to apply the qmail-queue-custom-error.patch
patch located in the contrib directory in order to make this work.

For virus rejection, the message contains the name of the virus such as :

  Your email was rejected because it contains the Worm.Bagle.AU virus

For spam rejection, the message is more generic, merely stating that
the message was rejected because it was considered spam :

  Your email is considered spam (53.5 spam-hits)

For attachment rejection, the message contains the name of the
attachment :

  Your email was rejected because it contains a bad attachment: trojan.exe

= Enable Per Domain processing =
To enable per domain processing :

  ./configure --enable-per-domain (with any other options you want)
  make install-strip

Edit the /var/qmail/control/simcontrol text file
You can enable/disable clam/spam/trophie/attachments per domain
and per user and set a default for the whole machine.

Here is an example:
  [user@mailserver user]$ cat /var/qmail/control/simcontrol

The third line sets the default for the whole machine to
enable clam,trophie, spam scanning, and sets the reject level for
spam hits to 20.1.

The second line sets clam off and spam on for the example.com domain and
disallows .mp3 files for the attachment scanner

The first line sets clam on and spam off for postmaster@example.com and
.txt and .com files for the attachment names.

The order of precedence is:
  email address (overrides all)
  domain (overrides default)
  default (only used if not overridden by domain or email address.

First the sender address will be looked up and then the recipients.
Without any matches, no scans will be done.

Then run /var/qmail/bin/simscanmk to build the simcontrol.cdb file.
You can rebuild this files at any time. The simscanmk program can safely
update the cdb files while the system is running.

Qmail extensions are handled like this: the address is broken into their
parts and are looked up.  test-list-owner@test.ch looks up:


= Security =
The simscan program is restricted to running setuid simscan
to protect the rest of the system. It does all of it's work
in the /var/qmail/simscan directory (default location).

The simscan program runs setuid simscan. It does all of it's work
in the /var/qmail/simscan directory which is owned by simscan.

= Permissions and ClamAntiVirus =
To get ClamAV to play nicely with simscan's permissions you have two options:
* run clamd as root
* Add clamav to simscan's group. Then clamav will have access
to the working directory and it's files. On Linux like systems:
usermod -G simscan clamav

= How to chain additional scanning programs with simscan =
When simscan finishes it expects to call a program that reads
the file descriptors like qmail-queue does. You can configure
simscan to call a different program. By default the configure
script picks up the path to your qmail-queue program, which
is normally /var/qmail/bin/qmail-queue. Use this configure option:


where PATH is full path to qmail-queue program.

I do not know why you would want to have another scanning process happen,
but you can sure configure it before compiling.

= How to Disable/Enable simscan for smtp connections by IP ranges =
Use the standard tcp.smtp text file to set or not set the QMAILQUEUE
environment variable per IP ranges. qmails smtp server is normally
run via tcpserver with the -x option to the constant database file

Turn simscan off for our machines loopback address (127.*.*.*).<br>
Disable it for hypothetical local linux users on the 192.168.1.* lan.<br>
Enable it for hypothetical local windows users on the 192.168.2.* lan.<br>
Finally, we enable simscan(clamav/spamassassin) for all those untrusted
internet email senders.

Example tcp.smtp file contents:
  [user@mailserver user]$ cat tcp.smtp

This tcp.smtp file then needs to be compiled into the tcp.smtp.cdb file
using your systems method of generating it. If you only need the rules
in the tcp.smtp file you can compile it with this command:

  [user@mailserver user]$ cd /to/directory/where/your/tcp.smtp.cdb file lives
  [user@mailserver user]$ /usr/local/bin/tcprules tcp.smtp.cdb tempfile < tcp.smtp

Once compiled, the rules take effect immediately. Actually it
takes effect on every new smtp connection.

= Temporary File Management =
Simscan uses unique file names for the message, to/from headers and the
optional spamassassin output. The files are created in the unique simscan
work directory for this process. The files are unlinked along with the
temporary work directory just before we hand/execl all the information to
qmail-queue or on error exits.

         data          file name
       ____________   _______________
       message fd 0 = msg.X.Y.Z          where X = unix seconds
       to/from fd 1 = addr.X.Y.Z               Y = microseconds
       spamassassin = spamc.msg.X.Y.Z          Z = simscan process id

fd 0 and fd 1 normally come from the qmail smtp daemon.

Temporary files and directories are not deleted if the SIMSCAN_DEBUG
environment variable is set.

= Sample qmail startup script =
rc.qmail in the contrib directory is our sample qmail startup script. It shows you how you
can set the QMAILQUEUE environment variable to call simscan for
all incoming SMTP email.

Notice that we run our smtp server as root. We also run clamd as root. If you are having permission
problems you may want to consider running both as root.

= Sample spamassassin startup script =
rc.spamd in the contrib directory is a sample spamd startup script.
It sets enables the vpopmail and per user perferences option. It also
sets the spamd socket to /tmp/spamd.sock. 

You must use the --enable-spamc-args="-U /tmp/spamd.sock" option to 

simscan if you use this startup script.

tags : simscan
Trackback 0 : Comment 0

[qmail] antispam 관련.

ITWeb/서버관리 2012.05.14 23:38



Anti spam 시스템 구축하기 

  • 이글은 qmail을 이용한 메일서버를 운영중인 시스템 관리자를 위한 문서이며 본문의 내용중에 다소 틀린 내용이 있을 수 있습니다.
  • 글에 문제가 있다면 언제라도 고쳐서 업데이트를 해주시길 바라겠습니다.^^;
  • 좋은 의견은 stone@linuxstudy.pe.kr 로 주시면 감사하겠습니다.
  • 존칭은 생략하도록 하겠습니다. 널리 이해해 주시기 바랍니다.


2 어디서 부터 막을 것인가? 

qmail 시스템에서 스팸 필터링 하는 과정은 크게 세 가지 정도로 구분지어 본다.(이건 어디까지나 필자의 의견이다..^^)
이번 장 에서는 전체적으로 스팸 필터링하는 과정에 대한 설명을 하고 실제 스팸필터링 도구를 이용하는것은 3장을 참고하도록 한다.

2.1 메일 시스템에 접근하는 단계에서의 필터링 

이 단계에서는 불 필요한 메일에 대한 처리 과정이 없이 smtp 서버에 접속을 막기 때문에 서버의 불필요한 자원의 낭비를 막아주는 효과가 있다.
TCP/IP 프로토콜 중에서 주로 IP 기반의 필터링을 하는 과정이다.

2.1.1 rblsmtpd 를 이용 

rblsmtpd 프로그램은 [http]ucspi-tcp 패키지에 포함되어 있는 프로그램으로 rbldns서버에 쿼리를 던져서 그 결과에 따라 접속 허가를 해주는 프로그램이다.

rblsmtpd 설정 예(qmail-smtpd/run 파일의 내용이다.) 
주의.) 필자의 셋업을 그대로 복사해서 사용하지는 말라.테스트용 run파일이다.^^;
rblsmtpd가 들어가는 라인만 참조하자.

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`

rbldns="-r bl.spamcop.net -r rbl.linuxstudy.pe.kr"

exec /usr/local/bin/softlimit -m 100000000 \
/usr/local/bin/tcpserver -vRHl0 -x/etc/tcp.smtp.cdb \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd -t 30 -b $rbldns \
/var/qmail/bin/qmail-smtpd mail.linuxstudy.pe.kr \
/bin/checkpassword /bin/true 2>&1

2.1.2 tcp.smtp(cdb) 이용 

qmail.kldp.net 에서 열심히 활동해주시고 계시는 ironiris 님이 업데이트 하셨던 [http] 스팸서버 발송지 주소리스트 를 참조해보자.
tcp.smtp 파일(파일을 변경하였다면 tcprules 명령으로 cdb 파일을 업데이트 하도록 한다.)스팸발송지ip):deny스팸발송지ip):deny
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

2.1.3 시스템의 방화벽을 이용(리눅스의 경우에는 iptables) 

Shell>iptables -A INPUT -p tcp -s 스팸아이피주소 -j DROP

2.1.4 qmail control파일 이용 

badmailfrom 이나 기타 스팸필터관련 패치 이후 환경 설정 파일을 이용하는 방법.(실제로는 qmail-smtpd 단에서 호출해서 사용하지만 일단 tcpserver 와 qmail-smtpd 중간의 과정이라 이곳에 기록한다.)

2.2 qmail 의 Queue 에 저장되는 단계에서의 필터링 

2.2.1 qmail-queue 단에서의 필터링(ex. qmail-queue-scanner,qfilter,etc) 

먼저 큐메일의 전체적인 구조를 살펴보도록 하자.
참고. [http]큐메일시스템 메시지 전달과정
외부에서 우리의 메일서버로 메시지가 전송되는 과정은 다음과 같다.

큐메일 서버의 전달 과정을 보면 알겠지만 모든 메시지는 qmail-queue에 의해서 메시지가 처리된다.
물론 qmail-smtpd 소스를 고쳐서 qmail-queue 이전에 스팸 메일들을 처리할수도 있겠지만 이미 큐메일의 queue patch 도 있고 금방 적용하기 쉬운 편이라 필자는 개인적으로 queue 단에서 스팸처리를 하는것을 선호하는 편이다.
  • [http]Queue patch를 적용한 이후에 원래 qmail-queue 대신에 다른 프로그램을 호출하여 스팸처리를 하는것이다.
    queue_patch 이후에 메시지 전달 과정은 아래처럼 변경이 되는 것이다.

     tcpserver->qmail-smtpd->임의의 필터링 프로그램(or qmail-queue)->qmail-send->qmail-lspawn->qmail-local->메일박스
  • 2.2.2 qmail-smtpd 단에서의 필터링(ex. domainkey,spf,spamcontrol,etc) 

    변형된 qmail-smtpd 를 이용한 스팸메일 필터링

    2.3 MDA 단계(사용자의 메일박스에 메시지가 도달하기전)에서의 필터링 

    .qmail 을 이용한 메시지 처리(ex. procmail,maildrop,etc)

    아래는 procmail을 이용한 메시지 처리의 예.

    [root@db stone]# cat .qmail 
    |/var/qmail/bin/preline /usr/bin/procmail -p -m /home/webmail/linuxstudy.pe.kr/stone/.procmailrc
    [root@db stone]# 

    [root@db tttt]# cat .procmailrc 
    :0 Efhw
    |formail -c | hcode -dk -m
    :0 Efhw
    |formail -c | hcode -dk -m

    3 Spam filtering 도구 소개 

    여기서 소개하는 스팸 필터링 도구는 일반적으로 많이 사용된다고 생각되는 것으로 각각의 취향에 맞게 구축해볼것을 권유한다.

    3.1 메일 서버 접근 단계의 필터링 도구 

    3.1.1 rblsmtpd 

    - 메일서버에 접속하는 클라이언트 아이피가 rbldns 서버에 등록되어 있는 IP 인지 여부를 판단하여 등록되어 있을 경우에는 rbldns서버에 기록되어진 반송 메시지와 함께 반송을 한다.
    rblsmtpd에 대한 자세한 내용은 [http]rblsmtpd한글 메뉴얼을 살펴보도록 하자.

    rblsmtpd 를 설정했을때의 qmail-smtp로그 파일의 내용이다.(필자는 현재 spamcop.net 과 필자가 직접 구축한 rbldns 를 이용하고 있다. 

    @4000000046c8b4dc2e44d74c rblsmtpd: pid 1601: 553 Blocked - see http://www.spamcop.net/bl.shtml?
    @4000000046ca90a91a7ab984 rblsmtpd: pid 23522: 553 Your IP is Blocked, see http://spamlist.linuxstudy.pe.kr/lookup?

    rblsmtp 설정하기
    /var/qmail/bin/qmail-smtpd/run 파일에 아래와 같이 rbldns 서버의 주소를 추가해 준다.
    -r 은 블럭리스트 -a white 리스트임.

    안타깝게도 rbldns서버들이 예전에는 많았지만 많이 유료화 되었다.(우리나라에서는 [http]kisa에서 무료로 rbldns서버를 운영하는것으로 알고 있다.)

    exec /usr/bin/softlimit -m 66000000 \
    /usr/bin/tcpserver -vRHl0 -x/etc/tcp.smtp.cdb \
    -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/bin/rblsmtpd \
    -t 30 -b -a white.linuxstudy.pe.kr \
    -r bl.spamcop.net \
    -r rbl.linuxstudy.pe.kr \
    /var/qmail/bin/qmail-smtpd linuxstudy.pe.kr  /bin/true 2>&1

    Q) 반드시 다른 rbldns 서버를 사용해서 ip필터링을 해야 하나요??
    A) 아니다. Local 베이스의 rbldns 서버를 구축할 수 있다.(참고. 이운억님께서 작성하신[http]rbldns구축하기)

    3.1.2 spamdyke 

    - rblsmtp 처럼 tcpserver 와 qmail-smtp 사이에서 IP레벨의 다양한 필터 설정을 할 수 있는 통합(?)툴이다. 또한 패키지에 들어있는 몇몇 유틸리티들은 다양한 기능들을 제공해주고 있다.
    - 먼저 소스를 [http]spamdyke다운로드 한다.
    - 받은 소스를 압축을 해제하고 소스디렉토리에서 make 명령을 실행하여 spamdyke 실행파일 생성
    - 적당한 위치에 파일을 복사(/var/qmail/bin/spamdyke)
    - qmail-smtpd/run 파일 수정

    Shell>wget http://www.spamdyke.org/releases/spamdyke-2.6.3.tgz
    Shell> tar xvfz spamdyke-2.6.3.tgz
    Shell> cd spamdyke-2.6.3/spamdyke
    Shell> make
    Shell> cp spamdyke /var/qmail/bin/
    Shell> vi /var/qmail/supervise/qmail-smtpd/run

    예제)spamdyke 를 포한한 smtpd run파일 내용

    exec /usr/bin/softlimit -m 66000000 \
    /usr/bin/tcpserver -vRHl0 -x/etc/tcp.smtp.cdb \
    -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp  \
    /var/qmail/bin/spamdyke -a 30 /var/qmail/bin/qmail-smtpd linuxstudy.pe.kr  /bin/true 2>&1

    위의 예제는 spamdyke 의 많은 옵션중에서 한번 접속당 recipients 수를 지정한 경우 입니다.
    이외에도 아주 많은 옵션을 제공합니다만 일일히 설명드리기에는 너무 많네요. [http]www.spamdyke.org에 가셔서 도움말 참고하시면 되실겁니다.

    3.2 qmail-smtpd or qmail-queue 단계에서의 필터링 도구 

    qmail 의 queue 단계에서의 필터링은 반드시 qmail의 queue 패치를 해주는게 좋다. 물론 queue 패치없이도 필터링이 불가능 한것은 아니다.
    약간의 꼼수겠지만 qmail-queue 바이너리 파일의 이름을 변경하고 다른 프로그램으로 대체하는것이다.
    먼저 [http]netqmail-1.05를 사용중이라면 별도의 패치가 필요없을 것이다. 이미 queue 패치가 이루어진 버전이기 때문이다.
    qmail-1.03 버전을 사용한다면 반드시 패치를 해주도록 하자.

    Qmail-queue 단계에서의 필터링을 위한 기본 구성.
    - 먼저 qmail-smtpd 에 QMAILQUEUE라는 환경변수를 통해서 기본 큐 프로그램인 qmail-queue 를 다른 프로그램으로 전환한다.
    둘중에 편한 방법을 선택하도록 한다.

    run 파일로 변경하는 방법.

    QMAILQUEUE="qmail-queue 를 ��~@신�~U� 다른 ��~D��~\그�~^�(ex. /var/qmail/bin/qmail-scanner-queue)"
    export QMAILQUEUE
    exec /usr/bin/softlimit -m 66000000 \
    /usr/bin/tcpserver -vRHl0 -x/etc/tcp.smtp.cdb \
    -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/bin/rblsmtpd -t 30 \
    -b $rbl /var/qmail/bin/qmail-smtpd linuxstudy.pe.kr  /bin/true 2>&1

    tcp.smtp파일을 변경하는 방법.

    linuxstudy qmail # cat /etc/tcp.smtp,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue"
    linuxstudy qmail # 

    3.2.1 [http]qmail-scanner 

    perl 로 제작된 대표적인 content 필터링 도구임. 다양한 다른 필터링 모듈(ex. clamav,spamassassin,etc)들을 추가할 수 있는 장점과 perl 로 제작되어 있기 때문에 시스템 관리자의 입맛대로 고쳐서 사용할수 있는 장점이 있다.

    -참고.) qmail-scanner-1.x 버전과 2.x 버전에서는 기본 설치 디렉토리가 /var/spool/qmailscan 에서 /var/spool/qscan 으로 변경이 되었다. 그리고 필터링 정의 파일의 이름도 변경이 되었으니 참고 하기 바란다.

  • 설치 및 사용 방법
    - 소스 다운로드 후 압축해제
    - qmail-scanner 를 위한 사용자 추가
    - 컴파일 및 설치
    - 환경 설정

    사용자 추가
    Shell>groupadd qscand 
    Shell>useradd -c "Qmail-Scanner Account" -g qscand  -s /bin/false qscand
    qmail-scanner 설치를 위한 패키지들 설치(maildrop, 각종 Perl module)- qmail-scanner홈페이지를 참고할 것
    Shell> ./configure --install yes
    설치가 마무리 되었다면 /var/qmail/bin/qmail-scanner-queue.pl -g 명령으로 DB를 생성해 주면 된다.
    * qmail-scanner 환경 파일 설정하기 및 적용
    앞에서도 이야기 했지만 qmail-scanner 1.x 버전과 qmail-scanner 2.x 버전은 스팸 필터링 정의 파일도 변화가 생겼으니 참고하기 바란다.(quarantine-attachments.txt -> quarantine-events.txt)
    필자는 2.x 버전을 기준으로 설명하겠다. 중간 중간에 1.x 버전의 차이나는 부분은 가급적 많이 언급해 보겠다.

  • 필터링 정의 파일 만들기
    이제 우리는 qmail-scanner 만을 가지고 바이러스 메일과 스팸 메일을 필터링 해 볼 것이다.
    qmail-scanner 는 quarantine-events.txt 에 스팸에 대한 규정을 적고 DB 형태로 만든 다음 메일서버에 들어오는 메시지와 비교를 해서 룰에 맞으면 걸러주는 형태로 동작을 한다.
    따라서 스팸 필터링 정의에 대한 규칙을 이해하는 것이 중요하다. quarantine-events.txt 을 열어보면 예제에 대한 상세한 내용들이 있으니 좀 더 살펴보도록 하자.

    기본적으로 Qmail-scanner의 스팸 필터링 정의 파일은 탭으로 구분된 3개의 필드로 이루어져 있다.
    파일명(또는 문자열)<TAB>파일사이즈(또는 메일헤더)<TAB>설명

    # 첨부 파일에 mp3가 첨부되어 있다면 필터링 하겠다는 룰이다. SIZE에 -1 되어 있다면 사이즈에 관계없이 필터링 하라는 룰이 된다.
    .mp3 SIZE=-1 mp3 disallowed
    # 첨부파일에 .doc 가 첨부되어 있고 사이즈가 0 인 경우에 필터링 하라는 룰이다.
    .doc  SIZE=0   Zero-length corrupt viruses - ignore
    # 첨부파일에 Happy99.exe 가 첨부되어 있고 첨부파일 사이즈가 10Kbyte 라면 필터링 하라는 룰이다.
    Happy99.exe             SIZE=10000      Happy99 Trojan virus
    # 메일헤더의 제목에 viagra 라는 문자열이 있을 경우에 필터링 하라는 룰이다.
    .*viagra.*              Policy-Subject:       Spam Viagra
    # 메일 헤더의 from  주소가 duma.gov.ru 가 포함된 경우에는 필터링 하라는 룰이다.
    .*duma.gov.ru   Policy-MAILFROM:      Virus Dumaru
    # 메일 보낸 주소가 일 경우에 필터링 하라는 룰이다.      Policy-REMOTEIPADDR:   Blocked IP from blocked
    # 스팸 메일 발송기 중에서 Bat이 들어가 있는 경우에 필터링 하라는 룰이다. 스팸 메일 발송기가 업그레이드가 늦다면 꽤 유용하게도 쓸수 있을듯 하다.
    .*Bat.*            Policy-X-Mailer:             Spammailer sender
    이런 형대로 정책 파일을 만든 다음에는 /var/qmail/bin/qmail-scanner.pl -g 명령으로 반드시 DB를 갱신해 줘야 적용이 된다.
    그리고 메일 헤더를 가지고 필터링을 할때는 반드시 Policy- 으로 시작해야 되며 1.x 버전을 사용중이라면 반드시 Virus- 으로 시작해야 된다.

    3.2.2 [http]simscan 

    Simscan은 C로 작성된 스팸 필터링 도구로 qmail-scanner 와 마찬가지로 다른 스팸/바이러스 필터링 프로그램(ex. spamassassin,Clamav,etc)과 결합이 가능하다.
    C로 작성된 만큼 빠른 속도를 자랑한다. simscan과 qmail-scanner 의 장단점은 개인적으로 simscan 에 기록을 남겨두었으니 참고하기 바란다.

    • simscan 설치
    [root@db qmail]#adduser -c "simscan user" -s /dev/null simscan(simscan user ��~]성)
    [root@db qmail]# wget  http://www.inter7.com/simscan/simscan-1.1.tar.gz
    [root@db qmail]# tar xvfz simscan-1.1.tar.gz
    [root@db qmail]# cd simscan-1.1
    [root@db simscan-1.1]# ./configure && make && make install

    • simscan configure 옵션 설명
    	simscan을 유저를 셋팅한다. 기본값으로 simscan
    	clamav 를 이용한 스캐닝. 기본값으로 y 이다.
    --enable-clamdscan=clamdscan의 PTAH
    	바이러스 이름을 포함하여 리턴 메시지를 보내도록한다
    	주의. 위의 옵션을 사용하기 위해서는 소스디렉토리/contrib/qmail-queue-custom-error.patch 의 패치를 Qmail에 해주어야 한다.
    	      또한 나중에 설명되는 옵션중에 하나인 enable-dropmsg 의 값이 y이면 안된다.
    	많은 도메인에 대해서 메일서비스를 하고 있으며 각각에 대한 simscan 의 설정을 하고자 한다면 y를 택하도록 한다.
    	첨부파일에 대해서 체크를 할 것인지의 여부를 정한다. /var/qmail/control/ssattach 파일안에 필터링할 파일명이나 확장자를 넣어주면 된다.
    	스팸메일에 대한 필터링을 할 것인지에 대한 옵션이다. 스팸어세신에 의해서 status 가 YES인 메일에 대해서는 반송을 하게 될것이다.
    	스팸 어세신에서 붙은 status값을 무시하고 그냥 통과시키고자 할 경우에 사용한다. 이는 나중에 procmail 이나 maildrop으로
    	스팸 편지함이나 별도의 디렉토리에 스팸 메일을 저장하고자 한다면 유용하게 사용될 수 있을 것이다.
    	기본값으로 10 이 셋팅되며 스팸 어세신에서 정한 값을 넣으면 될 것이다.
    	spamc 바이너리파일의 위치를 잡아준다. 자동으로 잡을것이다…^^
    	spamc 에 필요한 옵션을 지정할 수 있다. 필자의 경우에 퍼포먼스를 위해 spamd 를 소켓을 사용하게 하였으며 소켓의 위치는 /tmp/spamd 였다.
    	쌍따옴표로 지정한다는 점에 주의 하라
    Ex) --enable-spamc-args=”-U /tmp/spamd” 
    --enable-dropmsg=y|n (스팸 메일에 대한 메시지를 sender 에게 보내지 않겠다는 옵션이다.)
    --enable-quarantinedir=디렉토리위치( 스팸,바이러스 메일을 따로 저장해둘 디렉토리를 지정한다)
    --enable-received=y|n ( 메일헤더에 received를 추가할 것인지에 대한 옵션이다. 버전정보 및 처리시간이 기록되어진다.)

  • simscan 설정
  • 먼저 QMAILQUEUE 환경 변수에 simscan을 사용하도록 변경을 한다.(물론 qmail에 queue 패치가 되어 있어야 한다.)

    둘 중에 한가지를 선택해서 사용하면 되겠다.
    qmail-smtpd/run 파일에서 설정하는 방법
    vi /var/qmail/supervise/qmail-smtpd/run
    QMAILDUID=`id -u qmaild`
    NOFILESGID=`id -g qmaild`
    export QMAILQUEUE
    rbl="-r bl.spamcop.net -r rbl.linuxstudy.pe.kr"
    exec /usr/local/bin/softlimit -m 100000000 \
    /usr/local/bin/tcpserver -vRHl0 -x/etc/tcp.smtp.cdb \
    -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd -t 30 -b $rbl \
    /var/qmail/bin/qmail-smtpd mail.linuxstudy.pe.kr \
    /bin/checkpassword /bin/true 2>&1

    tcp.smtp 를 이용하는 방법
    vi  /etc/tcp.smtp,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/simscan"

    simscan에서 첨부파일 필터링 방법( --enable-attach 옵션을 주고 설치했을 경우이다.)
    [user@mailserver user]$ cat /var/qmail/control/ssattach

    simscan 에서 각 도메인별로 필터링룰 설정하는 방법( --enable-per-domain 옵션을 주고 설치했을 경우이다.)
     [user@mailserver user]$ cat /var/qmail/control/simcontrol
    각 룰의 의미는 다음과 같다.
    - postmaster@example.com 으로 오는 메일에 대해서는 clamav로 바이러스 메일을 필터링하고 첨부파일이 .txt 또는.com에 대해 필터링 한다
    - example.com 으로 오는 메일은 spamassassin로 스팸 필터링을 하고 mp3 확장자가 있는 첨부파일에 대해서 호출한다.
    - 기본값으로 clamav 로 바이러스 메일을 필터링 하고 spamassassin 과 trophie로 스팸 필터링을 하며 spamassassin에서 부여한 점수가 20.1이 넘는 경우에는 reject한다.

    3.2.3 Qmail 패치를 통한 스팸 방지 기능 추가 

    qmail 패치를 통한 스팸방지 기능의 추가는 거의 대부분 소스 패치를 통해서 이루어지고 있어서 상세한 과정은 생략하고 주로 패치들에 대한 소개로 진행할까 한다.
    주로 qmail 의 control 파일이 추가 되거나 qmail-smtpd 에 환경변수가 추가되어 동작하는 경우가 많다.
    자세한 내용은 아래 사이트를 참고하기 바랍니다.

    몇몇 쓸만한 패치들을 소개를 해본다.
    이 패치는 Qmail에 패턴 매칭을 통해서 다양한 필터링을 제공한다.
    /var/qmail/control 하위에 아래와 같은 control 파일들을 이용해서 접근을 막는다.

    이 패치는 RCPT TO 명령어에 대한 카운트를 제한을 하고 그 제한이 걸리면 일정 시간동안 delay를 줘서 한꺼번에 다량의 메일 전송하는것을 방지한다.
    /var/qmail/control 하위에 tarpitdelay,tarpitcount 로 제어를 할 수 있게된다.

    3.3 MDA 단에서의 필터링 

    보통 메일 박스 이전에 .qmail 또는 .qmail-default를 이용해서 다른 프로그램을 호출하여 사용한다.
    다른 방법으로는 qmail 의 run 파일을 이용해서도 가능하다.
    먼저 간단한 .qmail 의 예제를 보도록 하자.
    필자는 개인적으로 procmail 보다는 maildrop을 선호하는 편이다.

    |spamc -U /tmp/spamd | maildrop .mailfilter
    위의 내용은 메시지를 먼저 spamassassin 에 전달하여 메시지에 스팸 점수를 체크한 다음에 maildrop 으로 원하는 메일박스로 전달을 하는 형태이다.
    cat> .mailfilter
    if (/^X-Spam-Flag: *YES/)
    to "$SPAMDIR"
    위는 maildrop 에서 호출하는 .mailfilter 의 내용이다. 메일 메시지에서 X-Spam-Flag 가 YES인 경우에는 스팸 디렉토리로 메일을 저장하라는 내용이다.
    필자가 maildrop을 선호하는 이유는 아주 다양한 설정을 편하게 설정할수 있기 때문이다.
    [http]maildrop홈페이지에서 다양한 예제를 볼 수 있다. 참고하기 바란다.

    4 스팸 필터링의 새로운 패러다임 

    4.1 SPF (Sender Policy Framework) 

    SPF 는 DNS 기반의 스팸 필터링 기술이다. 메일 발송의 도메인에 대하여 실제로 정상적인 도메인에서 발송이 되었는지 query를 통해서 처리를 하는것이다.
    즉 메일 발송지의 DNS 서버에 특정레코드(TXT)에 대한 쿼리를 해서 그 결과에 따라서 정상적인 메일인지 아닌지를 구분하는 것이다.
    아래는 간단한 spf를 이용한 메일 필터링의 구조이다.
    메일 송신->메일 수신->발송지(도메인,IP,e-mail address)에 대한 Query->Query 값 리턴받음->메일서버 정책에 따라 처리 

    자세한 정보는 [http]http://www.openspf.org/에서 확인해 보도록 하자.

    만약 우리의 메일 서버에서 외부로 메일을 발송을 한다면 그리고 메일을 수신하는 메일서버가 SPF 체크를 해서 필터링을 한다면 먼저 우리는 발송 서버에 대한 SPF 설정을 해줘야만
    필터링을 무사히 통과할 수 있을 것이다.

    spf설정은 네임서버에서 설정을 해주는 것으로 일단 아래의 예제를 보도록 하자
    linuxstudy.pe.kr.  IN   TXT   "v=spf1 ip4: ip4: -all" 
    위의 설정은 다음과 같은 의미를 가지고 있다.
    메일을 보내는 서버의 도메인이 linuxstudy.pe.kr 이면 발송지 주소는, 이며 이외의 ip에 대해서는 fail 결과를 리턴하라는 이야기이다.

    Zone파일 설명
    도메인 IN TXT "v=spf1 조건(a,mx,prt,ip4,ip6) 조건 외 정책(-all(fail),~all(softfail),+all(pass),?all(neutral))

    몇 가지 Zone 파일의 예제를 보면서 이해를 해보도록 하자.( 조건외 정책은 최소한 -all 또는 ~all 정도 셋업해주는게 좋다.)
    linuxstudy.pe.kr.               IN      A
                    IN      MX 0    mail0.linuxstudy.pe.kr.
                    IN      MX 1    mail1.linuxstudy.pe.kr.
                    IN      MX 2    mail2.linuxstudy.pe.kr.
    mail0            IN      A
    mail1            IN      A
    mail2            IN      A
    # 메일을 보낸쪽 도메인이 linuxstudy.pe.kr 이고 ip address 가 이라면  pass 하고 그 나머지에 대해서는 fail 값을 리턴한다.
    linuxstudy.pe.kr.  IN   TXT   "v=spf1 ip4:" 
    # 메일 수신서버에서 spf레코드에 대한 query 를 했을때 mx값에 설정되어 있는 Host의 IP(아래 예제를 보자면에 대한 인증을 하고
    # 그 이외의 ip에 대해서는 softfail 값을 리턴하라는 이야기다. 마지막이 -all 이라면 fail값을 리턴한다)
    linuxstudy.pe.kr.  IN   TXT   "v=spf1 mx ~all"
    # a레코드 값에 설정되어 있는 Host의 IP(즉 일 경우에는 pass 값을 보내주고 그 이외의 값은 fail값을 리턴 하라는 이야기 이다.
    linuxstudy.pe.kr.  IN   TXT   "v=spf1 a:linuxstudy.pe.kr -all"
    쉽게 설명하자면 네임서버에 우리가 메일을 발송할때는 아래와 같은 서버(or IP)를 사용하니 혹시 우리 도메인을 사용하면서 다른 IP라면 그건 가짜 입니다 라는 정보를 다른 메일서버에 알려주는 형태이다.

    지금까지는 메일을 송신했을때 spf 체크를 하는 메일서버에 메일이 잘 들어갈 수 있도록 하는 설정이었으며 
    이제는 우리가 메일을 받을 경우에 spf 를 가지고 체크를 해서 필터링을 해보는 방법을 알아보도록 하자.

    참고로 아래는 필자가 확인해 본 몇몇 포탈 사이트의 spf 설정 상황이다.
    dig TXT 도메인
    nownuri.net.            21476   IN      TXT     "v=spf1 ip4: ip4: ip4: ~all"
    hanmail.net.            20568   IN      TXT     "v=spf1 ip4: ptr ~all"
    naver.com.              600     IN      TXT     "v=spf1 ip4: ip4: ip4: ip4: ip4: ~all"
    chol.com.               3600    IN      TXT     "v=spf1 ip4: ip4: ip4: ip4: ~all"
    empas.com.              3600    IN      TXT     "v=spf1 ip4: ip4: ip4: ip4: ptr -all"

    먼저 spf 레코드 체크를 위한 몇가지 방법을 알아보도록 하자.
    편하게 할 수 있는 방법 몇가지를 소개해 본다.

    4.1.1 qmail 에 spf 패치를 하여 필터링를 하는 방법 

    [http]http://www.saout.de/misc/spf/에서 qmail-spf 패치를 받아서 spf 패치 이후 Qmail을 재설치 한다.
    tar xvfz qmail-1.03.tar.gz
    cd qmail-1.03
    patch -p1<qmail-spf-rc5.patch
    make && make setup check
    참고로 spf패치를 하게 되면 spfquery 라는 바이너리 파일이 생성이 되고 간단하게 테스트 spf 테스트를 해볼 수 있다.
    기본 사용법: spfquery 메일쪽IP 메일도메인 메일주소
    [root@db qmail-1.03_spf]# ./spfquery linuxstudy.pe.kr root@linuxstudy.pe.kr
    Received-SPF: pass (localhost: SPF record at linuxstudy.pe.kr designates as permitted sender)
    [root@db qmail-1.03_spf]# 
    필자는 네임서버에 spf설정을 해두었기 때문에 return 값이 pass 로 나온다.
    [root@db qmail-1.03_spf]# ./spfquery linuxstudy.pe.kr root@linuxstudy.pe.kr                 
    result=fail: See http://spf.pobox.com/why.html?sender=root%40linuxstudy.pe.kr&ip=
    Received-SPF: fail (localhost: SPF record at linuxstudy.pe.kr does not designate as permitted sender)
    [root@db qmail-1.03_spf]# 
    메일 보낸쪽 IP address를 약간 변조를 해서 query 를 날려보았다.
    결과를 보면 알겠지만 fail 값이 리턴이 되었다. 왜냐면 필자의 네임서버에서는 186,187번 IP에 대해서만 spf 설정을 해두었기 때문이다.
    위의 원리로 변조되어 들어오는 메일을 필터링 할수 있는 것이다.

    이제 spf 패치가 된 qmail의 설정을 살펴보도록 하자.
    다른 패치와 비슷하게 control 파일을 이용하도록 되어 있다.
    값은 0~6까지 줄수 있으며 아래와 같은 레벨로 필터링을 할 수 있다.
    0: spf 설정에 대한 쿼리를 하지 않으며 spf 결과에 대한 헤더를 생성하지 않는다. 
    1: 단지 spf 쿼리에 대한 헤더만 생성하되 블럭은 하지 않는다.
    2: spf쿼리에 문제가 있을경우 dns 에러와 함게 reject한다.
    3: spf 쿼리 결과가 fail 일 경우에 deny한다.
    4: spf 쿼리 결과가 softfail 일 경우에 deny한다.
    5: spf 쿼리 결과가 neutral 일 경우에 deny한다.
    6: spf 쿼리 결과가 pass가 아닐 경우에 deny한다.

    나머지 몇개의 control파일이 더 있는데 생략한다.

    4.1.2 spamassassin 을 이용하여 필터링을 하는 방법. 

    spamassassin 을 이용하는 방법은 아주 쉽다.
    spamassassin3.x 버전 부터는 기본적으로 spfquery 를 사용할 수 있도록 되어 있다.
    spamassassin에서 spf를 이용하기 위해서는 spf perl 라이브러리가 필요하다.
    [http]http://www.openspf.org/Implementations 에서 Mail::SPF 모듈을 다운로드 하여 설치하도록 하자.
    Mail::SPF 을 설치하기 위해서는 아래와 같은 다른 perl 모듈도 설치를 해줘야 한다.
    Module-Build 0.2805
    Net-DNS-Resolver-Programmable 0.002.1
    위의 모듈을 모두 설치한 다음에 Mail::SPF 모듈을 설치하면 된다.
    설치하는 방법은 다소 내용이 길어질 수 있어서 생략하도록 하겠다.
    Mail::SPF 모듈이 설치가 되었다면 spamassassin 설정 파일을 열어서 SPF 체크를 하도록 하면 된다.
    vi /etc/mail/spamassassin/init.pre
    loadplugin Mail::SpamAssassin::Plugin::SPF
    아마 3.x 버전을 설치했다면 아마 기본적으로 설정이 되어 있을 것이다.
    spamassassin은 실제 메일 메시지에 대한 reject를 하는 시스템은 아니고 score를 부여하는 역할만 하므로
    만약 smtpd 단에서 필터링을 하기를 원한다면 위에서 말한 qmail에 패치를 하여 사용을 하는것이 좋을 것이다.

    4.2 DKIM(Domain keys identified mail) 

    Domain key 는 현재 대표적으로 Yahoo에서 사용하는 메일 인증 시스템으로 
    기본 원리는 SPF처럼 네임서버에 등록된 정보를 확인하는 구조를 가지고 있다.
    그러나 SPF가 IP기반의 인증을 하는 반면에 Domain key는 digital sign을 하는 형태라서 메일의 변조 여부까지 확인할 수 있다.

    기본 구조는 다음과 같다
    메일 발송서버->메일 수신 서버->메일헤더에 sign 되어진 값을가지고 다시 메일을 발송한 도메인 네임서버에 query->리턴된 public key를 이용하여 메일 메시지 검증

    *private key 및 public key, signature 이해하기
    Domain key가 어떻게 동작하는지 원리를 잠깐 살펴보도록 하자.
    [root@db ~]# cat test.txt 
    [root@db ~]# openssl dgst -sign /etc/domainkeys/linuxstudy.pe.kr/default -sha1<test.txt >sign.file
    [root@db ~]# openssl dgst -verify /etc/domainkeys/linuxstudy.pe.kr/rsa.public -sha1 -signature sign.file <test.txt 
    Verified OK
    test.txt 파일을 약간 변경해서 검증할 때
    [root@db ~]# openssl dgst -verify /etc/domainkeys/linuxstudy.pe.kr/rsa.public -sha1 -signature sign.file <test.txt 
    Verification Failure
    설명) 먼저 메일 발신 서버에서는 test.txt(메일메시지)에 private key를 이용해서 sign을 하고 메일 메시지에 sign.file을 더 덧붙여서 메일을 전송한다.
    그리고 메일 수신서버에서는 메일 메시지에 첨부되어 있는 sign 과 네임 서버에 query를 하여 돌아온 public key 를 이용해서 그 메일의 변조 유무를 체크하는것이다.
    만약 test.txt파일이 sign 되는 당시와 변경 사항이 있다면 검증 결과는 Failure 를 리턴한다.

    • Qmail에 Domain key 패치하여 설치하기
    [http]티니님이 작성한 Domain key 설정법을 참고하기 바란다.

    • SPF 와 Domain key 비교(어디까지나 필자의 생각다 :-) )
    SPFDomain key
    인증방식IP기반RSA 이중키로부터 만들어진Digital Signature
    구현방식DNS에 등록된 IP와 실제 메일 발신 IP대조발신자의 서명을 검사
    장점적용하기 편리함(네임서버에 등록만 해주면 됨안전하고 신뢰성이 높음
    단점위/변조 가능성이 있다(IP spoofing)적용하기가 좀 어려움

    5 맺으며 

    스팸 메일 필터링에 대한 전반적인 이해를 위해 글을 시작했으나 생각보다 설명하고 싶은게 너무 많아
    전부 쓰기에는 너무 내용이 방대해질 듯 하여 많은 부분을 생략 했습니다.(설치과정이나 실제 운영하는 방법? 등등)
    따라서 좀 내용이 어려울 수도 있다는 생각이 드는군요..^^;
    이 문서가 지속적으로 업데이트 될수 있도록 많은 의견들을 바라며...
    2007년 9월4일

    By stone92

    Trackback 0 : Comment 0

    메일서버 구축 및 개발을 위한 정보 (링크만)

    ITWeb/서버관리 2012.04.17 19:27

    메일관련 서비스 개발을 해야 하다 보니.. 알아야 할게 참 많내요.. 
    뭐 당연한 말이겠지만.. ^^;

    일단은 필요한 것들에 대해서 링크만 올려 봅시다.. 



    tags : qmail, simscan
    Trackback 0 : Comment 0