작업전 참고)
연간 유지보수계약을 체결중인 업체는 바로 저희에게 점검요청을 해주시면 됩니다. (무상지원)
직접 작업하실 경우 아래 문서를 서버 엔지니어에게 제공하고 요청하시면 됩니다.
해결이 어렵거나, 즉각적인 해결을 원하실 경우 작업 의뢰(유료)를 하시면 됩니다.
우선 스팸 발송은 크게 2가지로 이루어집니다.
a) 메일 계정의 비밀번호를 1111 등 쉽게 설정하여 도용당해 발송되는 경우.
b) 서버 해킹이나 웹페이지의 '보안 취약점'을 이용해 발송되는 경우.
따라서 다음 내용을 참고하셔서 발송대기중인 메일이 많은지 먼저 파악을 해보시고,
특정 패턴의 스팸 메일이 많이 발송중이라면 다음 내용대로 발송 위치를 찾아 차단하는 것이 중요합니다.
1. 발송 및 발송대기중인 메일이 많을 경우.
a) 스풀디렉토리의 파일갯수를 체크합니다. 대기중이거나 재발송중인 메일수가 수백건 이상일 경우 메일 보내기 받기가 지연될 수 있습니다.
/home/nmail2/tools/spool_status.sh
Nmail spool status
WaitSending : 0 <= 대기중인 메일수
ReSending : 0 <= 재발송중인 메일수
참고) spool_status.sh 파일이 없을 경우, 아래처럼 서버에서 명령을 실행하여 해당 스크립트를 만들어주시면 됩니다.
echo '#!/bin/sh
echo "Nmail spool status"
echo -n " WaitSending : "
find /var/MailRoot/spool -type f -path '*mess*'|wc -l
echo -n " ReSending : "
find /var/MailRoot/spool -type f -path '*rsnd*'|wc -l
' > /home/nmail2/tools/spool_status.sh
chmod 700 /home/nmail2/tools/spool_status.sh
/home/nmail2/tools/spool_status.sh
참고2) 윈도우 서버일 경우, c:/NmailPHP/MailRoot/spool/ 폴더에서 속성을 눌러 파일갯수를 파악해주시면 됩니다.
b) 대기중이거나 재발송중인 메일이 수십/수백건 이상일 경우,
메일의 목록 및 헤더를 확인해서 어떤 메일들이 발송되고 있는지 파악합니다.
(아래 명령은 발송후 10분이 지난 대기메일들 찾는 방법)
find /var/MailRoot/spool/ -mmin +10 -type f|more
find /var/MailRoot/spool/ -mmin +10 -type f -exec head -n20 {} \;|more
find /var/MailRoot/spool/ -mmin +10 -type f -exec cat {} \;|more
주의) 이 과정이 가장 중요하며 find 명령이 어렵다면 spool 폴더 아래에 존재하는 eml 파일들을 PC로 다운받아서 editplus 등의 문서편집기에서 열어보시면 됩니다. 여기서 해야할 작업은 여러 메일들을 누가 어디에서 보냈는지 파악하는 것 입니다.
c) 메일 헤더 분석은 아래처럼 여러가지 경우가 있으며, 동일한 형태에서 수십/수백건 발송된 내역이 있는지 찾아 해당 발송 경로를 차단하는 것이 중요합니다.
a. 메일 헤더 상단에 아래처럼 X-AuthUser 항목이 있을 경우,
해당 계정의 아이디/비밀번호로 로그인하여 메일을 보낸 것 입니다.
X-AuthUser: UserID@YourDomain.com
특정 사용자가 스팸으로 추정되는 메일을 계속 보내는 경우, 해당 계정에서 고의로 보내지 않았을 경우, 비밀번호가 도용당했을 수 있습니다. 이때 해당 계정의 비밀번호를 [전체회원관리]에서 즉시 강제 변경해주시고, 아래 2번의 메일 삭제 과정을 거치면 됩니다.
b. 메일 헤더 상단에 아래 항목이 있을 경우,
Received: from /spool/local
웹페이지에서 PHP mail()함수 등을 통해 발송된 것으로 '3. 웹페이지에서 발송된 스팸...'과정을 따라 발송 위치를 분석해보셔야 합니다.
c. 메일 헤더 상단에 127.0.0.1 IP 에서 발송되었고, X-Mailer 에 Nmail PHP가 포함된 경우, 웹메일에서 보낸 것으로, 보낸주소는 From: 헤더에서 확인하실 수 있습니다.
Received: from localhost ([127.0.0.1]:46267)
…
X-Mailer: Passkorea.NET Nmail PHP
…
From: "=?euc-kr?B?....?=" <UserID@YourDomain.com>
d. 이외의 메일은 수신대기중인 메일이거나, [메일서버관리 ? SMTP Relay IP 관리]에서 발송 허용된 메일일 가능성이 높습니다. 발송 IP는 첫번째 보여지는 Received 헤더에서 확인하실 수 있습니다.
Received: from localhost ([127.0.0.1]:46267)
2. 스팸이 대량발송중인 경우 스팸만 골라 삭제하는 방법.
대기중인 메일중 mail@localhost 라는 주소가 들어간 메일들만 확인하는 명령입니다.
grep -rlP 'mail@localhost' /var/MailRoot/spool/|xargs -n1 head|more
그리고 해당 주소가 들어간 메일들만 삭제하는 명령은 다음과 같습니다.
grep -rlP 'mail@localhost' /var/MailRoot/spool/|xargs -n1 rm -f
참고) grep, xargs 등의 명령이 어려울 경우, 폴더 하위의 eml 파일들을 직접 수작업으로 삭제해주셔도 동일합니다.
참고2) 윈도우 서버일 경우, 윈도우 탐색기에서 c:/NmailPHP/MailRoot/spool/ 폴더 아래의 eml 파일들만 삭제해주셔도 됩니다. 삭제후 spool 폴더에서 속성을 눌러 파일갯수가 줄었는지 파악해주시면 됩니다.
참고3) spool 폴더 아래에 eml 파일들은 삭제해도 되지만, 하위 폴더는 삭제하시면 안됩니다.
삭제후 메일서버를 재시작해주시면, 남아있던 정상 메일들의 송수신 처리됩니다.
Linux) /etc/init.d/xmail restart
Windows) [관리도구 - 서비스]에서 메일엔진인 'XMail Server' 재시작
3. 웹페이지에서 발송된 스팸의 출처를 찾으려면 메일엔진로그와 아파치 웹로그를 비교분석해야 합니다.
a) 웹페이지에서 PHP mail()함수 등을 통해 발송한 경우의 로그 확인방법.
grep 'mail@localhost' /var/MailRoot/logs/smail-200706160000 |more
* 발송 로그 분석방법 - https://passkorea.net/nmailphp/엔메일_로그분석.doc
b) 메일엔진에서 스팸으로 추정되는 발송로그의 시간대를 파악함.
주로 새벽시간 등 특정시간대에 몰려있거나 계속 진행중임 패턴을 찾아야함.
c) 아파치 웹로그중 동일한 시간대에 스팸공격시 주로 사용되는 'POST'방식의 기록만 비교함.
grep '16/Jun/2007:04:' access_log|more
grep '16/Jun/2007:04:' access_log|grep 'POST'|more
* 아파치 웹로그가 여러개 있을 경우 모두 분석해보셔야 합니다.
* 의심이 가는 소스의 위치가 나온다면 해당 소스를 점검후 패치나 삭제를 하셔서 해결하셔야 합니다.
참고) 웹페이지에서 발송되는 메일에 대한 이해
웹페이지에서 발송되는 리턴주소가 mail@localhost 처럼 존재하지 않는 주소로 지정되어 발송되는 경우가 많습니다.
이 경우 '도메인/사용자 알리아스 설정'을 통해 해당 메일의 리턴메일을 관리자계정에서 받을 수 있게 됩니다.
https://www.passkorea.net/board/ViewDoc.aspx?brdNo=23&docNo=29827
특히 정상적인 웹페이지에서 발송되는 메일의 리턴주소가 존재하지 않을 경우 포털 등 다른 메일서버에서 차단당할 수 있습니다.
이 문제는 아래 내용을 참고하셔서 '리턴주소 강제지정'방식을 통해 해결이 가능합니다.
https://www.passkorea.net/Board/ViewDoc.aspx?brdNo=11&docNo=28977