Spam 관리 · 11 min read · Dec 25, 2025

완벽한 SpamSnake - Ubuntu Jeos 10.10 Maverick Meerkat - 페이지 3

8. Baruwa

커스텀 baruwa deb 패키지를 다운로드합니다:

cd /usr/src  
wget baruwa_1.0.1-2sn_all.deb Updated 021811  
wget baruwa-doc_1.0.1-2_all.deb  
gdebi baruwa*.deb

로그를 위한 baruwa db 설정을 하라는 메시지가 표시됩니다. 여기에는 Baruwa 스크립트에서 사용할 액세스 사용자 이름과 비밀번호가 포함됩니다. Baruwa 프론트엔드의 관리자 사용자 정보 설정을 위한 메시지도 표시됩니다.

vi /usr/share/pyshared/baruwa/settings.py

격리 호스트 URL을 원하는 대로 변경합니다:

QUARANTINE_REPORT_HOSTURL = 'http://baruwa-alpha.local'
vi /opt/MailScanner/etc/MailScanner.conf

다음 옵션이 설정되어 있는지 확인해야 합니다:

Always Looked Up Last = &BaruwaSQL
Is Definitely Not Spam = &BaruwaWhitelist
Is Definitely Spam = &BaruwaBlacklist
Required SpamAssassin Score = &BaruwaLowScore
High SpamAssassin Score = &BaruwaHighScore 

Baruwa 업그레이드

*참고: 이 섹션은 이전 버전의 Baruwa를 실행 중인 사용자만 해당됩니다. 새로 설치하는 경우 이 부분을 건너뛰십시오.

최신 baruwa deb 패키지를 다운로드합니다:

cd /usr/src  
wget baruwa_1.0.2-4sn_all.deb Updated 052011  
wget baruwa-doc_1.0.2-4_all.deb  
gdebi baruwa*.deb

mysql db 설정을 하라는 메시지가 표시되면 “아니오”를 선택합니다. 현재 db와 설정을 재사용할 것입니다.

연결하기 전에 /usr/share/pyshared/baruwa/settings.py가 올바른 데이터베이스 정보로 설정되어 있는지 확인하십시오. 그렇지 않으면 연결이 실패합니다.

vi /usr/share/pyshared/baruwa/settings.py
DATABASE_ENGINE = 'mysql'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' 또는 'oracle'.
DATABASE_NAME = 'baruwa'             # sqlite3를 사용하는 경우 데이터베이스 파일의 경로.
DATABASE_USER = 'baruwa'             # sqlite3와 함께 사용되지 않음.
DATABASE_PASSWORD = 'password'         # sqlite3와 함께 사용되지 않음.
DATABASE_HOST = ''             # localhost의 경우 빈 문자열로 설정. sqlite3와 함께 사용되지 않음.
DATABASE_PORT = ''             # 기본값의 경우 빈 문자열로 설정. sqlite3와 함께 사용되지 않음.

*참고: 몇 가지 사소한 업그레이드 충돌로 인해 Baruwa를 올바르게 업그레이드하기 위해 이러한 단계를 수행해야 할 수 있습니다.

/opt/MailScanner가 제거된 경우:

ln -s /opt/MailScanner-version /opt/MailScanner  
rm -r /etc/MailScanner  
ln -s /opt/MailScanner/etc /etc/MailScanner  
ln -s /opt/MailScanner/lib/MailScanner/CustomFunctions /etc/MailScanner

/etc/MailScanner/CustomFunctions/*.pm 파일에서 데이터베이스 연결 문자열을 업데이트해야 합니다.

마지막으로 실행합니다:

manage.py syncdb

Uwsgi와 Nginx를 재시작합니다:

/etc/init.d/uwsgi-python2.6 restart && /etc/init.d/nginx restart

Baruwa는 102-4sn으로 업그레이드되어야 합니다.

Baruwa 102-4에서 111-3sn으로 업그레이드

Rabbitmq-Server 2.2.0을 설치하고 db/user/password를 설정합니다:

cd /usr/src  
wget http://ppa.launchpad.net/drizzle-developers/ppa/ubuntu/pool/main/r/rabbitmq-server/rabbitmq-server_2.2.0-1~maverick0_all.deb  
gdebi rabbit*

localhost에 바인딩하기 위해 vi /etc/rabbitmq/rabbitmq.conf를 엽니다:

export RABBITMQ_NODENAME=rabbit@localhost  
export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1  
export ERL_EPMD_ADDRESS=127.0.0.1

데이터베이스 자격 증명을 추가합니다:

rabbitmqctl add_user baruwa password  
rabbitmqctl add_vhost baruwa  
rabbitmqctl set_permissions -p baruwa baruwa ".*" ".*" ".*"

rabbitmq-server를 재시작합니다:

/etc/init.d/rabbitmq-server restart

Baruwa 1.1.1-3의 소스를 추가하고 종속성을 설치합니다:

wget -O - http://apt.baruwa.org/baruwa-apt-keys.gpg | apt-key add -

vi /etc/apt/sources.list

#baruwa  
deb http://apt.baruwa.org/ubuntu maverick main

종속성을 설치합니다:

apt-get update  
apt-get install python-django-celery python-importlib

*참고: 위 명령은 Baruwa의 모든 종속성을 설치해야 합니다.

Baruwa1.1.1-3sn을 다운로드하고 설치합니다:

mkdir /usr/src/baruwa1113 && cd /usr/src/baruwa1113  
wget https://docs.google.com/open?id=0B9cN15Q3pKnwY2YyMmMwOTQtNGJkMi00ZDc2LWFjMjMtY2UxMzFlYWY5Mzk2  
mv open* baruwa_1.1.1-3sn_all.deb  
wget https://docs.google.com/open?id=0B9cN15Q3pKnwODk2OGViYmMtMGZmYS00NmJjLTkwZWUtNTJjYTQ1YzAzOTg1  
mv open* baruwa-doc_1.1.1-3sn_all.deb  
gdebi baruwa_1.1.1-3sn_all.deb  
gdebi baruwa-doc_1.1.1-3sn_all.deb

*참고: 패키지 유지 관리자의 버전 파일을 설치하라는 메시지가 표시되면 선택하십시오. mysql 설정을 하라는 메시지에는 “아니오”를 선택하십시오. 이전 버전에서 업그레이드하고 있습니다.

settings.py의 심볼릭 링크를 수정합니다:

rm –r /usr/share/pyshared/baruwa/settings.py && ln –s /etc/baruwa/settings.py /usr/share/pyshared/baruwa/

vi /etc/baruwa/settings.py를 열고 baruwa 데이터베이스 구성을 수정합니다:

DATABASES = {
    'default': {
        # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' 또는 'oracle'.
        'ENGINE': 'django.db.backends.mysql',
        # sqlite3를 사용하는 경우 데이터베이스 파일의 경로.
        'NAME': 'baruwa',
        # sqlite3와 함께 사용되지 않음.
        'USER': 'baruwa',
        # sqlite3와 함께 사용되지 않음.
        'PASSWORD': 'password',
        # localhost의 경우 빈 문자열로 설정. sqlite3와 함께 사용되지 않음.
        'HOST': '',
        # 기본값의 경우 빈 문자열로 설정. sqlite3와 함께 사용되지 않음.
        'PORT': '',
    }
}

Baruwa 데이터베이스 구조를 업데이트합니다:

baruwa-admin syncdb --noinput

업그레이드를 시작하기 위해 가짜 마이그레이션을 실행합니다:

for name in $(echo "accounts messages lists reports status config"); do  
baruwa-admin migrate $name 0001 --fake;  
done

정상 마이그레이션을 실행합니다:

for name in $(echo "accounts messages lists reports status fixups config"); do  
baruwa-admin migrate $name;  
done

vi /etc/MailScanner/MailScanner.conf에서 다음을 변경합니다:

Run As Group = celeryd  
Quarantine User = celeryd  
Quarantine Group = celeryd

vi /etc/MailScanner/conf.d/baruwa.conf:

Quarantine User = postfix #(또는 `Run As User`로 설정한 사용자)  
DB DSN = DBI:mysql:database=baruwa;host=localhost;port=3306 #유효한 DSN으로 설정  
DB Username = baruwa # 데이터베이스 사용자 이름  
DB Password = password # 데이터베이스 비밀번호

vi /etc/init.d/mailscanner를 열고 그룹 항목을 www-data에서 celeryd로 변경합니다:

check_dir /var/spool/MailScanner ${user:-postfix} ${group:-celeryd}  
check_dir /var/lib/MailScanner ${user:-postfix} ${group:-celeryd}  
check_dir /var/run/MailScanner ${user:-postfix} ${group:-celeryd}  
check_dir /var/lock/subsys ${user:-root} ${group:-root} #폴더 생성에 필요  
check_dir /var/lock/subsys/MailScanner ${user:-postfix} ${group:-celeryd}  
start-stop-daemon --start --quiet --nicelevel $run_nice --chuid postfix:celeryd --exec $DAEMON --name $NAME -- $DAEMON_ARGS \

celeryd 사용자를 clamav 그룹에 추가합니다:

usermod -a -G celeryd clamav

격리 폴더와 콘텐츠의 그룹 소유권을 변경합니다:

chgrp -R celeryd /var/spool/MailScanner/quarantine

서명을 사용할 경우 다음을 실행하여 초기화합니다:

baruwa-admin initconfig

그렇지 않으면 /etc/MailScanner/conf.d/baruwa.conf에서 옵션을 비활성화합니다:

#Inline HTML Signature = htmlsigs.customize  
#Inline Text Signature = textsigs.customize  
#Signature Image Filename = sigimgfiles.customize  
#Signature Image ![](/files/f1a3d4ae-b9dd-4d8d-bef0-ce32003c43c2) Filename = sigimgs.customize

시스템을 재부팅하고 Baruwa 111-3sn을 즐기십시오.

9. Uwsgi와 Nginx

Chris Lea의 Launchpad에서 Nginx와 Uwsgi를 모두 다운로드하고 설치합니다:

wget https://launchpad.net/~chris-lea/+archive/nginx-devel/+files/nginx_1.0.0-1chl1%7Emaverick1_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/i686/i386/').deb  
wget https://launchpad.net/~chris-lea/+archive/uwsgi/+files/uwsgi-common_0.9.6.6-1chl1%7Emaverick1_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/i686/i386/').deb  
wget https://launchpad.net/~chris-lea/+archive/uwsgi/+files/uwsgi-extra_0.9.6.6-1chl1%7Emaverick1_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/i686/i386/').deb  
wget https://launchpad.net/~chris-lea/+archive/uwsgi/+files/uwsgi-python2.6_0.9.6.6-1chl1%7Emaverick1_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/i686/i386/').deb  
wget https://launchpad.net/~chris-lea/+archive/uwsgi/+files/uwsgi_0.9.6.6-1chl1%7Emaverick1_all.deb  
apt-get install libsctp1  
dpkg -i nginx*  
dpkg -i uwsgi*

다음 구성 파일을 uwsgi 및 nginx에 사용합니다:

vi /etc/uwsgi/uwsgi-python2.6/baruwa.ini
[uwsgi]
   socket = /var/run/uwsgi/uwsgi-python2.6/baruwa/baruwa.sock
   pythonpath = /usr/share/pyshared/baruwa/
   master = true
   processes = 2
   env = DJANGO_SETTINGS_MODULE=baruwa.settings
   module = django.core.handlers.wsgi:WSGIHandler()
vi /etc/nginx/sites-available/baruwa.conf
   server {
      listen 80;
      server_name example.com;
      root /usr/share/pyshared/baruwa;
      #주 접근 로그
      access_log  /var/log/nginx/access.log;
      #주 오류 로그
      error_log /var/log/nginx/error.log;
   location /static {
      root  /usr/share/pyshared/baruwa/static/;
      }
   # 정적 리소스
   location ~* ^.+\.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$
      {
      expires 30d;
      break;
      }
   location / {
      uwsgi_pass unix:///var/run/uwsgi/uwsgi-python2.6/baruwa/baruwa.sock;
      include uwsgi_params;
      }
   }

*참고: example.com을 설정에 맞는 FQDN으로 변경해야 합니다.

기본 가상 호스트를 제거하고 uwsgi_params를 복사합니다:

rm -r /etc/nginx/sites-enabled/default  
cp /usr/share/doc/uwsgi-extra/nginx/uwsgi_params /etc/nginx/uwsgi_params  
ln -s /etc/nginx/sites-available/baruwa.conf /etc/nginx/sites-enabled/baruwa.conf

서비스를 재시작합니다:

/etc/init.d/uwsgi-python2.6 restart && /etc/init.d/nginx restart

모든 설정이 완료되어야 합니다.

크론 작업 설정

manage.py에 대한 심볼릭 링크를 생성합니다:

ln -s /usr/share/pyshared/baruwa/manage.py /usr/bin/manage.py  
chmod +x /usr/bin/manage.py

크론 작업을 추가합니다:

@daily  manage.py cleanquarantine &> /dev/null  #격리 청소
@daily  manage.py sendquarantinereports &> /dev/null  #격리 보고서 전송
@monthly manage.py  dbclean &> /dev/null  #메일 로그 청소
@weekly  manage.py updatesarules &> /dev/null  #spamassassin 규칙 업데이트
@daily  manage.py sendpdfreports &> /dev/null #PDF 보고서 전송

MailScanner를 시작합니다:

/etc/init.d/mailscanner start

브라우저를 http://hostname_used로 열고 관리자 사용자 및 비밀번호로 로그인하여 작업을 시작합니다. 이제 인터페이스를 사용하여 사용자를 추가하고 메시지를 처리할 수 있습니다.

Baruwa 설정 지침

Baruwa에 관리자로 로그인 –> 설정 –> 계정 –> 계정 생성

사용자 계정을 생성하면 해당 페이지에 프로필 설정 및 관련 주소라는 두 개의 새 탭이 표시됩니다.

프로필 설정을 작성하고 도메인 관리자를 선택한 다음 낮은 점수를 6으로, 높은 점수를 9로 설정하고 이메일 스캔을 체크합니다.

관련 주소 아래의 + 기호를 클릭하고 사용자가 관리하는 도메인(예: domain.com)을 입력합니다. domain.com은 관련 주소 아래에 표시됩니다.

domain.com을 클릭하면 도메인 정보로 이동하여 SMTP 배달 정보를 설정할 수 있습니다. 수신 SMTP 서버 또는 수신 SMTP 서버의 IP를 추가하십시오. 활성화 선택 후 비표준 포트를 사용하는 경우 설정하고, 그렇지 않으면 25를 사용하십시오. 완료되면 연필 옆의 테스트 버튼을 클릭하여 수신 서버가 연결을 수락할 수 있는지 확인하십시오.

이제 관리자로 로그아웃하고 방금 설정한 사용자로 로그인하면 메일이 흐르기 시작합니다.

/etc/postfix/main.cf의 relay_recipients, relay_domains 및 transports 설정은 Baruwa에서 제공한 항목을 사용합니다. 따라서 해시 파일이 필요하지 않습니다.
mysql cf 파일의 관련 쿼리는 올바른 형식으로 결과를 가져와 postfix에서 사용할 수 있도록 제공합니다.

그러나 구성 파일 중 하나에 해시를 사용하려면 /etc/postfix/main.cf를 설정하는 방법의 예로 다음을 사용하십시오:

relay_recipient_maps = hash:/etc/postfix/relay_recipients

물론 해시 파일을 생성하고 채우고 postfix에서 사용할 수 있도록 postmap해야 합니다.

*참고: 특정 도메인에 대해 relay_recipients에 해시를 사용하는 경우 해당 도메인을 /etc/postfix/access에서 제거해야 합니다. 다른 모든 도메인 사용자는 여전히 look_ahead를 사용하여 확인할 수 있습니다.

또한 mx 조회를 수행해야 하는 경우 /etc/postfix/mysql-transports.cf 쿼리를 다음과 같이 수정해야 합니다:

concat('smtp:', mail_hosts.address, ':', port) 'transport'

[ 및 ]는 MX 조회를 허용하기 위해 제거되었습니다.

Baruwa를 즐기십시오!

10. SPF 설치 및 구성

postfix-policyd-spf-perl 패키지는 Mail::SPF 및 NetAddr::IP Perl 모듈에 의존합니다.

/usr/src/ 디렉토리에 postfix-policyd-spf-perl을 다운로드하고 /usr/lib/postfix/ 디렉토리에 설치해야 합니다:

cd /usr/src  
wget http://www.openspf.org/blobs/postfix-policyd-spf-perl-2.007.tar.gz  
tar xvfz postfix-policyd-spf-perl-2.007.tar.gz  
cd postfix-policyd-spf-perl-2.007  
cp postfix-policyd-spf-perl /usr/lib/postfix/policyd-spf-perl

그런 다음 /etc/postfix/master.cf를 편집하고 끝에 다음 구문을 추가합니다:

vi /etc/postfix/master.cf
policy unix - n n - - spawn
  user=nobody argv=/usr/bin/perl /usr/lib/postfix/policyd-spf-perl

(leading spaces는 Postfix가 이 줄이 이전 줄에 속한다는 것을 알 수 있도록 중요합니다!)

*참고: main.cf에 대한 항목은 이미 postfix 설정 스크립트를 사용하여 추가했습니다.

그런 다음 Postfix를 재시작합니다:

/etc/init.d/postfix restart

그게 전부입니다.

11. FuzzyOcr 설치 및 구성

FuzzyOCR에는 ocrad 및 gocr와 같은 몇 가지 필수 구성 요소가 있으며, 다음과 같이 설치할 수 있습니다:

apt-get install fuzzyocr netpbm gifsicle libungif-bin gocr ocrad libstring-approx-perl libmldbm-sync-perl libdigest-md5-perl libdbd-mysql-perl imagemagick tesseract-ocr  
wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.6.0.tar.gz  
tar xvfz fuzzyocr-3.6.0.tar.gz  
cd FuzzyOcr-3.6.0/

이제 FuzzyOCR가 설치되었으므로 구성해야 합니다. FuzzyOCR의 구성 파일은 /etc/spamassassin/FuzzyOcr.cf입니다. 해당 파일의 거의 모든 것이 주석 처리되어 있습니다. 이제 해당 파일을 열고 몇 가지 수정을 합니다:

vi /etc/spamassassin/FuzzyOcr.cf

다음 줄의 주석을 제거합니다:

focr_global_wordlist /etc/spamassassin/FuzzyOcr.words
focr_preprocessor_file /etc/spamassassin/FuzzyOcr.preps
focr_scanset_file /etc/spamassassin/FuzzyOcr.scansets<
focr_enable_image_hashing 3
focr_digest_db /etc/spamassassin/FuzzyOcr.hashdb
focr_db_hash /etc/spamassassin/FuzzyOcr.db
focr_db_safe /etc/spamassassin/FuzzyOcr.safe.db
focr_bin_helper convert, tesseract

경로를 주석 처리합니다:

#focr_path_bin /usr/local/netpbm/bin:/usr/local/bin:/usr/bin

이미지 해시를 mysql 데이터베이스에 저장하여 성능을 개선하여 이미 스캔한 이미지는 다시 스캔하지 않도록 합니다.

MySQL 데이터베이스 생성:

sql 스크립트는 fuzzyocr를 위한 데이터베이스를 생성합니다:

mysql -p <  FuzzyOcr.mysql

권한 부여:

mysql –u root –p  
GRANT ALL ON FuzzyOcr.* TO fuzzyocr@localhost IDENTIFIED BY ‘password’;

FuzzyOcr.cf 업데이트:

vi /etc/spamassassin/FuzzyOcr.cf

다음 줄을 활성화합니다:

focr_mysql_db FuzzyOcr  
focr_mysql_hash Hash  
focr_mysql_safe Safe  
focr_mysql_user fuzzyocr  
focr_mysql_pass fuzzyocr  
focr_mysql_host localhost  
focr_mysql_port 3306  
focr_mysql_socket /var/run/mysqld/mysqld.sock

*참고: 빨간색으로 표시된 줄을 변경해야 합니다.

FuzzyOcr 데이터베이스 클리너 설정:

vi /usr/sbin/fuzzy-cleanmysql
#!/usr/bin/perl
#MySQL 테이블의 데이터를 정리하는 스크립트. 기본값은 Safe에 1일, Hash에 10일 동안 데이터를 남깁니다.
#Fuzzyocr-cleanmysql
use Getopt::Long;
use DBI;
use MLDBM qw(DB_File Storable);
my %Files = (
    db_hash => '/var/lib/fuzzyocr/FuzzyOcr.db',
    db_safe => '/var/lib/fuzzyocr/FuzzyOcr.safe.db',
    );
use DBI;
$database = "FuzzyOcr";
$hostname = "localhost";
$socket = "/var/run/mysqld/mysqld.sock";
$port = "3306";
$username = "fuzzyocr";
$password = 'password';
# 기본값
my $cfgfile = "/etc/spamassassin/FuzzyOcr.cf";
my %App;
my %age;
$age{'age'} = 10*24;  # 10일
$age{'hash'} = $age{'age'};
$age{'safe'} = 0;
my $help = 0;
my $verbose = 0;
GetOptions( \%age,
    'age=i',
    'config=s' => \$cfgfile,
    'hash=i',
    'help' => \$help,
    'safe=i',
    'verbose' => \$verbose,
);
if ($help) {
    print "Usage: fuzzy-cleanmysql [Options]\n";
    print "\n";
    print "Available options:\n";
    print "--age=i      Global age in hours to keep in db\n";
    print "--config=s   Specify location of FuzzyOcr.cf\n";
    print "             Default: /etc/spamassassin/FuzzyOcr.cf\n";
    print "--hash=i     Number of hours old to keep in Hash db\n";
    print "--safe=i     Number of hours old to keep in Safe db\n";
    print "--verbose    Show more informations\n";
    print "\n";
    exit 1;
}
# 시간을 초로 변환
$age{'age'} *= 60 * 60;
$age{'hash'} *= 60 * 60;
$age{'safe'} *= 60 * 60;
$age{'safe'} = $age{'safe'} ? $age{'safe'} : $age{'age'};
# FuzzyOcr.cf에서 사용자 정의 경로 읽기
my $app_path = q(/usr/local/netpbm/bin:/usr/local/bin:/usr/bin);
open CONFIG, "< $cfgfile" or warn "Can't read configuration file, using defaults...\n";
while () {
    chomp;
    if ($_ =~ m/^focr_bin_(\w+) (.+)/) {
        $App{$1} = $2;
        printf "Found custom path \"$2\" for application \"$1\"\n" if $verbose;
    }
    if ($_ =~ m/^focr_path_bin (.+)/) {
        $app_path = $1;
        printf "Found new path: \"$1\"\n" if $verbose;
    }
    if ($_ =~ m/^focr_enable_image_hashing (\d)/) {
        $App{hashing_type} = $1;
        printf "Found DB Hashing\n" if ($verbose and $1 == 2);
        printf "Found MySQL Hashing\n" if ($verbose and $1 == 3);
    }
    if ($_ =~ m/^focr_mysql_(\w+) (.+)/) {
        $MySQL{$1} = $2;
        printf "Found MySQL option $1 => '$2'\n" if $verbose;
    }
    if ($_ =~ m/^focr_threshold_max_hash (.+)/) {
        $App{max_hash} = $1;
        printf "Updated Thresold{max_hash} = $1\n" if $verbose;
    }
}
close CONFIG;
# 이 임계값이 설정되어 있는지 확인
$App{max_hash} = 5 unless defined $App{max_hash};
# bin_util에 대한 검색 경로, 구성 파일에 이미 지정되지 않은 경우
foreach my $app (@bin_utils) {
    next if defined $App{$app};
    foreach my $d (split(':',$app_path)) {
        if (-x "$d/$app") {
            $App{$app} = "$d/$app";
            last;
        }
    }
}
sub get_ddb {
    my %dopts = ( AutoCommit => 1 );
    my $dsn = "DBI:mysql:database=$database";
    if (defined $socket) {
        $dsn .= ";mysql_socket=$socket";
    } else {
        $dsn .= ";host=$hostname";
        $dns .= ";port=$port" unless $port == 3306;
    }
    printf "Connecting to: $dsn\n" if $verbose;
    return DBI->connect($dsn, $username, $password,\%dopts) or die("Could not connect!");
}
if ($App{hashing_type} == 3) {
 my $ddb = get_ddb();
  if ($ddb) {
    my $sql;
    foreach my $ff (sort keys %Files) {
      $ff =~ s/db_//;
      $sqlbase = "FROM $MySQL{$ff} WHERE $MySQL{$ff}.\`check\` < ?";
      my $timestamp = time;
      $timestamp = $timestamp - $age{$ff};
      $sql = "DELETE $sqlbase";
      if ( $verbose ) {
        printf "Delete from Table $MySQL{$ff}\n";
        print "$sql,  $timestamp\n";
        print "Timestamp is ", scalar(localtime($timestamp)), "\n";
        print "That's $age{$ff} seconds earlier than now.\n";
        print "\n";
      }
      $ddb->do($sql,undef,$timestamp);
    }
    $ddb->disconnect;
  }
}
chmod +x /usr/sbin/fuzzy-cleanmysql

크론에 추가합니다:

crontab -e
@weekly /usr/sbin/fuzzy-cleanmysql &> /dev/null  #FuzzyOcr DB 클리너

이제 FuzzyOCR 구성이 완료되었습니다. 이제 예상대로 작동하는지 확인해 보겠습니다.

이 이메일을 SpamAssassin에 제공하여 FuzzyOCR이 SpamAssassin에 올바르게 연결되었는지 확인할 수 있습니다.

spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.6.0/samples/ocr-gif.eml > /dev/null

이제 많은 출력이 표시되어야 하며, 끝은 다음과 같아야 합니다:

[...]  
[10025] dbg: FuzzyOcr:  
[10025] dbg: FuzzyOcr: 금요일 8월 4일, 오후 4:01 ET  
[10025] dbg: FuzzyOcr: 라스베가스, 네바다--(마켓 와이어)--2006년 8월 4일 -- 양자 에너지, lnc. (OTC  
[10025] dbg: FuzzyOcr: BB:aEGY.oB-_-  
[10025] dbg: FuzzyOcr: 양자 에너지, lnc.는 프랑크푸르트 증권 거래소에 상장하기 위해 신청했음을 기쁘게 발표합니다. 이 회사는 신청을 지원하기 위해 독일 함부르크의 발틱 투자 그룹의 서비스를 유지했습니다.  
[10025] dbg: FuzzyOcr:  
[10025] dbg: FuzzyOcr: _ qEGY,OB "

12. ClamAV로 PDF, XLS 및 피싱 스팸 필터링 (Sanesecurity 서명)

현재 스팸의 상당수가 스팸 “정보”가 .pdf 또는 .xls 파일로 첨부되어 있으며, 때때로 .zip 파일 안에 숨겨져 있습니다. 이러한 스팸 메일은 예를 들어 SpamAssassin이나 Bayes 필터로 잡기가 쉽지 않지만, ClamAV 바이러스 스캐너는 올바른 서명을 제공하면 쉽게 잡을 수 있습니다.

sanesecurity를 위한 폴더를 만들고 스크립트를 다운로드하여 적절한 권한을 부여합니다.

apt-get install curl rsync
mkdir /usr/src/sanesecurity && cd /usr/src/sanesecurity
wget http://www.inetmsg.com/pub/clamav-unofficial-sigs.tar.gz
tar -zxf clamav-unofficial-sigs.tar.gz && cd clamav-unofficial-sigs-3.7.1
mv clamav-unofficial-sigs.sh /usr/sbin
mv clamav-unofficial-sigs.conf /etc/
chmod +x /usr/sbin/clamav-unofficial-sigs.sh

vi clamav-unofficial-sigs.conf

다음 변수를 설치에 맞게 변경합니다:

clam_dbs="/var/lib/clamav"

clamd.pid의 경로:

clamd_pid="/var/run/clamav/clamd.pid"

업데이트 후 다시 로드:

reload_dbs="yes"
reload_opt="kill -USR2 `cat $clamd_pid`" #DB를 다시 로드하도록 PID에 신호를 보냅니다

작업 디렉토리:

work_dir="/var/lib/clamav"

구성이 완료되면 다음을 “yes”로 설정합니다:

user_configuration_complete="yes" 

이제 업데이트 스크립트를 실행하여 다운로드가 작동하는지 확인합니다:

clamav-unofficial-sigs.sh

크론에 추가합니다:

00 04 * * * /usr/sbin/clamav-unofficial-sigs.sh -c /etc/clamav-unofficial-sigs.conf &> /dev/null 

/etc/clamav-unofficial-sigs.conf를 편집하고 MalwarePortal 데이터베이스 섹션을 주석 처리하십시오. 이 정의를 사용할 때 많은 잘못된 긍정이 발생했습니다.

13. Greyfix로 그레이리스트

Greyfix는 매우 잘 작동하고 자원 소모가 적은 작은 그레이리스트 데몬입니다.

설치:

cd /usr/src && wget http://www.kim-minh.com/pub/greyfix/greyfix-0.3.9.tar.gz  
tar -xf greyfix-0.3.9.tar.gz && cd greyfix-0.3.9  
./configure --localstatedir=/var  
make  
make install
vi /etc/postfix/master.cf

다음 내용을 추가합니다:

greyfix    unix  -        n       n       -        -       spawn
   user=nobody  argv=/usr/local/sbin/greyfix   --greylist-delay 60  -/ 24

main.cf에 대한 항목은 이미 postfix 설정 스크립트를 사용하여 추가했습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.