brunch

You can make anything
by writing

C.S.Lewis

by bit Jun 07. 2021

(자동화) 스팸메일 차단 여부 확인

RBL Check Script

스팸메일 시스템의 목적은 외부에서 악성메일이 금융회사 들어오지 못하도록 탐지/차단해주는 것이다. 하지만 반대로 금융회사의 내부정보가 밖으로 유출되거나 메일서버가 악성코드에 감염되어 해커들의 매개체가 될 수 있다.


필자가 다니는 금융회사의 메일서버가 악성코드에 감염된 건 아니지만 글로벌 RBL DB List에 여러 번 등재되었다. 사유는 대량 메일 발송으로 유추하고 있으나 정확한 사유는 모른다. 스팸차단시스템 글에서 설명했듯 RBL업체들은 일일이 알려주지 않는다.


증권사이기 때문에 개인고객과 법인고객들을 대상으로 무수히 많은 자료들을 매일 제공한다. 주로 메일을 통해 제공하는데 밖으로 발송하는 업무이다 보니 보안부서가 개입이 된다. 그렇기 때문에 메일 발송이 안되거나, 고객이 메일을 수신받지 못한 경우 보안담당자, 메일서버 담당자에게 문의전화가 온다.


현업부서의 전화를 받고 나서 RBL확인 및 해제 요청을 하면 빠른 곳은 수시간 이내 해제해주지만, 느린 곳은 며칠, 몇 주가 걸리기도 한다. 대부분 해외업체이기 때문에 그런가 싶다.


당장 보고서가 나가야 하는데 이런 경우가 발생할 수 있으니 다른 경로를 통해 자료 반출이 가능하도록 준비는 미리 해둬야 한다. (필자의 경우 메일 반출시스템, 자료 전송 시스템 2 트랙으로 반출이 가능하다.)


서론이 길었다. RBL을 내가 원하는 주기로 확인하여 나에게 미리 알려준다면 현업부서의 전화를 조금이나마 덜 받지 않을까, RBL을 일일이 찾아다니지 않아도 되지 않을까에서 시작됐다.


서버는 비용이 들기에 필자의 윈도우 PC에 간단하게 구축했다. (Python + Gmail)

RBL List에서 회사 메일서버 IP 조회 후, 등재되어있으면 회사 메일로 메일링을 해준다.

자동으로 RBL 해제해주는 건 아직 개선을 못했다. 업체마다 해제하는 방식이 다 다르다ㅜㅜ


윈도우 PC에서 스크립트를 원하는 주기로 실행하려면 윈도우 스케줄러를 이용하면 되는데 py는 안되기 때문에 vbs를 이용하면 된다.


rbl.py


import requests

import smtplib

import time

from email.mime.text import MIMEText


url = "http://rbl-check.org/rbl_api.php?ipaddress=메일서버IP"

req = requests.get(url).text

result = req.split("\n")

txt = time.strftime('%y-%m-%d')+' '+time.strftime('%H:%M:%S')+' RBL Check Result\n'

for r in result:

    if ";listed" in r:

        txt = txt+r+"\n"

smtp = smtplib.SMTP_SSL('smtp.gmail.com', 465)

smtp.login('gmail 주소', '앱비밀번호')

msg = MIMEText(txt)

msg['Subject'] = 'SENDMAIL RBL CHECK'

smtp.sendmail('gmail주소, '회사메일주소', msg.as_string())

smtp.quit()



rbl.vbs


Set WshShell = CreateObject("WScript.Shell") 

return = WshShell.Run("cmd /K python C:\Users\admin\Desktop\rbl.py",0,true)

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari