pure-ftpd and clamav
ปัญหาอย่างหนึ่งของการทำเวปคือ เครื่อง computer ของ webmaster ได้ติดไวรัสหรือโทรจันโดยที่ไม่รู้ตัว เมื่อมีการ upload ไฟล์ขึ้น server อาจเกิดเหตุการที่ไวรัสหรือโทรจันได้แก้ไข script หรือไฟล์ html ต่างๆ ให้มีโค๊ดที่ไม่พึงประสงค์เข้าไปยังไฟล์ดังกล่าว ซึ่งวิธีการแก้ไขทางฝั่ง webmaster อย่างเดียวอาจจะยังไม่เพียงพอ ดังนั้นในบทความนี้จะนำเสนอวิธีการคอนฟิกให้ FTP server สามารถ scan virus กับไฟล์ต่างๆที่ได้ upload เข้าสู่ระบบ เพื่อเสริมการป้องกันอีกระดับหนึ่งให้กับ server ของเรา

วิธีการติดตั้งในบทความนี้ได้แก้ไขให้มีการเขียน log สำหรับตรวจสอบย้อนหลัง โดยเราสามารถรู้ว่า user ได้ upload ไฟล์ชื่ออะไรและติดหรือไม่ติดไวรัส ส่วนไฟล์ที่ถูกตรวจพบว่าติด virus ก็จะถูกย้ายไปเก็บไว้ที่ /var/spool/FtpQuarantine แทนการถูกลบออกจากระบบ

*ในบทความนี้จะไม่ขอกล่าวถึงวิธีการติดตั้ง pure-ftpd แต่สามารถดูวิธีการติดตั้ง pure-ftpd ได้ที่ (กำลังเขียน…)

สำหรับ software ที่ใช้มี pure-ftpd และ clamav (Free anti-virus) เท่านั้น และวิธีการสามารถทำได้ตามขั้นตอนด้านล่างนี้ได้เลยครับ 🙂

  1. ติดตั้ง clamav โดยใช้คำสั่ง (ดูวิธีการ install clamav for Centos 5)

    [shell][root@ezylinux ~]## yum install -y clamav[/shell]

  2. แก้ไขไฟล์ /etc/pure-ftpd/pure-ftpd.conf ที่บรรทัด CallUploadScript ให้เป็น yes (หรือ uncomment) เพื่อให้สามารถรัน script ตรวจสอบไวรัสที่จะสร้างขึ้นได้ ดังตัวอย่างด้านล่าง

    [shell]CallUploadScript yes[/shell]

  3. สร้างไฟล์ clamav_check.sh ไว้ที่ /etc/pure-ftpd โดยใช้คำสั่ง

    [shell][root@ezylinux ~]# vi /etc/pure-ftpd/clamav_check.sh[/shell]

    และใส่ code ด้านล่างเข้าไป
    [bash]
    #!/bin/sh
    /etc/pure-ftpd/clamav_check.py "$1" $UPLOAD_VUSER
    [/bash]

  4. สร้างไฟล์ clamav_check.py ไว้ที่ /etc/pure-ftpd โดยใช้คำสั่ง

    [shell][root@ezylinux ~]# vi /etc/pure-ftpd/clamav_check.py[/shell]

    และใส่ code ด้านล่างเข้าไป
    [python]
    #!/usr/bin/python

    import sys
    import os
    import time

    HOSTNAME = ‘Ezylinux.com’
    SENDMAIL = "/usr/sbin/sendmail"
    QUARANTINE ="/var/spool/FtpQuarantine"
    LogFile = ‘/var/log/ftpscan’

    arg = sys.argv
    cmdline = "/usr/bin/clamscan –move="+QUARANTINE+" –no-summary " + arg[1]
    results = os.popen(cmdline).readlines()
    file = open(LogFile, ‘a’)
    for result in results:
    result = ‘[‘+time.asctime( time.localtime(time.time()) )+’]’+ "[user: "+ arg[2]+ "] " + result
    file.write(result)
    file.close()
    [/python]

  5. รันคำสั่ง pure-uploadscript ตามตัวอย่างด้านล่าง เพื่อให้ pure-ftpd รัน clamav_check.sh หลังจากที่ได้ upload ไฟล์เสร็จแล้ว
    [shell][root@ezylinux ~]# /usr/sbin/pure-uploadscript -B -r /etc/pure-ftpd/clamav_check.sh[/shell]
  6. แก้ไขไฟล์ /etc/rc.local โดยเพิ่ม

    /usr/sbin/pure-uploadscript -B -r /etc/pure-ftpd/clamav_check.sh

  7. restart pure-ftpd service ด้วยคำสั่ง
    [shell][root@ezylinux ~]# service pure-ftpd restart[/shell]
  8. เพิ่ม cron job ให้กับ freshclam (update signature) ตามด้านล่าง

    [shell]0 0-23/12 * * * /usr/bin/freshclam[/shell]