본문 바로가기

OS (운영체제), 기타/Unix & Linux

리눅스 메일 서버 (Installation + Configuration + Security + Tweaks)

전자 메일을 보내거나 받으려면 인터넷을 통해 메일을 보내고받을 수있는 메일 서버가 있어야합니다. 이 게시물에서는 Linux 메일 서버와 POP 프로토콜 (POP 프로토콜) 및 IMAP (Internet Message Access Protocol)과 같은 다른 메일 관련 프로토콜뿐만 아니라 SMTP 프로토콜 (인터넷을 통한 메일 전송 표준 프로토콜)이 어떻게 작동하는지에 대해 설명합니다. )과 그들 사이의 관계.

Linux SMTP 서버

SMTP (Simple Mail Transfer Protocol)는 한 호스트에서 다른 호스트로 메일을 보내는 방법을 정의합니다. 메일 저장 방법이나 표시 방법은 정의하지 않습니다. 이는 또한 시스템 독립적이며, 이는 송신자와 수신자가 서로 다른 운영 체제를 가질 수 있음을 의미합니다.

SMTP는 서버가 다른 서버에 직선 ASCII 텍스트를 보낼 수 있어야 하며 표준 SMTP 포트 인 포트 25의 서버에 연결하면 됩니다.

대부분의 리눅스 배포판 오늘은 SMTP의 가장 일반적인 구현이 함께 제공됩니다 :  sendmail 와 postfix.

센드 메일은 많은 리눅스 배포판에서 사용되는 널리 사용되는 오픈 소스 메일 서버 구현이지만, 디자인이 복잡하고 보안 성이 떨어진다. Postfix는 메일 서버 구현을 한 걸음 더 앞당겼습니다. 보안을 염두에두고 개발되었습니다.

메일 서비스 구성 요소

메일 서버의 메일 서비스에는 세 가지 구성 요소가 있습니다.

  1. 메일 사용자 에이전트 (MUA). 이것은 사용자가보고 Thunderbird 및 Microsoft Outlook과 같은 상호 작용을하는 구성 요소입니다. 이러한 사용자 에이전트는 메일 읽기 및 메일 작성을 담당합니다.

  2. 메일 전송 에이전트 (MTA). 이 구성 요소는 한 사이트에서 다른 사이트로 메일을 가져 오는 것을 담당합니다 (예 : Sendmail 및 Postfix).

  3. 우편 배달 에이전트 (MDA). 이 구성 요소는 수신 된 메시지를 로컬 컴퓨터에 적절한 사용자 사서함 (예 : postfix-maildrop Procmail) 에 배포하는 역할을합니다 .

이메일 서버 설정

우리는 Postfix 메일 서버를 선택했습니다. Postfix 메일 서버는 오늘날 시스템 관리자들 사이에서 매우 널리 사용되고 있습니다. Postfix는 가장 현대적인 리눅스 배포판의 기본 메일 서버입니다.

먼저 시스템에 설치되어 있는지 확인하십시오 $ rpm -qa | grep postfix.

설치되어 있지 않으면 Red Hat 기반 배포판에 Postfix 메일 서버를 설치할 수 있습니다  $ dnf -y install postfix.

그런 다음 postfix 서비스를 시작하고 시스템 시작시 사용 가능하게하십시오.

$ systemctl  start postfix $ systemctl 은 postfix를 허용합니다.

우분투와 같은 데비안 기반 배포판에서는이 패키지를 설치할 수 있습니다  $ apt-get -y install postfix . 

설치 과정에서 Postfix 메일 서버 구성 유형을 선택하라는 메시지가 나타납니다.

No Configuration, Internet Site, Smarthost가있는 인터넷, Satellite System, Local Only 중에서 선택할 수 있습니다. No Configuration 옵션을 선택합니다. Postfix가 필요로하는 사용자 계정과 그룹 계정을 만듭니다.

리눅스 메일 서버 설정

Postfix 메일 서버를 설치 한 후에는이를 구성해야합니다. 대부분의 구성 파일은 /etc/postfix/ 디렉토리 아래에 있습니다. 이 /etc/postfix/main.cf 파일을 통해 Postfix 메일 서버의 기본 구성을 찾을 수 있습니다  .

이 파일에는 많은 옵션이 있습니다. 가장 중요한 옵션을 다룰 것입니다.

myhostname

이 옵션은 메일 시스템의 호스트 이름을 지정하는 데 사용됩니다. 이것은 Postfix가 전자 메일을 수신 할 인터넷 호스트 이름입니다. 메일 서버 호스트 이름의 일반적인 예로는 mail.example.com  과 smtp.example.com이 있습니다.

그것은 다음과 같이 작성됩니다 : myhostname = mail.example.com.

머리 부분

이 옵션은 example.com 과 같이 서비스 할 메일 도메인입니다 .

구문은 다음과 같습니다 mydomain = example.com.

근원

이 메일 서버에서 보낸 모든 전자 메일은이 옵션에서 온 것처럼 보입니다. 이것을 $mydomain 값으로 설정할 수 있습니다  :  myorigin = $mydomain.

$ 변수 이름 앞에 임의의 옵션 값을 사용할 수 있습니다 .

리눅스 메일 서버 (Installation + Configuration + Security + Tweaks)

수위

이 옵션은 Postfix 서버가 수신 이메일의 최종 목적지로 사용할 도메인을 나열합니다. 이 값은 서버의 호스트 이름과 도메인 이름으로 설정되지만 다른 이름을 포함 할 수 있습니다.

mydestination = $myhostname, localhost.$mydomain, $mydomain,mail.$mydomain, 
www.$mydomain
 

mail_spool_directory

Postfix 메일 서버가 사용할 수있는 배달 방법에는 두 가지가 있습니다.

  1. 사용자의 사서함에 직접 연결합니다.
  2. 중앙 스풀 디렉토리 (이 방법은 메일은 /var/spool/mail 각 사용자에 대한 파일로 저장됩니다).

구문은 다음과 같습니다 mail_spool_directory = /var/spool/mail.

네트워크

이 변수는 중요한 구성 옵션입니다. 이렇게하면 Postfix 서버를 통해 릴레이 할 수있는 서버를 구성 할 수 있습니다.

일반적으로 서버의 메일 스크립트와 같은 로컬 클라이언트 컴퓨터에서만 릴레이를 허용하려고합니다. 그렇지 않으면 스패머가 메일 서버를 사용하여 메시지를 릴레이 할 수 있습니다.

mynetworks 변수를 올바르게 설정하지 않고  스패머가 메일 서버를 릴레이로 사용하기 시작하면 DNS 블랙리스트 (DNSBL) 또는 RBL (Realtime Blackhole List)과 같은 스팸 제어 기술을 사용하여 메일 서버를 블랙리스트에 등록하는 빠른 방법입니다. 서버가 차단 목록에 올라 오면 아주 소수의 사용자 만 메일을받을 수 있습니다.

이 옵션의 구문은 다음과 같습니다 mynetworks = 127.0.0.0/8, 192.168.1.0/24.

smtpd_banner

이 변수를 사용하면 클라이언트가 메일 서버에 연결할 때 사용자 정의 응답을 반환 할 수 있습니다.

배너를 사용중인 서버에 대한 정보를 제공하지 않는 것으로 변경하는 것이 좋습니다.

inet_protocols

이 변수는 Postfix가 연결할 때 사용할 인터넷 프로토콜 버전을 지정하는 데 사용됩니다 inet_protocols = ipv4.

Postfix 메일 서버의 설정 파일을 변경하면, 서비스를 다시로드해야합니다  $ systemctl reload postfix.

Postfix 설정 파일에는 더 많은 변수가 있습니다. 그들이 주석 처리되었음을 알 수 있습니다. 이러한 변수를 사용하여 보안 수준, 디버깅 수준 및 기타 변수를 설정할 수 있습니다.

를 사용하여 오류를 확인할 수 있습니다  $ postfix check이 도구는 정확한 선과 오류를 찾아 수정할 수 있도록 도와줍니다.

메일 대기열 확인

때때로 시스템의 메일 대기열이 가득 찰 수 있습니다. 네트워크 장애 또는 메일 배달을 지연시킬 수있는 여러 가지 이유 때문에 발생할 수 있습니다.

Linux 메일 서버의 메일 큐를 확인하려면를 사용하십시오  $ mailq.

이 명령은 Postfix 메일 큐에있는 모든 메시지를 표시합니다.

대기열이 가득 차고 메시지가 전송되는 데 몇 시간이 걸리면 메일 대기열을 비워야합니다.

$ postfix flush

이제 메일 대기열을 확인하면 비어 있어야합니다.

Linux 메일 서버 테스트

Postfix 메일 서버를 올바르게 설정 한 후에 메일 서버를 테스트해야합니다.

이렇게하기위한 첫 번째 단계는 mailx or 와 같은 로컬 메일 사용자 에이전트를 사용하는 mail것 mailx입니다.

같은 서버에있는 다른 사람에게 메일을 보내보십시오. 이 방법이 작동하면 원격 사이트로 보내십시오.

$ echo  "메시지 본문" | mailx -s  "This is Subject"  -r  "likegeeks <likegeeks@example.com>"  -a / path / to / attachment someone@example.com

그런 다음 원격 사이트에서 메일 수신을 시도하십시오.

문제가 있으면 로그를 확인하십시오. 로그 파일은 파일의 Red Hat 기반 배포판에 있으며  /var/log/maillog 파일의 데비안 기반 배포판에  /var/log/mail.log 있습니다 (또는 rsyslogd 구성에 정의 된대로  ).

Linux Syslog Server에 대한 게시물을 검토하여 로그 및 구성 방법에 대한 자세한 설명을 확인하시기 바랍니다 rsyslogd.

여전히 문제가 발생하면 Linux 네트워크 명령을 사용하여 DNS 설정을 확인하고 MX 레코드를 확인하십시오 .

스팸 싸우기

스팸과 관련된 특정 패턴을 검색하여 메일을 검색하는 데 사용할 수있는 많은 솔루션이 있습니다. 가장 좋은 솔루션 중 하나는 오픈 소스 인 SpamAssassin입니다. 다음과 같이 설치할 수 있습니다  $ dnf -y install spamassassin:

그런 다음 서비스를 시작하고 시작시 활성화하십시오.

$ systemctl  start spamassassin $ systemctl spamassassin 사용 가능

설치가 끝나면에서 구성을 확인할 수 있습니다  /etc/mail/spamassassin/local.cf.

SpamAssassin은 다른 스크립트 점수의 결과에 따라 전자 메일이 스팸인지 여부를 결정합니다. 점수가 높을수록 스팸 일 가능성이 높아집니다.

구성 파일에서 매개 변수 required_hits 5 는 점수가 5 이상인 경우 SpamAssassin이 전자 메일을 스팸으로 표시 함을 나타냅니다.

이 report_safe 옵션은 0, 1 또는 2 값을 취합니다. 0으로 설정하면 스팸으로 표시된 전자 메일이 그대로 보내지고 스팸임을 나타내는 헤더 만 수정됩니다. 값이 1 또는 2이면 SpamAssassin에서 새 보고서 메시지를 생성하여 수신자에게 보냅니다.

값 1과 2의 차이점은 첫 번째 경우 스팸 메시지가 콘텐츠 메시지 / rfc822로 코딩되는 반면 두 번째 경우에는 콘텐츠 텍스트 / 일반으로 코딩된다는 것입니다. text / plain 옵션은 일부 메일 클라이언트가 message / rfc822를 실행하고 클라이언트 컴퓨터를 감염시킬 수 있으므로 더 안전합니다.

이제 Postfix에 통합해야합니다. 가장 쉬운 방법은 Procmail을 사용하는 것입니다.

명명 된 파일을 만들고 /etc/procmailrc 다음 내용을 추가해야합니다.

: 0 hbfw | / usr / bin / spamc

그런 다음 Postfix 구성 파일을 편집 /etc/postfix/main.cf 하고 mailbox_command 위트를   변경합니다  mailbox_command = /usr/bin/procmail.

마지막으로 Postfix 및 SpamAssassin 서비스를 다시 시작합니다.

$ systemctl  restart postfix $ systemctl  restart spamassassin

SpamAssassin은 때때로 스팸 메시지를 인식하지 못하여 스팸 메시지로 채워진 사서함을 만듭니다. 다행스럽게도 RBL (Realtime Blackhole Lists)을 사용하여 Postfix 서버에 들어가기 전에 메시지를 필터링 할 수 있습니다. 이것들은 메일 서버의 부하를 줄이고 메일 서버를 깨끗하게 유지합니다.

Postfix 서버의 설정 파일을 열고   옵션을 /etc/postfix/main.cf 변경하십시오  smtpd_recipient_restrictions다음과 같은 다른 옵션을 추가하십시오.

strict_rfc821_envelopes = 예 relay_domains_reject_code = 554 unknown_address_reject_code = 554 unknown_client_reject_code = 554 unknown_hostname_reject_code = 554 unknown_local_recipient_reject_code = 554 unknown_relay_recipient_reject_code = 554 unverified_recipient_reject_code = 554 smtpd_recipient_restrictions = reject_invalid_hostname, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client dsn.rfc-ignorant.org, reject_rbl_client DUL. dnsbl.sorbs.net, reject_rbl_client list.dsbl.org, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client dnsbl.sorbs.net, permit

그런 다음 Postfix 서버를 다시 시작하십시오 $ systemctl restart postfix.

위의 RBL은 일반적인 RBL입니다. 웹에서 더 많은 목록을 찾아보십시오.

SMTP 연결 보안

중간에 수정되지 않도록 SMTP 트래픽을 TLS로 전송하는 것이 좋습니다. 먼저 openssl 다음 명령을 사용하여 인증서와 키를 생성해야합니다 .

$ openssl genrsa -des3  -out mail.key $ openssl req -new  -key mail.key -out mail.csr $ cp mail.key mail.key.original $ openssl rsa -in mail.key.original -out mail_secure.key $ openssl x509 -req  -days  365  -in mail_secure.csr -signkey mail_secure.key -out mail_secure.crt $ cp mail_secure.crt / etc / postfix / $ cp mail_secure.key / etc / postfix /

그런 다음 Postfix 구성 파일에 다음 옵션을 추가하십시오  /etc/postfix/main.cf. 

smtpd_use_tls = 예 smtpd_tls_cert_file = /etc/postfix/mail_secure.crt smtpd_tls_key_file = /etc/postfix/mail_secure.key

마지막으로 Postfix 서비스를 다시 시작하십시오   $ systemctl restart postfix.

이제 서버에 연결할 때 클라이언트에서 TLS를 선택해야합니다. 서명이없는 경우 인증서로 인해 설정을 변경 한 후 처음 메일을 보내면 경고 메시지가 표시됩니다.

POP3 및 IMAP 프로토콜 기본 사항

지금까지 SMTP 메일 서버가 문제없이 이메일을 보내고받는 방법을 살펴 보았습니다. 그러나 다음 상황을 고려하십시오.

  • 사용자는 오프라인보기를 위해 전자 메일의 로컬 복사본이 필요합니다.
  • 메일 사용자 에이전트는 Mbox 파일 형식을 지원하지 않습니다. 의 Mbox 형식은 콘솔 메일 사용자와 같은 에이전트의 숫자로 읽을 수있는 간단한 텍스트 형식입니다 mailx 및 mutt.
  • 사용자는 Mbox 파일에 대한 파일 시스템 액세스를 위해 고속 네트워크에 연결되어있을 수 없으므로 로컬 복사본을 가져 와서 오프라인으로 읽으려고합니다.
  • 보안 요구 사항에 따라 사용자는 전자 메일 게이트에 직접 액세스 할 수 없습니다. 예를 들어 공유 메일 스풀 디렉터리는 보안 상 허용되지 않는 것으로 간주됩니다.

이러한 경우를 처리하기 위해 다른 클래스의 프로토콜 인 메일 액세스 프로토콜이 도입되었습니다.

가장 많이 사용되는 두 가지 메일 액세스 프로토콜은 POP (Post Office Protocol) 및 IMAP (Internet Message Access Protocol)입니다.

POP의 배경은 매우 간단합니다. 중앙 Linux 메일 서버는 항상 온라인 상태를 유지하며 모든 사용자의 전자 메일을 수신 및 저장합니다. 사용자가 POP를 통해 연결하고 대기중인 메일을 다운로드 할 때까지 수신 된 모든 이메일이 서버에 대기합니다.

사용자가 전자 메일을 보내려고 할 때 전자 메일 클라이언트는 SMTP를 통해 중앙 Linux 메일 서버를 통해이를 정상적으로 중계합니다.

SMTP 서버와 POP 서버는 아무 문제없이 같은 시스템에있을 수 있습니다. 오늘날 대부분의 서버에서이 작업을 수행합니다.

클라이언트 측 캐시 된 복사본 만있는 서버에서 사용자 전자 메일의 마스터 복사본을 유지하는 것과 같은 기능이 누락되어 IMAP 개발이 이루어졌습니다.

IMAP을 사용하면 Linux 메일 서버가 다음 세 가지 액세스 모드를 지원합니다.

  1. 온라인 모드는 Linux 메일 서버에 대한 직접 파일 시스템 액세스와 유사합니다.
  2. 오프라인 모드는 POP 작동 방식과 유사합니다. 클라이언트가 전자 메일을 가져올 때를 제외하고는 네트워크에서 연결이 끊어집니다. 이 모드에서 서버는 일반적으로 메일 사본을 보유하지 않습니다.
  3. 연결이 끊긴 모드는 사용자가 전자 메일의 캐시 된 사본을 보유 할 수있게하여 작동하며 서버는 메일 사본을 보유합니다.

IMAP 및 POP에 대한 몇 가지 구현이 있습니다. 가장 인기있는 프로토콜은 두 가지 프로토콜을 모두 제공하는 Dovecot 서버입니다.

POP3, POP3S, IMAP 및 IMAPS는 포트 110, 995, 143 및 993에서 각각 수신 대기합니다.

Dovecot 설치

대부분의 리눅스 배포판에는 dovecot이 미리 설치되어 있습니다. 그러나 다음과 같이 Red Hat 기반 배포판에 dovecot을 설치할 수 있습니다 $ dnf -y install dovecot.

데비안 기반 배포판 인 IMAP 및 POP3에서는 기능이 두 개의 별도 패키지로 제공됩니다. 다음과 같이 설치할 수 있습니다 $ apt-get -y install dovecot-imapd dovecot-pop3d.

SSL / TLS를 통한 IMAP 및 POP3 사용을위한 자체 서명 인증서를 작성하라는 메시지가 표시됩니다. 예를 선택 하고 프롬프트가 표시되면 시스템의 호스트 이름을 입력하십시오.

그런 다음 서비스를 실행하고 다음과 같이 시작할 때 활성화 할 수 있습니다.

$ systemctl  start dovecot $ systemctl 은 dovecot을 활성화합니다.

Dovecot  구성

Dovecot의 기본 구성 파일은 /etc/dovecot/dovecot.conf 파일입니다.

일부 Linux 배포판은 구성을 /etc/dovecot/conf.d/ 디렉토리 아래에두고  include 지시문을 사용  하여 파일에 설정을 포함시킵니다.

다음 목록은 Dovecot을 구성하는 데 사용되는 일부 매개 변수입니다.

프로토콜

다음은 지원하려는 프로토콜 protocols = imap pop3 lmtp입니다.

lmtp 로컬 메일 전송 프로토콜을 의미합니다.

들리다

수신 대기 할 IP 주소 listen = *, ::.

* 모든 IPV4 인터페이스를 :: 나타내며 모든 IPV6 인터페이스를 나타냅니다.

UserDB

사용자를 인증하기위한 사용자 데이터베이스입니다.

userdb {driver = pam}

PassDB

이것은 사용자를 인증하기위한 암호 데이터베이스입니다.

passdb {driver = passwd}

Mail_location

이 항목은  /etc/dovecot/conf.d/10-mail.conf 파일에 있으며 다음과 같이 작성  mail_location = mbox:~/mail:INBOX=/var/mail/%u됩니다.

Dovecot은 다음에서 사용되는 일반 SSL 인증서 및 키 파일과 함께 제공됩니다  /etc/dovecot/conf.d/10-ssl.conf.

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem ssl_key = </etc/pki/dovecot/private/dovecot.pem

사용자가 Dovecot 서버에 연결하려고하면 인증서가 서명되지 않았기 때문에 경고를 표시합니다. 원하는 경우 인증 기관에서 인증서를 구입할 수 있습니다.

방화벽에 Dovecot 서버 포트를 열어야합니다.

$ iptables  -A INPUT -p tcp -dport  110  -j ACCEPT $ iptables  -A INPUT -p tcp -dport  995  -j ACCEPT $ iptables  -A INPUT -p tcp -dport  143  -j ACCEPT $ iptables  -A INPUT -p tcp --dport  993  -j ACCEPT

그리고 SMTP 포트 : $ iptables -A INPUT -p tcp --dport 25 -j ACCEPT.

그런 다음 규칙을 저장하십시오. 내 Linux iptables 방화벽 게시물을 검토 할 수 있습니다  .

또는 firewalld를 사용하는 경우 다음을 수행 할 수 있습니다.

$ 방화벽 -cmd  --permanent  --add -port = 110 / TCP --add -port = 995  $ 방화벽은 -cmd  --permanent  --add -port = 143 / TCP --add -port = 993  $ 방화벽 -cmd  --reload

그리고 다시, 문제 해결을 위해, 당신은 로그 파일 확인 /var/log/messages,  /var/log/maillog및 /var/log/mail.log 파일을

Linux 메일 서버는 특히 Postfix 메일 서버와 함께 사용할 수있는 가장 쉬운 서버 중 하나입니다.