어느날 갑자기 sendmail이 동작하지 않는다. 아니 "어느날 갑자기"는 해킹 당한 경우일 것이고 보통은 뭔가 작업을 했는데 그 작업이 시스템 설정을 변경한 경우일 것이다.
보통은 보안 설정을 강화했는데 그 설정이 예상하지 못한 결과를 가져온 경우다.
Sep 23 17:41:25 cronos sendmail[1804]: accepting connections again for daemon MTA Sep 23 18:02:28 cronos sendmail[1524]: starting daemon (8.14.4): SMTP+queueing@01:00:00 Sep 23 18:02:30 cronos sm-msp-queue[1533]: starting daemon (8.14.4): queueing@01:00:00 Sep 23 18:03:31 cronos sendmail[1547]: x8N93VmZ001547: from=checkbox, size=213, class=0, nrcpts=1, msgid=<201909230903.x8N93VmZ001547@cronos.checkbox.co.kr>, relay=root@localhost Sep 23 18:03:34 cronos sendmail[1548]: NOQUEUE: tcpwrappers (localhost, 127.0.0.1) rejection Sep 23 18:03:34 cronos sendmail[1547]: x8N93VmZ001547: to=soneus, ctladdr=checkbox (500/500), delay=00:00:03, xdelay=00:00:02, mailer=relay, pri=30213, relay=[127.0.0.1] [127.0.0.1], dsn=5.0.0, stat=Service unavailable |
뭐든 동작이 잘 안된다면 로그를 살펴야 한다. sendmail의 경우 /var/log에 maillog 라는 파일로 로그를 남긴다. 위 예제는 보안 설정을 강화한 후에 이메일 발송이 안되어 나타난 경우다. 위 경우에 어느 부분에 중점을 두어야 할까? 이것저것 찾아보니 아래 문구가 핵심이었다.
tcpwrappers (localhost, 127.0.0.1) rejection |
무엇이 문제이길래 저런 오류가 났을까. 어떤 부분의 설정을 바꾸었는지 곰곰히 생각해보니 /etc 아래의 hosts.allow 와 hosts.deny 를 바꾸었다. 잘못된 사례는 아래와 같다.
* hosts.allow
sshd: xxx.xxx.xxx.xxx |
* hosts.deny
ALL: ALL |
위 사례는 모든 서비스에 모든 ip를 다 막아 둔 상태에서 sshd 포트에 접속할 수 있는 ip만 할당을 한 것이다. CentOS 6이하 버전에서 서비스할때는 아래와 같이 바꿔야 한다.
* hosts.allow
sshd: xxx.xxx.xxx.xxx sendmail: ALL httpd: ALL ALL: 127.0.0.1 |
* hosts.deny
ALL: ALL |
이렇게 하면 hosts.deny 에 의해 강화된 항목에 예외처리로 sendmail 발송 기능을 살릴 수 있다. 그리고 sendmail이 동작하지 않는 사례에 대해서는 링크로 건 네이버 블로그를 참고하시기 바란다.
-rw-rw-r-- 1 checkbox checkbox 22 Feb 23 00:54 .forward
위와 같으면 발송이 되는데 "x" 권한이 있거나 젤 뒤쪽에 "w"가 있으면 발송이 되지 않습니다.