이메일 서버 · 5 min read · Oct 23, 2025

스팸 방지 홈 이메일 서버 설정하기 (다소 대안적인 방법) (Debian Squeeze)

스팸 방지 홈 이메일 서버 설정하기 (다소 대안적인 방법) (Debian Squeeze)

소개

이메일 스팸은 큰 문제입니다. 하지만 저는 스스로 꽤 간단한 해결책을 찾았습니다. 그러나 완전히 “이동”하는 데는 시간이 좀 걸릴 것입니다.

해결책은 누군가에게 이메일 주소를 제공해야 할 때마다 고유한 이메일 주소를 만드는 것입니다. 트위터에 계정을 만들고 싶다면 “[email protected]”를 사용합니다. 웹 기반 서비스의 경우 @ 왼쪽에 전체 도메인 이름(서브도메인 포함, www)을 사용합니다(일부 잘못 설계된 웹사이트는 www를 유효한 이메일 주소로 인식하지 않으므로 그런 경우에는 그냥 생략합니다).

사람들에게는 다음과 같은 형식을 사용합니다: “[email protected]”. “[email protected]”와 같은 형식을 사용할 수도 있습니다. 좋은 점은 이메일 주소의 @ 왼쪽 부분이 거의 “무제한”이라는 것입니다.

모든 연락처에 대해 고유한 이메일 주소를 생성하기 때문에 이메일 주소가 유출된 위치를 쉽게 찾을 수 있고, 그 후 쉽게 제거할 수 있습니다.

이 방법은 이메일 관리를 쉽게 하기 위한 스크립트와 함께 완전한 기능을 갖춘 이메일 서버를 설정하는 방법입니다. 동적 주소에 있는 경우에도 DNS 설정 부분이 포함되어 있습니다. 예를 들어, 집에서 작은 메일 서버를 운영하고 싶다면 말이죠.

요약

이 방법에서는 Debian Squeeze를 서버로 사용합니다. 다른 리눅스 배포판의 경우에는 적절한 변경을 직접 해야 합니다.

이 방법에서 수행되는 작업의 간단한 요약은 다음과 같습니다:

  • 도메인 이름 얻기
  • 동적 IP 처리 - 필요한 경우
  • DNS 및 라우팅 처리
  • postfix 설정
  • procmail 설정
  • dovecot 설정
  • 이메일 주소 관리를 위한 웹 서버 설정
  • 추가 기능이 포함된 Thunderbird 설정

크레딧

이 방법에서는 bind 및 이메일 서버 설정과 관련하여 몇 가지 다른 방법을 참조합니다. 그 중 일부는 Falko의 완벽한 Debian 서버 방법에서 거의 복사한 것입니다. 이메일 릴레이 섹션은 sjau의 방법에서 차용했습니다. 이들이 없었다면 아마도 이 설정을 할 수 없었을 것입니다.

도메인 이름 얻기

자신의 메일 서버를 운영하기 전에 MX 레코드를 설정할 수 있는 도메인 이름이 필요합니다. 수많은 도메인 등록 기관이 있기 때문에 어떤 것을 추천하고 싶지는 않습니다. 제가 아는 가장 저렴한 것 중 하나는 GoDaddy입니다.

저는 GoDaddy를 사용하지 않지만, 제가 들은 바로는 그들이 안정적인 서비스를 제공한다고 합니다.

동적 IP 처리

또 다른 도전 과제는 동적 IP 주소에서의 처리 방법입니다. 어딘가에 전용 박스를 임대하지 않고 집 인터넷 연결을 사용하는 경우, 정적 IP가 없을 가능성이 높습니다.

웹에서는 다른 사람들이 항상 당신에게 연락할 수 있도록 정적 IP를 갖는 것이 필수적입니다. 그러나 이를 도와주는 서비스가 있습니다.

제가 사용하는 서비스 중 하나는 EveryDNS입니다. 그들은 도메인 이름에 대한 DNS를 호스팅할 수 있게 해줍니다.

현재 그들은 여전히 무료 서비스를 제공하고 있습니다. 2010년에 인수되었지만, 당시 기부한 고객들은 앞으로도 무료로 시스템을 사용할 수 있다는 약속이 있었습니다. 그들의 웹페이지에서는 새로운 고객이 비용을 지불해야 한다는 언급이 없지만, 확실히 알지는 못합니다.

EveryDNS를 사용하는 이유는 DNS를 업데이트하는 데 사용할 수 있는 작은 perl 스크립트를 제공하기 때문입니다. 정적 IP 주소가 없으면 시간이 지남에 따라 IP가 변경되기 때문에 이것이 필수적입니다. perl 스크립트는 여기에서 받을 수 있습니다.

도메인 이름이 있으면 먼저 What Is My IP로 가십시오. 현재 공용 IP 주소를 보여줍니다. 그런 다음 EveryDNS에 계정을 만들고 다음 항목을 입력하십시오. 여기서 MYDOMAIN.COM은 귀하의 도메인 이름입니다:

(1) “A” 레코드 유형을 만들고, 완전한 도메인 이름을 “MYDOMAIN.COM”으로 설정하고, 값을 귀하의 공용 IP 주소로 설정합니다.

(2) “CNAME” 레코드 유형을 만들고, 완전한 도메인 이름을 “*.MYDOMAIN.COM”으로 설정하고, “MYDOMAIN.COM”으로 설정합니다.

(3) “MX” 레코드 유형을 만들고, 완전한 도메인 이름을 “MYDOMAIN.COM”으로 설정하고, 값을 “MYDOMAIN.COM”으로 설정하고, “MX 값”을 “10”으로 설정합니다.

우리가 방금 한 것은 도메인에 대한 DNS를 설정하는 것입니다. 기본 도메인은 귀하의 IP 주소에서 찾을 수 있으며(a 레코드), 모든 다른 도메인도 그곳에서 찾을 수 있습니다(*는 기본 도메인을 가리킵니다) 그리고 우리는 그곳에서 메일 서버도 운영합니다(mx 레코드).

root 사용자

다음 작업은 root 사용자로 수행됩니다 - 별도로 언급되지 않는 한.

동적 IP 업데이트

앞서 언급했듯이, 정적 IP 주소가 없는 경우 DNS 정보를 정기적으로 업데이트해야 합니다.

(1) perl 스크립트를 가져오고 실행 가능하게 만듭니다.

cd /root  
wget http://www.everydns.net/eDNS.pl  
chmod 0755 eDNS.pl

(2) perl 스크립트를 호출하는 bash 스크립트를 만듭니다(다른 방법도 있지만 제가 찾은 가장 간단한 방법입니다):

touch eDNS.sh  
echo "#!/bin/bash" > eDNS.sh  
echo "perl /root/eDNS.pl -u USERNAME -p PASSWORD -d MYDOMAIN.COM" >> eDNS.sh

USERNAME 및 PASSWORD를 귀하의 everydns 로그인 자격 증명으로 바꾸십시오.

(3) 정기적으로 실행되도록 cron을 설정합니다.

저는 모든 cron을 포함하는 cron.txt 파일로 작업하는 것을 좋아합니다. 그렇게 유지하는 것이 훨씬 간단하다고 생각합니다.

먼저 cron 항목이 이미 있는지 확인해야 합니다:

crontab -l

아직 cron 항목이 없다면 다음 명령을 실행하십시오.

touch cron.txt  
chmod 0700 cron.txt  
echo "*/5 * * * * /root/eDNS.sh >/dev/null 2>&1" > cron.txt

이미 cron 항목이 있다면, 그것들을 복사하고 cron.txt 파일을 만들고 삽입한 후 다음 명령도 추가하십시오:

*/5 * * * * /root/eDNS.sh >/dev/null 2>&1 

이제 cron.txt를 cron으로 로드합니다:

crontab cron.txt

그리고 제대로 추가되었는지 확인합니다:

crontab -l

LAN/라우팅/Bind

다음 문제는 LAN에서 도메인을 해결하는 방법입니다. 메일 서버가 라우터 뒤에 있다면 아마도 192.168.0.x 또는 10.0.0.x와 같은 로컬 IP를 가질 것입니다.

라우터 뒤에 있다면 다음 포트를 서버로 포워딩해야 합니다: 25, 80, 143, 443, 991. 587과 같은 추가 포트가 필요할 수도 있습니다.

또한 LAN 내부에서 도메인 이름을 해결하는 방법에 대한 문제가 있습니다. LAN 외부에서는 현재 IP 주소를 가리키는 DNS 항목이 있습니다. 그러나 LAN 내부에서 DNS 쿼리를 하면 공용 IP만 반환되고 일반적으로 실패합니다.

이 문제에 대한 여러 가지 해결책이 있습니다 - 문제가 존재하지 않을 수도 있습니다.

한 가지 방법은 라우터에서 dnsmasq를 사용하는 것입니다(예: dd-wrt 또는 tomato-wrt). 그러나 그것이 작동할 것이라고 보장할 수 없기 때문에 제가 보는 유일한 다른 옵션은 메일 서버에 완전한 DNS 서버를 설정하는 것입니다.

이 튜토리얼에서는 제가 가장 익숙한 chrooted Bind9를 사용할 것입니다. 다른 DNS 서버에 대한 문서는 온라인에서 많이 찾을 수 있습니다.

(1) 소프트웨어를 설치하고 중지합니다.

apt-get install bind9  
/etc/init.d/bind9 stop

(2) /etc/default/bind9 설정을 변경하여 옵션 줄이 다음과 같도록 합니다:

OPTIONS="-u bind  -t /var/lib/named" 

(3) /var/lib 아래에 필요한 디렉토리를 생성합니다:

mkdir -p /var/lib/named/etc  
mkdir /var/lib/named/dev  
mkdir -p /var/lib/named/var/cache/bind  
mkdir -p /var/lib/named/var/run/bind/run

(4) 그런 다음 /etc에서 /var/lib/named/etc로 구성 디렉토리를 이동합니다:

mv /etc/bind /var/lib/named/etc

(5) 문제를 피하기 위해 이전 위치에서 새 구성 디렉토리에 대한 심볼릭 링크를 만듭니다(향후 BIND가 업데이트될 때):

ln -s /var/lib/named/etc/bind /etc/bind

(6) null 및 random 장치를 만들고 디렉토리의 권한을 수정합니다:

mknod /var/lib/named/dev/null c 1 3  
mknod /var/lib/named/dev/random c 1 8  
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random  
chown -R bind:bind /var/lib/named/var/*  
chown -R bind:bind /var/lib/named/etc/bind

(7) /etc/rsyslog.d/bind-chroot.conf 파일을 편집하고 추가합니다.

$AddUnixListenSocket /var/lib/named/dev/log 

(8) 서비스를 재시작합니다.

/etc/init.d/rsyslog restart  
/etc/init.d/bind9 start

그리고 /var/log/syslog에서 오류를 확인합니다.

이제 chrooted 환경에서 Bind9를 설정했습니다. 다음 작업은 실제로 도메인에 대한 존 파일을 추가하는 것입니다.

(9) /etc/bind/named.conf.local을 편집하고 추가합니다.

zone "MYDOMAIN.COM" IN {
        type master;
        file "/etc/bind/zones/MYDOMAIN.COM.db";
        allow-update { none; };
};

(10) 존 폴더 및 존 파일 생성

mkdir /etc/bind/zones  
touch /etc/bind/zones/MYDOMAIN.COM.db  
chown -R bind:bind /etc/bind/zones/MYDOMAIN.COM.db

(11) MYDOMAIN.COM.db에 존 파일 정보를 추가합니다.

$TTL    86400
@               IN SOA  @ MYDOMAIN.COM. (
                                        1              ; serial
                                        2600              ; refresh
                                        15M             ; retry
                                        3600              ; expiry
                                        360 )            ; minimum
@               IN NS           ns.MYDOMAIN.COM.
ns              IN A            LOCALIP
www             IN A            LOCALIP
MYDOMAIN.COM.             IN A            LOCALIP
MYDOMAIN.COM.     IN MX   10      LOCALIP

물론 MYDOMAIN.COM을 실제 도메인 이름으로, LOCALIP를 정적 LAN IP 주소로 바꾸십시오. 기본적으로 우리는 해당 도메인의 네임서버가 “ns.MYDOMAIN.COM”에 호스팅되고 “ns.MYDOMAIN.COM”이 정적 로컬 IP 주소에서 찾을 수 있다고 말하고 있습니다.

(12) Bind9 재시작

/etc/init.d/bind9 restart

(13) 라우터 NS 해상도 변경

Bind9가 설정되었으므로 마지막으로 해야 할 일이 있습니다. 라우터에서 네임서버 해상도 순서를 변경해야 합니다. 첫 번째 네임서버는 이제 해당 정적 로컬 IP를 가진 “메일 서버”여야 합니다. 그렇지 않으면 전체 bind9 설정이 무의미해집니다. 두 번째 네임서버에는 이전에 첫 번째로 있던 값을 입력합니다. 라우터에 따라 약간 복잡할 수 있습니다.

Share: X/Twitter LinkedIn

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

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