◆ 메일서버등록제(SPF : Sender Policy Framework)란?
메일서버 정보를 사전에 DNS에 공개 등록함으로써 수신자로 하여금 이메일에 표시된 발송자 정보가 실제 메일서버의 정보와 일치하는지를 확인할 수 있도록 하는 인증기술, 대다수 스팸 발송자가 자신의 신원을 감추기 위하여 발송자 주소나 전송경로를 허위로 표기하거나 변경하는 경우가 많다는데 착안
→ SPF를 이용한 이메일 인증절차 (발신자, 수신자가 동시에 조건이 만족해야 합니다.)
발신자 | 자신의 메일서버 정보와 정책을 나타내는 SPF 레코드를 해당 DNS에 등록 |
수신자 | 이메일 수신시 발송자의 DNS에 등록된 SPF 레코드를 확인하여 해당 이메일에 표시된 발송 IP와 대조하고 그 결과값에 따라 수신 여부를 결정 (메일서버나 스팸차단 솔루션에 SPF 확인 기능이 설치되어 있어야 함) |
→ SPF 값 예시 : "v=spf1 ip4:192.168.0.1 ~all"
이용하고 있는 메일서버의 최종 발송 서버의 IP가 SPF값의 ip4:192.168.0.1와 일치해야 수신 측에서 인증하고 수신을 받는다는 뜻입니다.
■ 참고 문서
◇ 국제 인터넷 표준화 기구(Internet Engineering Task Force, IETF)
https://datatracker.ietf.org/doc/html/rfc7208
◇ SPF 프로젝트 공식 소스 패키지
https://web.archive.org/web/20190217174220/http://www.openspf.org/Software
STEP01 → Python3 PIP 및 SPF 패키지 라이브러리 설치
① python3-pip 설치
※ Python언어에서 PIP명령어는 파이썬으로 작성된 패키지 라이브러리를 설치하고 관리는 용도로 사용됩니다.
[root@localhost ]# dnf install python3-pip [설치]
② pip3 명령어를 이용한 SPF 패키지 라이브러리 설치
[root@localhost ]# pip3 install pyspf py3dns pypolicyd-spf [설치]
※ WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead. (루트 권한으로 pip install을 실행하는 것은 일반적으로 좋은 생각이 아닙니다. 다음과 같이 시도하십시오.) 단순 경고 문자입니다. 해당 메시지를 보기 싫으시다면 sudo 명령어로 실행하시면 됩니다.
[root@localhost ]# sudo -H pip3 install pyspf py3dns pypolicyd-spf [예시]
STEP02 → SPF정책을 사용하기 위한 사용자를 추가
[root@localhost ]# adduser policyd-spf --user-group --no-create-home -s /bin/false [계정 생성]
※ --user-group 유저, 그룹에 생성하고 --no-create-home /home 경로에 폴더 이름 생성하지 말고 -s /bin/false 모든 시스템 접근 불가능 설정
[root@localhost ]# cat /etc/passwd | grep spf [생성 확인]
policyd-spf:x:6001:6001::/home/policyd-spf:/bin/false
STEP03 → Postfix 구성 설정[master.cf]
[root@localhost ]# vim /etc/postfix/master.cf [구성 파일 편집]
※ 맨 하단에 다음 줄을 추가
policyd-spf unix - n n - 0 spawn [추가]
user=policyd-spf argv=/usr/local/bin/policyd-spf [추가]
Postfix가 SPF 정책 데몬이 시작될 때 시작하도록 지시합니다. 파이썬으로 작성된 /usr/local/bin/policyd-spf 파일을 policyd-spf 사용자로 실행됩니다.
STEP04 → Postfix 구성 설정[main.cf]
[root@localhost ]# vim /etc/postfix/main.cf [구성 파일 편집]
※ 다음과 같이 추가
policyd-spf_time_limit = 3600 [추가]
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination,
check_policy_service unix:private/policyd-spf [끝 부분 추가]
policyd-spf_time_limit = DNS 쿼리용 시간 초과 설정
smtpd_recipient_restrictions = 정책에 SPF를 추가 확인하여 수신 이메일을 제한
STEP05 → Postfix 서비스 재시작
[root@localhost ]# systemctl restart postfix
STEP06 → Postfix Maillog에서 수신 이메일 헤더 SPF값 확인
[root@localhost ]# tail -f /var/log/maillog [실시간 로그 확인]
ⓛ SPF값이 있는 포탈에서 수신[네이버 예시] : Pass [통과]
Jun 19 11:49:17 mail policyd-spf[54803]: prepend Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=발송서버IP; helo=cvsmtppost013.nm.naver.com; envelope-from=발송ID@naver.com; receiver=<UNKNOWN>
② SPF값이 없는 일반 기업 메일 수신 : None [통과는 되었지만 의심 필요]
Jun 19 11:52:23 mail policyd-spf[54822]: prepend Received-SPF: None (mailfrom) identity=mailfrom; client-ip=발송서버IP; helo=foxydog.sapce; envelope-from=발송메일주소; receiver=<UNKNOWN>
③ SPF값이 없으며, Mail From 헤더를 변조한 메일 수신 : SPF fail [거부]
Jun 19 11:56:35 mail policyd-spf[54836]: 550 5.7.23 Message rejected due to: SPF fail - not authorized. Please see http://www.openspf.net/Why?s=helo;id=foxydog.co.kr;ip=발송 IP;r=<UNKNOWN>
STEP07 → 웹메일 수신 헤더에서 직접 확인
순서가 조금 뒤바뀌었는데 이전에 포스팅한 https://foxydog.tistory.com/110 SPF 리턴 메시지 분석과 같이 읽어보시면 좀 더 도움이 되실 것으로 생각됩니다. 메일 보안정책으로 같이 사용하는 DKIM(DomainKeys Identified Mail)과 DMARC(Domain-based Message Authentication, Reporting and Conformance)도 공부하여 다음에 포스팅할 수 있도록 준비하도록 하겠습니다.
'◈『Open(Source) Solution』 > 메일서버(RoundCube)' 카테고리의 다른 글
Rocky Linux - 메일서버(Postfix) DMARC 정책 적용 (2) | 2022.06.28 |
---|---|
Rocky Linux - 메일서버(Postfix) DKIM 정책 적용 (0) | 2022.06.25 |
Rocky Linux - 메일서버 구축 트러블슈팅(troubleshooting) (0) | 2022.06.04 |
Rocky Linux - 메일서버 보안 인증서 적용하기 (Roundcube, Postfix, Dovecot) [리뉴얼] (2) | 2022.06.04 |
Rocky Linux - 메일서버 구축(Postfix, Dovecot, MariaDB And Roundcube) [리뉴얼] (50) | 2022.05.30 |