ติดตั้งและคอนฟิก Amavisd-new, ClamAv, SpamAssassin ใช้งานกับ Postfix บน Fedora 17

หลังจากที่ติดตั้ง postfix และคอนฟิกเพิ่มเติม ตามบทความที่เคยนำเสนอไปแล้ว

แทนที่จะปล่อยให้อีเมล์ผ่านเข้าออกเมล์เซิร์ฟเวอร์โดยไม่มีการตรวจสอบความปลอดภัยของเนื้อหาอีเมล์ ในที่นี้จะขอแนะนำการติดตั้งและคอนฟิก Amavisd-new ซึี่งถือเป็นโปรแกรมตัวกลางเชื่อมต่อระหว่างเมล์เซิร์ฟเวอร์กับโปรแกรมตรวจสอบต่างๆ ในที่นี้จะใช้โปรแกรม ClamAv เพื่อตรวจสอบไวรัส และ SpamAssassin เพื่อดูเนื้อหาอีเมล์ที่ส่งว่ามีแนวโน้มจะเป็น spam หรือไม่

ติดตั้งโปรแกรม amavisd-new, ClamAv และ SpamAssassin

เนื่องจากการติดตั้งโปรแกรม amavisd-new จำเป็นต้องติดตั้งไฟล์ rpm อื่นๆ อีกเป็นจำนวนมาก ในที่นี้จะขอใช้ yum เพื่อช่วยติดตั้งโปรแกรม

[root@fc17-64a ~]# yum install amavisd-new

การติดตั้ง amavisd-new ด้วย yum นี้จะติดตั้งไฟล์ rpm ที่จำเป็นสำหรับ amavisd-new เช่นโมดูล perl รวมทั้งจะติดตั้งโปรแกรม ClamAv และ SpamAssassin มาให้ด้วยเพื่อใช้ตรวจสอบเนื้อหาในอีเมล์

ตัวอย่างชื่อไฟล์​ rpm และเวอร์ชั่นที่ติดตั้งจาก yum ณ ตอนที่เขียนบทความนี้ (ศุกร์ 13)

[root@fc17-64a ~]# rpm -qa | grep amavisd
amavisd-new-2.6.6-2.fc17.noarch
[root@fc17-64a ~]# rpm -qa | grep clamav
clamav-lib-0.97.5-1700.fc17.x86_64
clamav-data-0.97.5-1700.fc17.noarch
clamav-server-0.97.5-1700.fc17.x86_64
clamav-filesystem-0.97.5-1700.fc17.noarch
[root@fc17-64a ~]# rpm -qa | grep spamassassin
spamassassin-3.3.2-9.fc17.x86_64

 

รันเซอร์วิส clamd.amavisd

โปรแกรม amavisd-new จะรับอีเมล์ที่ส่งมาจาก postfix เพื่อตรวจสอบ สำหรับการตรวจสอบไวรัส จะตรวจด้วย ClamAv

ชื่อเซอร์วิสของ ClamAv สำหรับติดต่อกับ amavisd-new คือ clamd.amavisd

ใช้คำสั่ง systemctl เพื่อรันเซอร์วิส

[root@fc17-64a ~]# systemctl start clamd.amavisd.service
Job failed. See system journal and 'systemctl status' for details.

รันไม่สำเร็จ ลองใช้คำสั่ง systemctl status ตามด้วยชื่อเซอร์วิส เพื่อดูสาเหตุที่รันไม่ได้

[root@fc17-64a ~]# systemctl status clamd.amavisd.service
clamd.amavisd.service - SYSV: The clamd server running for amavisd
 Loaded: loaded (/etc/rc.d/init.d/clamd.amavisd)
 Active: failed (Result: exit-code) since Fri, 13 Jul 2012 21:57:48 +0700; 1min 25s ago
 Process: 1974 ExecStart=/etc/rc.d/init.d/clamd.amavisd start (code=exited, status=1/FAILURE)
 CGroup: name=systemd:/system/clamd.amavisd.service
Jul 13 21:57:48 fc17-64a.example.com clamd.amavisd[1974]: /etc/rc.d/init.d/clamd.amavisd: line 7:
 /usr/share/clamav/clamd-wrapper: No such file or directory

สาเหตุคือ ไม่มีไฟล์ /usr/share/clamav/clamd-wrapper ลองหาข้อมูลจาก google ดู ก็พบว่าต้องติดตั้ง rpm เพิ่มเติม ชื่อ clamav-server-sysvinit

ขอ yum ต่อเลยละกัน

[root@fc17-64a ~]# yum install clamav-server-sysvinit

ลองรันเซอร์วิสใหม่อีกครั้ง

[root@fc17-64a ~]# systemctl start clamd.amavisd.service

ตัวอย่างการใช้ ps เพื่อดูโปรเซสของเซอร์วิส clamd ที่รัน

[root@fc17-64a ~]# ps -ef | grep clamd
amavis 2021 1 0 22:14 ? 00:00:00 clamd.amavisd -c /etc/clamd.d/amavisd.conf --pid /var/run/clamd.amavisd/clamd.pid

รันเซอร์วิส amavisd

เซอร์วิสของ amavisd-new ชื่อ amavisd ใช้คำสั่ง systemctl เพื่อรันเซอร์วิส amavisd

[root@fc17-64a ~]# systemctl start amavisd.service
Job failed. See system journal and 'systemctl status' for details.

รันไม่สำเร็จอีก ลองดูสาเหตุ

[root@fc17-64a ~]# systemctl status amavisd.service
amavisd.service - SYSV: amavisd is an interface between MTA and content checkers
 Loaded: loaded (/etc/rc.d/init.d/amavisd)
 Active: failed (Result: resources) since Fri, 13 Jul 2012 22:23:26 +0700; 23s ago
 Process: 2395 ExecStart=/etc/rc.d/init.d/amavisd start (code=exited, status=0/SUCCESS)
 CGroup: name=systemd:/system/amavisd.service
Jul 13 22:23:26 fc17-64a.example.com amavis[2397]: starting. /usr/sbin/amavisd at fc17-64a.example.com amavisd-new-2.6.6 (20110518), Unicode aware, LANG="en_US.UTF-8"
Jul 13 22:23:26 fc17-64a.example.com amavis[2397]: Perl version 5.014002
Jul 13 22:23:26 fc17-64a amavis[2398]: (!)Net::Server: 2012/07/13-22:23:26 Couldn't open pid file "/var/run/amavisd/amavisd.pid" [No such file or directory].\n\n at line 318 in file /usr/share/perl5/vendor_perl/Net/Server.pm

เป็นเพราะไม่สามารถสร้างไฟล์ amavisd.pid ในไดเร็คทอรี /var/run/amavisd/

สร้างไดเร็คทอรีนี้ขึ้นมา และเปลี่ยน owner ให้ amavis เป็นเจ้าของ

[root@fc17-64a ~]# mkdir /var/run/amavisd
[root@fc17-64a ~]# chown amavis /var/run/amavisd/

ลองสตาร์ตเซอร์วิสอีกครั้ง

[root@fc17-64a ~]# systemctl start amavisd.service

โปรเซสของ amavisd ที่รันขึ้นมา

[root@fc17-64a ~]# ps -ef | grep amavis
amavis 2352    1 0 22:20 ? 00:00:00 clamd.amavisd -c /etc/clamd.d/amavisd.conf --pid /var/run/clamd.amavisd/clamd.pid
amavis 2453    1 3 22:27 ? 00:00:00 amavisd (master)
amavis 2455 2453 0 22:27 ? 00:00:00 amavisd (virgin child)
amavis 2456 2453 0 22:27 ? 00:00:00 amavisd (virgin child)

แก้ไขไฟล์คอนฟิกของ postfix

เพื่อให้มีการตรวจสอบอีเมล์ก่อนส่งออกไป ต้องแก้ไขคอนฟิกของ postfix ให้ส่งอีเมล์มาตรวจสอบกับ amavisd ก่อน

ไฟล์คอนฟิกที่ต้องแก้ไขมีสองไฟล์คือ master.cf และ main.cf

แก้ไขไฟล์ master.cf โดยเพิ่มคอนฟิกเหล่านี้ลงไป ต่อท้ายด้านล่างของไฟล์

คอนฟิกส่วน smtp-amavis เป็นค่าคอนฟิกเพื่อส่งเมล์ไปยัง amavis  ส่วน 127.0.0.1:10025 เป็นส่วนที่จะรับอีมเล์ที่ตรวจสอบแล้วกลับมาจาก amavisd

[root@fc17-64a ~]# vi /etc/postfix/master.cf
...
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp-amavis unix - - n - 2 smtp
 -o smtp_data_done_timeout=1200
 -o smtp_send_xforward_command=yes
 -o disable_dns_lookups=yes
 -o max_use=20
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
127.0.0.1:10025 inet n - n - - smtpd
 -o content_filter=
 -o local_recipient_maps=
 -o relay_recipient_maps=
 -o smtpd_restriction_classes=
 -o smtpd_delay_reject=no
 -o smtpd_client_restrictions=permit_mynetworks,reject
 -o smtpd_helo_restrictions=
 -o smtpd_sender_restrictions=
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
 -o smtpd_data_restrictions=reject_unauth_pipelining
 -o smtpd_end_of_data_restrictions=
 -o mynetworks=127.0.0.0/8
 -o smtpd_error_sleep_time=0
 -o smtpd_soft_error_limit=1001
 -o smtpd_hard_error_limit=1000
 -o smtpd_client_connection_count_limit=0
 -o smtpd_client_connection_rate_limit=0
 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
 -o local_header_rewrite_clients=

แก้ไขไฟล์คอนฟิก main.cf โดยแก้ไขให้ส่งเมล์ไปที่ amavis ก่อน

[root@fc17-64a ~]# vi /etc/postfix/main.cf
...
content_filter = smtp-amavis:[127.0.0.1]:10024

รีสตาร์ตเซอร์วิส postfix

[root@fc17-64a ~]# systemctl restart postfix.service

ทดลองส่งอีเมล์

ล็อกอินด้วย user1 ทดลองส่งเมล์ด้วยคำสั่ง mail ไปยัง user2

[user1@fc17-64a ~]$ mail user2
Subject: test scan mail with amavisd
test
.
EOT
[user1@fc17-64a ~]$

หมายเหตุ ขึ้นบรรทัดใหม่เปล่าๆ พิมพ์เครื่องหมาย . แล้วกดปุ่ม [Enter] เพื่อออกจากคำสั่ง mail

ล็อกอินเป็น user2 ทดลองใข้คำสั่ง mail เพื่ออ่านเมล์

[user2@fc17-64a ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"Maildir/": 1 message 1 new
>N 1 user1@example.com Fri Jul 13 23:32 25/970 "test scan mail with amavisd"
& 1
Message 1:
From user1@example.com Fri Jul 13 23:32:41 2012
Return-Path: <user1@example.com>
X-Original-To: user2@example.com
Delivered-To: user2@example.com
X-Virus-Scanned: amavisd-new at example.com
Date: Fri, 13 Jul 2012 23:32:41 +0700
To: user2@example.com
Subject: test scan mail with amavisd
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: user1@example.com
Status: R
test
& exit
[user2@fc17-64a ~]$

สังเกตดู จะเห็นบรรทัด X-Virus-Scanned เพิ่มขึ้นมาใน header ของเมล์

ตัวอย่างในไฟล์ /var/log/maillog

[root@fc17-64a ~]# tail -f /var/log/maillog
Jul 13 23:32:41 fc17-64a postfix/pickup[2113]: 0FF723FFD2: uid=1001 from=<user1>
Jul 13 23:32:41 fc17-64a postfix/cleanup[2405]: 0FF723FFD2: message-id=<20120713163241.0FF723FFD2@fc17-64a.example.com>
Jul 13 23:32:41 fc17-64a postfix/qmgr[2114]: 0FF723FFD2: from=<user1@example.com>, size=450, nrcpt=1 (queue active)
Jul 13 23:32:41 fc17-64a postfix/smtpd[2410]: connect from localhost[127.0.0.1]
Jul 13 23:32:41 fc17-64a dovecot: auth: Debug: auth client connected (pid=0)
Jul 13 23:32:41 fc17-64a postfix/smtpd[2410]: EB5703FFDE: client=localhost[127.0.0.1]
Jul 13 23:32:41 fc17-64a postfix/cleanup[2405]: EB5703FFDE: message-id=<20120713163241.0FF723FFD2@fc17-64a.example.com>
Jul 13 23:32:41 fc17-64a postfix/qmgr[2114]: EB5703FFDE: from=<user1@example.com>, size=892, nrcpt=1 (queue active)
Jul 13 23:32:41 fc17-64a amavis[1555]: (01555-03) Passed CLEAN, <user1@example.com> -> <user2@example.com>, Message-ID: <20120713163241.0FF723FFD2@fc17-64a.example.com>, mail_id: kLOOsZlrvS+I, Hits: -0.001, size: 450, queued_as: EB5703FFDE, 891 ms
Jul 13 23:32:41 fc17-64a postfix/smtpd[2410]: disconnect from localhost[127.0.0.1]
Jul 13 23:32:41 fc17-64a postfix/smtp[2407]: 0FF723FFD2: to=<user2@example.com>, orig_to=<user2>, relay=127.0.0.1[127.0.0.1]:10024, delay=0.94, delays=0.03/0.01/0/0.9, dsn=2.0.0, status=sent (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as EB5703FFDE)
Jul 13 23:32:41 fc17-64a postfix/qmgr[2114]: 0FF723FFD2: removed
Jul 13 23:32:41 fc17-64a postfix/local[2411]: EB5703FFDE: to=<user2@example.com>, relay=local, delay=0.03, delays=0.01/0.02/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Jul 13 23:32:41 fc17-64a postfix/qmgr[2114]: EB5703FFDE: removed

 

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.