sendmail은 MTA(Mail Transfer Agent)의 프로그램 중 하나로 이메일을 SMTP 프로토콜을 이용해 다른 메일 서버로 전달하는 프로그램을 말합니다.
이중 sendmail에 대해 Rocky Linux 8로 리눅스 마스터 1급 정복하기를 참고하여 실습을 진행합니다.
당연하듯 sendmail을 이용하기 위해선 DNS 서버가 필요합니다. 도메인으로 사용할 'linux.or.kr'에 대한 IP주소를 등록해야, 이후 사용할 수 있습니다.
sudo dnf install bind
우선 bind 패키지를 설치해주고, dns를 설정하기 위한 파일이 있는 디렉토리로 이동합니다.
설정 파일들의 위치는 /var/named와 /etc입니다.
만약 /var/named 디렉토리가 열리지 않는다면, 해당 디렉토리는 root만 이용할 수 있기 때문에 반드시 su로 root 사용자 전환을 한 이후 설정할 수 있습니다.
vi /etc/named.conf
저의 경우 로컬 시스템에서 로컬 사용자가 접속할 수 있도록 설정하기 위해 options의 맨 위쪽 local과 관련된 설정을 삭제합니다.(2줄)
다음 이미지와 같이 directory 부분 위쪽 설정을 삭제해 주시면 됩니다.
vi /etc/named.rfc.1912.zones
맨 아랫단 존 파일명과 리버스 존 파일명을 선언해 줍니다.
이중 zone "0.in-addr.arpa"의 경우, 이미 설정되어 있다면 추가적으로 작성하지 않아도 됩니다.
만일 두 번 작성할 경우 추후 named 데몬을 시작할 때, 오류가 발생합니다.
DNS 서버를 설정하기 위해서는 우선 zone 파일과 리버스 zone 파일에 대해 설정해 주어야 합니다.
리버스 zone 파일의 경우 zone 파일을 생성한 이후 복사하여 사용할 수 있기 때문에 우선 zone 파일을 생성 및 설정해 줍니다.
cd /var/named
ls
cp -p named.localhost linux.zone
vi linux.zone
다음 이미지와 같이 설정을 진행해 주면 됩니다.
ns.linux.or.kr의 경우 nameserver이고, posein.linux.or.kr의 경우 관리자의 이메일 주소를 작성합니다.
여기서 posein은 계정, linux.or.kr이 도메인을 뜻하며 서로의 연결은 '.'으로 연결하고 마지막에도 '.'을 붙여 마무리합니다.
이후 아래 type을 설정해줍니다.
저는 NS로 도메인의 네임 서법를 지정하고, 도메인 주소에 대해 IPv4 형식의 주소로 매핑하였습니다.
이후 해당 도메인이 메일 서버임을 지정하고, www에 대한 레코드 타입을 지정하였습니다.
이후 리버스 zone 파일을 생성합니다.
cp -p linux.zone linux.rev
vi linux.rev
기타 부분들은 zone파일과 동일하고, type 부분의 PTR로 IP 주소를 도메인으로 변환시켜 줍니다.
systemctl start named.service
systemctl -l status named
systemctl enable named
DNS named 데몬을 실행하고, 동작 메세지를 확인합니다.
동작 메세지가 active라면 정상적으로 구동하고 있는 것입니다.
vi /etc/mail/sendmail.cf
우선 로컬에서 접속 가능하도록 sendmail의 로컬 부문에 대한 설정을 바꾸어 줍니다.
해당 SMTP의 데몬에 대한 설정 중 이미지와 같이 설정을 바꾸어 줍니다.
vi /etc/mail/local-host-names
저는 사용 도메인이 linux.or.kr로 사용하고자 하는 도메인을 작성해 줍니다.
systemctl start sendmail
systemctl -l status sendmail
systemctl enable sendmail
sendmail에 대한 데몬 서비스를 실행시키고 동작 상태를 확인하여, 정상적으로 구동되고 있는지 체크합니다.
vi /etc/resolv.conf
저는 테스트 서버가 로컬이기 때문에 로컬 IP에 대해 작성해줍니다.
nslookup -type=mx linux.or.kr
해당 명령어가 실행되었을 때, 다음과 같은 화면이 출력되면 DNS와 sendmail 모두 정상적으로 설정된 것입니다.
만일 윗 이미지와 같이 출력되지 않고 지속적으로 연결이 불가하다는 메세지가 출력되면, DNS 서버 관련으로 오류가 나지 않았는지 테스트 해보아야 합니다.
특히 DNS에서 설정한 메일 서버와 sendmail에서 설정한 메일 서버가 다른지, 설정 파일에 오타가 났는지 등등에 대해 확인해야 합니다.
만약 모든 것이 정상적으로 설정 및 구동되었다면, 메일이 정상적으로 전송됩니다.
mail posein@linux.or.kr
mailq
전송을 위해 mail 명령어를 사용해 전송 대상에게 메일을 작성합니다.
Subject의 경우 제목을 나타내며 아래부분은 본문을 나타냅니다.
이후 메일을 다 썼다면 '.'을 찍어 마무리 짓습니다.
이때 마무리가 되면 EOT 메세지가 출력됩니다.
작성한 메일을 spool에서 mailq 명령어를 이용해 전송해 줍니다.
정상적으로 전송되었다면 /var/spool/mqueue가 비었다는 메세지를 출력합니다.
메일을 확인하고 싶다면, 전송한 계정으로 이동하여 mail 명령어를 쳤을 때, 작성한 제목과 함께 새로운 메일 한 건이 도착한 것을 확인할 수 있습니다.
nslookup 명령어를 이용해 DNS와 관련되어 문제가 없고, sendmail 설정과도 문제가 없는데 전송 시, 메일이 계속 반환되는 에러가 발생하였습니다.
해당 부분의 해결은 /etc/hosts를 수정하여 해결하였습니다.
주요한 것은 localhost.localdomain에 대한 내용을 linux.or.kr로 localhost에 대한 도메인을 설정해주어야 한다는 것입니다.
아무리 찾아봐도 linux.or.kr 부분이 어떤 내용인지 나오질 않아서...
최대한 찾아봤을 때, /etc/hosts 내부 파일의 포맷이
ip-address [FQDN][hostname] 이라고 작성이 되어 있던데...
127.0.0.1 localhost.localdomain localhost linux.or.kr 이랑 대입을 했을 때,
ip-address는 127.0.0.1이고,
localhost.localdomain은 FQDN 이고,
localhost가 hostname이라면, 대체 linux.or.kr은????
해당 부분에 대한 학습이 추가적으로 필요해보입니다..........ㅠ
[참고사이트]-Returned Mail Troubleshooting in sendmail-How to configure a real domain name for sender address
Configuring the /etc/hosts file