sendmail 혹은 postfix를 설치하면, 메일을 보내는 것은 문제가 없습니다. 하지만, 수많은 지능적인 스팸메일들로 인해 대형 메일 서버(특히 GMail)는 추가적인 형식을 갖추어야 겨우 메일을 스팸으로 처리 할 것인지를 심사해 줍니다. 일단 여러가지 방법으로 스팸으로 처리 되지 않도록 하겠습니다.
1. mail-tester.com
우리가 보낸 혹은 보내게될 메일에 어떤 문제가 있는 지 검사를 해 줍니다. 일단 사이트로 접속을 하면, 처음 부터 자신에게 보낼 메일 주소를 알려 줍니다.
메일주소는 접속할 때 마다 바뀝니다. 알려준 메일로 주소를 보내어 봅시다. (창은 닫으면 안됩니다.). 그리고 메일이 도착하는 시간 30~1분 뒤 THEN CHECK YOUR SCORE 버튼을 눌러 주도록 합니다.
sendmail만 설치하고, 메일을 보냈다면, 다음과 같은 결과를 보게 될 것 입니다. 10점 만점에 -12.2 (센스 있게 0점으로 표시해 주더군요.)
각각의 + 항목을 눌러 본 세부적인 결과는 다음과 같습니다.
큰 문제는 도메인이 설치 되지 않아 발생하는 문제였습니다.
저는 위 상황을 보고, Reverse domain의 문제가 있다라고 보고, Reverse domain을 신청했습니다. Reverse domain은 인터넷 네트워크를 제공하는 장비 회사에 신청해야 합니다. 우리나라에서 직접 회선을 신청해 사용할 경우, KT 나 SKT 등이 될 것 입니다. 저는 aws에서 EC2( Elastic Compute 2 )라는 가상 머신에 ubunte 서비스를 사용하므로, aws에 신청을 했습니다.
ubuntu에서 메일을 주고 받으려면, sendmail 이나 postfix를 설치하면 됩니다. 요즘 postfix를 사용하는 곳이 많은 것 같지만 저와는 상성이 별로 좋지 못하더군요. 저는 쉽게 설치되고, 잘 동작하는 sendmail을 써 보도록 하겠습니다. sendmail을 설치하고, 이 곳 저 곳으로 메일을 보내어 보면, 많은 곳에서 (특히 Gmail) 스팸 처리가 됩니다. 다음 문서에서 스팸 처리를 피하는 것에대해서 다뤄 보려고 합니다. (저도 아직 해 보지 않아 스팸 처리를 피할 수 있는지 확신은 없습니다.)
1. sendmail SMTP Server 설치.
설치는 매우 쉽습니다.
apt-get install sendmail
2. /etc/mail/sendmail.mc 파일 변경.
/etc/mail/sendmail.mc 파일을 열어 아래 2줄을 지웁니다. (왜 지우는지는 아직 모르겠음->안지워도 잘 갔던 느낌이).
- 먼저 우분투에 접속하기 위해 ssh를 켭니다. 그리고, 키 페어를 이용해 로그인합니다. (키페어 관련은 따로 다루지 않습니다.).
$ ssh <키페어파일 위치> <EC2 서버 주소>
- apt를 이용해 설치하기전 apt를 업데이트해 주는 것이 좋습니다.
sudo apt update
- 간단히 apt를 이용해 vsftp를 설치하겠습니다. 아래와 같이 명령을 통해, apt를 설치해 주도록 합니다.
$ sudo apt install vsftpd
- 그럼 약 10초 정도면 설치가 끝이 납니다. 그리고, vsftpd를 이용해 ftp 상태를 확인합니다.
$ sudo systemctl status vsftpd
명령을 치면 아래와 같이 설치된 위치와 현재 상태등을 확인할 수 있습니다.
- 부팅시 자동으로 시작되게 하려면, 아래와 같이 명령합니다.
$ sudo systemctl enable vsftpd
그리고 방화벽을 확인해 FTP 트래픽이 허용되어 있는지 확인합니다.
$ sudo ufw status
저는 UFW를 따로 설치하지 않아 다음과 같이 표시되었습니다.
2. AWS 보안 그룹 업데이트.
단독으로 리눅스를 쓰게 되면, UFW를 이용해, 방화벽을 설치해 사용하면 되고, 저처럼 아마존이나, AZURE를 사용하게 되면, 보안 그룹을 업데이트해야 합니다. (기본적으로 모든 포트가 막혀 있습니다.).
저는 AWS를 사용해 업데이트를 하겠습니다. 제 경험상 애저또한 설정이 크게 다르지 않습니다.
- 콘솔에 접속 후 EC2 서비스를 눌러 줍니다.
- 리소스화면이 나타나면, 보안그룹을 선택해 줍니다.
- FTP를 설치한 인스턴스의 보안 그룹을 선택하고, 작업 버튼을 눌러 인바운드 규칙 탭을 누르고, 편집 버튼을 눌러 줍니다.
- 인바운드 규칙 창이 나타나면, 규칙 추가 버튼을 눌러 줍니다.
- 새로운 규칙입력 필드가 추가되면, 유형은 [사용자 지정 TCP], 포트범위는 [20-21], 소스는 어디서나 접속이 가능하도록 [0.0.0.0/0], 설명은 [FTP]를 입력하고 저장버튼을 눌러 줍니다.
- 그럼 아래와 같이 인바운드 규칙이 추가되었습니다.
- 그리고 나서 파일 질라를 통해 접속해 보면 접속이 매우 잘 됨을 확인할 수 있습니다.
3. 전통적인 id-password 방식 로그인을 위한 계정 추가 및 설정.
위와 같이 키-페어 방식을 사용해 접속을 하면 여러모로 편리하지만, ftp를 지원하는 많은 프로그램 툴들( ATOM VS-CODE 등 )은 위와 같은 방식으로 접속할 수 없거나, 접속되어도 제약이 발생할 수 있습니다. 그래서, 전통적인 id-pass 방식을 통한 접속도 가능하도록 설정해 둘 필요가 있습니다.
- 파일을 주고 받을 때 사용할 포트 열기.
id-password 방식은 데이터를 주고 받을 포트를 따로 열어야할 필요가 있습니다. 앞서 열어둔 22번 포트는 로그인등 명령을 주고 받을 때만 사용합니다. 저는 AWS 사용해 이것으로 설명을 하지만, 여러분들은 상황에 맞게 방화벽등의 포트를 열어 두시면되겠습니다.
다시 보안 그룹으로 돌아와 포트를 열어 둡니다.
- 유저 추가.
아래와 같이 명령어를 입력하면, 유저가 추가되고, /home 폴더 아래 해당 유저를 위한 폴더가 추가됩니다.
$ sudo adduser ftpuser
- ftp 폴더 생성.
상위 폴더에서도 사용이 가능하지만, 아마존에서는 ftp를 위한 폴더를 생성하고 그곳에 사용하도록 권하고 있었습니다. 먼저 ftp만 사용할 폴더를 생성합니다.
$ sudo mkdir /home/ftpuser/ftp
그리고, 해당 폴더는 누구나 접근 가능하도록 (아마 아파치 웹과 같이 사용할 경우가 많으므로, 아마존에서는 이렇게 셋팅하도록 하는 것 같습니다.) 소유자를 바꿔줍니다.