Rocky Linux 9 에서 Sendmail 설치 및 Submission 사용하기

리눅스/Mail|2024. 2. 8. 09:06
반응형

패키지 설치로 매우 간단히 설치가 가능합니다.

# dnf -y install sendmail sendmail-cf m4

 

외부 접근 허용과 Submission 포트 사용을 위해 아래 옵션을 변경, 활성화 합니다.

# vi /etc/mail/sendmail.mc

...

DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

...

 

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

 

사용할 도메인을 추가 합니다.

# echo "sysdocu.kr" >> /etc/mail/local-host-names

 

데몬을 재시작하여 설정을 반영합니다.

# systemctl restart sendmail

 

데몬 가동 상태를 확인합니다.

# netstat -nltp |grep sendmail
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      418162/sendmail: ac 
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      418162/sendmail: ac 

 

iptables 와 같은 방화벽에서 포트 25, 587 포트 접근을 허용하면, 기본적인 메일 송수신 설정은 완료가 됩니다.

 

반응형

댓글()

Sendmail 403 4.7.0 TLS handshake failed 해결 방법

리눅스/Mail|2023. 1. 5. 10:53
반응형

패키지 버전 업데이트 등의 문제로 TLS 버전이 맞지않아 통신이 이루어지지 않는 경우인데,

아래 설정파일을 수정하여 무시하도록 할 수 있습니다.

 

# vi /etc/mail/access

...
Try_TLS: NO

 

설정을 적용하고 데몬을 재시작하면 발송이 잘 됩니다.

# makemap hash /etc/mail/access.db < /etc/mail/access

# systemctl restart sendmail

 

반응형

댓글()

Sendmail dns=5.6.0, stat=Data format error 해결 방법

리눅스/Mail|2023. 1. 5. 10:34
반응형

아래 설정 파일을 열고 내용을 수정합니다.

# /etc/mail/sendmail.cf

#Dj$w.Foo.COM              // 이 부분을 주석해제하고 내용을 아래와 같이 발송 서버 도메인으로 변경합니다.
Djsysdocu.tistory.com    // 발송 서버 도메인 (호스트) 는 /var/log/maillog 로그파일의 발송 이력으로도 확인이 가능합니다.

 

아래 설정 파일을 열고 내용을 추가 합니다.

# vi local-host-names

sysdocu.tistory.com

 

데몬을 재시작 해주면 적용이 되고 메일 발송이 잘 이루어집니다.

# systemctl restart sendmail

 

반응형

댓글()

쉘스크립트를 이용한 메일 IP 평판 확인하기 (block list 등록 여부)

리눅스/Mail|2021. 12. 21. 08:53
반응형

# vi blcheck

#!/bin/sh

# 조회할 사이트 목록
BLISTS="
    cbl.abuseat.org
    dnsbl.sorbs.net
    bl.spamcop.net
    zen.spamhaus.org
"

# 에러 처리 (인자값 누락)
ERROR() {
  echo $0 ERROR: $1 >&2
  exit 2
}
[ $# -ne 1 ] && ERROR 'Please specify a single IP address'

# 역방향으로 IP 정렬
reverse=$(echo $1 |
sed -ne "s~^\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)$~\4.\3.\2.\1~p")
if [ "x${reverse}" = "x" ] ; then
      ERROR  "IMHO '$1' doesn't look like a valid IP address"
      exit 1
fi

# 역방향 DNS 조회 수행
REVERSE_DNS=$(dig +short -x $1)
echo IP $1 NAME ${REVERSE_DNS:----}

# 반복 처리
for BL in ${BLISTS} ; do
    # 시간 출력
    printf $(env TZ=Asia/Seoul date "+%Y-%m-%d_%H:%M:%S")
    # 반전된 IP 와 블랙 리스트 출력
    printf "%-50s" " ${reverse}.${BL}."
    # dig 를 이용하여 블랙 리스트에서 IP 조회
    LISTED="$(dig +short -t a ${reverse}.${BL}.)"
    echo ${LISTED:----}
done

[출처] https://www.saotn.org/bash-check-ip-address-blacklist-status/

* 출처에서 더 많은 정보를 표시하고 있습니다. 소스가 필요하신 분은 꼭 한번 방문해 보시기 바랍니다.

 

# chmod 700 blcheck

# blcheck 10.20.30.40    // 체크하고자 하는 IP 를 인자값으로 넣는다.

 

(결과 : 블록되지 않은 상태)

IP 10.20.30.40 NAME ---
2021-12-20_23:49:57 [your_api_key].40.30.20.10.dnsbl.httpbl.org.     ---
2021-12-20_23:49:58 40.30.20.10.cbl.abuseat.org.                     ---
2021-12-20_23:49:58 40.30.20.10.dnsbl.sorbs.net.                     ---
2021-12-20_23:49:59 40.30.20.10.bl.spamcop.net.                      ---
2021-12-20_23:49:59 40.30.20.10.zen.spamhaus.org.                    ---
2021-12-20_23:49:59 40.30.20.10.combined.njabl.org.                  ---

 

(결과 : 블록 된 상태)

IP 10.20.30.40 NAME ---
2021-12-20_23:49:57 [your_api_key].40.30.20.10.dnsbl.httpbl.org.     ---
2021-12-20_23:49:58 40.30.20.10.cbl.abuseat.org.                    127.0.0.2
2021-12-20_23:49:58 40.30.20.10.dnsbl.sorbs.net.                     ---
2021-12-20_23:49:59 40.30.20.10.bl.spamcop.net.                      ---
2021-12-20_23:49:59 40.30.20.10.zen.spamhaus.org.                    127.0.0.4
2021-12-20_23:49:59 40.30.20.10.combined.njabl.org.                  ---

 

Cisco 에서 제공하는 메일 평판 정보와 비교를 해보면 (talosintelligence.com)

127.0.0.2 같은 결과가 출력되는 것이 블랙 리스트로 등록된 경우 입니다.

 

저는 위와 같이 [출처] 의 스크립트를 약간 수정하여 사용했는데

키발급 및 체크가 약간 소요되는 두 개의 라인을 체크 대상에서 제외하였으며

dnsbl.httpbl.org

combined.njabl.org

 

한국 표준 시간 사용을 위해 아래 내용으로 수정하였습니다.

env TZ=Asia/Seoul

 

필요하신 분은 [출처] 에 추가된 내용과 같이 별도 스크립트를 만들어서 반복 조회를 할 수 있습니다.

for address in `cat iplist.txt`;
   do ./blcheck $address;
   sleep 2;
   done

 

반응형

댓글()

메일 포워딩 하면서 수신자 이메일 변경하기 (sendmail + incrontab + shell script)

리눅스/Mail|2021. 3. 25. 15:30
반응형

아래와 같은 상황이 발생하여 이를 해결하고자 스크립트를 작성하였습니다.

비슷한 경우에 있으신 분은 아래 스크립트를 참고하시기 바랍니다.

 

[상황]

메일을 받아서 다른 이메일 주소로 포워딩 해줘야 함.

하지만 사용자 홈디렉토리에 .forward 파일을 만들고 아래와 같이 사용했으나

포워딩 받은 이메일을 열어보니 메일 수신자가 변경되지 않고 그대로 쓰여있음이 확인됨 (sysdocu@sysdocu.com)

sysdocu@sysdocu.com // 사본을 남기기 위해 내 계정 입력

sysdocu@tistory.com    // 메일을 포워딩 받을 이메일 주소

 

[목표]

메일 발송 : A >>> B (포워딩) >>> C

메일을 포워딩 하고 받는 사람이 메일을 열었을때 '메일 정보'에서 송신자(A) 이메일 주소는 그대로, 수신자는 최종 수신자(C)의 메일 주소로 되어 있기를 희망

 

 

[방법]

icrontab 을 활용하여 /var/mail/sysdocu (메일함) 에 쓰기가 멈추었을때 저장된 메일을

쉘스크립트를 이용해 수신자를 편집하고 포워딩 해주면 됩니다.

여기서는 CentOS 기준으로 작성합니다. Ubuntu 환경에서 구성하는것은 별도 포스팅을 참고해주세요.

(https://sysdocu.tistory.com/1498)

 

메일이 쓰여진것을 확인하기 위해 파일 감지 패키지를 설치합니다.

# yum -y install incron

 

부팅시 자동 시작 설정과 현재 데몬을 구동합니다.

# systemctl enable incrond

# systemctl start incrond

 

파일 이벤트 (쓰기) 가 발생 되었을때 /root/run.sh 스크립트를 실행하도록 합니다.

한 통의 메일을 받더라도 IN_CLOSE_WRITE 이벤트가 빈번히 일어나므로 IN_ONESHOT 을 이용해 1회만 실행하도록 합니다.

나중에 스크립트에서 모든 처리가 완료되면 incrond 데몬을 재시작 하도록 했습니다.

# incrontab -e

/var/spool/mail/sysdocu    IN_CLOSE_WRITE,IN_ONESHOT    /root/run.sh

 

root 사용자의 incron 작업을 허용하고 적용해줍니다.

# vi /etc/incron.allow

root

 

# systemctl restart incrond

 

스크립트 내용을 작성합니다.

도착한 메일의 수신자를 수정하고 포워딩 하는 부분입니다.

그리고 메일이 쌓이면 쌓인만큼 여러개의 메일이 포워딩 되므로 포워딩 처리한 메일은 삭제해주는 것이 좋습니다.

 

# vi /root/run.sh

#!/bin/bash

date >> /root/result.txt
echo "스크립트 시작" >> /root/result.txt

# 쓰기 종료 확인시 진행
while : 
do

    # 메일 쓰기 종료 대기
    sleep 3

    # 시간 비교
    time_close=`stat -c %Y /var/spool/mail/sysdocu`
    time_now=`date +%s`
    time_diff=`expr $time_now - $time_close`

    # 메일 처리
    if [ "$time_diff" -gt "2" ]; then

        cat /var/spool/mail/sysdocu >> /root/sysdocu    # 백업
        sed -i "s/^To: .*$/To: sysdocu@tistory.com/" /var/spool/mail/sysdocu    # 수신자 변경
        cat /var/spool/mail/sysdocu |formail -s sendmail sysdocu@tistory.com    # 포워딩
        cat /dev/null > /var/spool/mail/sysdocu    # 비우기
        systemctl restart incrond    # 파일이벤트 준비 (IN_ONESHOT 때문에 재시작 필요)
        echo "메일 포워딩 완료" >> /root/result.txt    # 결과 기록
        echo "" >> /root/result.txt
        exit 0

    else
        echo "파일쓰기 종료 대기중" >> /root/result.txt
    fi

done

* /var/spool/mail/sysdocu : 사용자 이름의 메일함 (메일 파일)

* sysdocu@tistory.com : 넘겨받는 메일 계정

 

# chmod 700 /root/run.sh

 

이제 외부에서 sysdocu@sysdocu.com 로 메일을 보내면

sysdocu@tistory.com 이 받는것처럼 보여집니다.

 

반응형

댓글()

command line 명령어로 메일 보내기 (php)

리눅스/Mail|2020. 2. 20. 13:04
반응형

php 7.2 에서 테스트 하였습니다.

참고로 메일을 보내기 위해서는 로컬에 SMTP 가 열려 있어야 합니다.

 

 

# vi send.php

 

<?php


// 메일 헤더 (보내는 사람)
$headers = "From: SENDER<sender@sysdocu.tistory.com>\r\nMIME-Version: 1.0\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: base64\r\n";


// 메일 제목
$title = "메일 제목입니다.";
$title = "=?utf-8?B?".base64_encode($title)."?=\n";


// 메일 내용 (직접 입력할 경우)
//$content = "<html lang='ko'><head><meta charset='utf-8'/></head><body><h1>안녕하세요. 테스트 메일 입니다.</h1></body></html>";


// 메일 내용 (파일에서 출력할 경우)
$file_handle = fopen("mail_body.html", "r");
$content = "";
while (!feof($file_handle)) {
    $line_of_text = fgets($file_handle);
    $content = $content . $line_of_text . "
    ";
}
fclose($file_handle);
 
// 메일 전송 (받는사람)
mail("user@sysdocu.tistory.com", $title, chunk_split(base64_encode($content)), $headers);


?>

 

제목은 한글이 안깨지도록 하였는데, 메일 헤더값의 한글은 어떻게 하는지 몰라서

메일 닉네임 사용시 영문으로 써야함 (SENDER 부분처럼 하던가 이메일 주소만 남기고 제거해도 됨)

 

# chmod 755 send.php

 

발송하기

 

# php send.php

 

===================================================

 

대량으로 보낼때는..

 

1) send.php 에서 두 군데를 수정

 

$USER = $_SERVER['argv'];    // 파일 맨 첫 줄에 추가


mail("$USER[1]", $title, chunk_split(base64_encode($content)), $headers);    // 맨 아랫줄에 user@sysdocu.tistory.com 대신 $USER[1] 로 변경

 

2) 메일 발송을 반복해 줄 쉘스크립트 생성

 

# vi run.sh

 

#!/bin/bash


for USER in `cat mail_list.txt`; do
    php send.php $USER
    echo $USER 으로 메일 발송 완료
done 

 

# chmod 700 run.sh

 

3) 메일 리스트 작성

 

# vi mail_list.txt

 

user@sysdocu.tistory.com
user2@sysdocu.tistory.com
user3@sysdocu.tistory.com


4) SMTP 데몬 가동

 

메일 발송시 SMTP 로 발송하기 때문에 로컬에 관련 데몬이 구동되어야 한다.

25번 포트가 열려있는지 확인하자.

구동 안되어 있을 경우 별다른 설정 없이 데몬만 가동하면 된다.

 

# systemctl start sendmail

 

5) 발송하기

 

# sh run.sh

 

* 사용하기 전에 개인 메일 2~3개로 테스트를 먼저 꼭 해보자.

 

반응형

댓글()

command line 명령어로 메일 보내기 (mail) - 한글 제목 불가

리눅스/Mail|2020. 2. 20. 13:01
반응형

* SMTP 를 이용하지 않고 발송

* html 본문 사용 가능

* 한글 제목 불가


# cat mail_body.html |mail -a "From: sender@sysdocu.tistory.com" -a "MIME-Version: 1.0" -a "Content-Type: text/html" -s "[TEST] 테스트 메일 입니다." user@sysdocu.tistory.com



반응형

댓글()

command line 명령어로 메일 보내기 (sendEmail) - 한글 제목 불가

리눅스/Mail|2019. 7. 10. 15:08
반응형

1. 설치

# yum -y install sendEmail

 

2. 발송

 

* 형식

sendEmail 

-f {보내는사람Email주소} 

-t {받는사람Email주소}

-s {SMTP및포트} 

-xu {보내는사람Email주소계정}

-xp {보내는사람Email계정패스워드}

-u {제목}

-m {내용}  // 내용을 텍스트로 보낼 경우 (선택)

-o message-file=body.html  // 내용을 html 파일로 보낼 경우 (선택)

-o message-charset=UTF-8  // 언어셋 (선택)

-a file01.ext file02.ext file03.ext  // 파일 첨부 (선택)

 

# sendEmail -f sender@sysdocu.tistory.com -t user@sysdocu.tistory.com -s smtp.tistory.com:25 -xu sender@sysdocu.tistory.com -xp 12345678 -u 테스트제목 -o message-file=body.html -o message-charset=UTF-8

 

[출처] https://idchowto.com/?p=32943

 

반응형

댓글()

sendmail 릴레이 설정

리눅스/Mail|2018. 10. 24. 14:50
반응형

1. sendmail.mc파일에서 릴레이 허용가능하게 되있는지 체크


FEATURE(`access_db',`hash -o /etc/mail/access.db')dnl



2. /etc/mail/access 파일 수정

본 SMTP 를 통해 메일 발송 허용할 IP 를 설정한다. 대역도 가능하다. (예: 192.168.2.0/24)


  localhost.localdoamin RELAY

  localhost             RELAY

  127.0.0.1             RELAY

  192.168.0             RELAY

  support@microsoft.com REJECT       <- 거부하고 싶으면 [REJECT]로 지정

  @commercecheck.com    REJECT       <- @로 시작하면 도메인을 거부하게됨


access파일을 데이터베이스로 변환후 sendmail을 재기동하면 허용 가능 상태로 된다.


  # makemap -v hash /etc/mail/access.db < /etc/mail/access

  key=`localhost.localdomain', val=`RELAY'

  key=`localhost', val=`RELAY'

  key=`127.0.0.1', val=`RELAY'

  key=`192.168.0', val=`RELAY'


 # service sendmail restart



[출처] http://egloos.zum.com/voyager/v/4302356

반응형

댓글()

AfterLogic Webmail Lite 설치 (작성중)

리눅스/Mail|2016. 5. 19. 17:52
반응형

내용....


계정은 시스템 계정을 사용합니다.

dovecot 사용자라면 아래와 같이 설정파일을 수정한 후에, 로그인할때 'userid@domain' 형식으로 로그인하면 됩니다.


# vi /etc/dovecot/conf.d/10-auth.conf

auth_username_format = %Ln 



반응형

댓글()

리눅스 쉘에서 파일 첨부된 메일 보내기 (mutt 명령어)

리눅스/Mail|2015. 1. 23. 09:36
반응형

로컬 smtp는 활성화 되어있어야 합니다.

그리고 mutt 명령어가 없다면 아래 명령어로 설치하시면 됩니다.

 

yum install mutt

 

mutt 이 있으면 리눅스 쉘에서 파일을 첨부한 메일 발송이 가능해집니다.

 

# echo "안녕하세요. docu.tistory.com 입니다." | mutt -x -a /root/att.zip -s "제목" user@sysdocu.com

 

여기서 /root/att.zip 은 첨부해서 보낼 파일입니다.

반응형

댓글()