GCP Compute Engine을 Google Suite SMTP 릴레이 서비스와 연결

GCP Compute Engine을 Google Suite SMTP 릴레이 서비스와 연결

최근 우리는 GCP Compute Engine을 Google 제품군 이메일 서비스와 연결하려고 합니다. 이것에선적 서류 비치말했다

Google Compute Engine은 포트 25의 아웃바운드 연결을 허용하지 않습니다. 기본적으로 아웃바운드 SMTP는 서버 간 SMTP가 남용되기 쉬우므로 차단됩니다. 또한 SendGrid, Mailgun, Mailjet 등 신뢰할 수 있는 제3자 제공업체가 있으면 Compute Engine과 사용자가 수신자의 IP 평판을 유지하는 데 부담을 덜 수 있습니다.

우리의 아이디어는 PHP 스크립트가 있고 httpd/apache에서 실행된다는 것입니다. 이 스크립트는 mail다음과 같이 영업팀에 이메일을 보내는 기능이 있습니다.

$mail = mail($siteOwnersEmail, $subject, $message, $headers);

sendmail을 사용하여 smtp Google 서비스로 중계합니다. Centos 7에서 실행되는 컴퓨팅 엔진. 우리는 이미 Google Suite를 사용했기 때문에 SendGrid, MailGun및 같은 Google 추천으로 다른 신뢰할 수 있는 제3자를 고려하지 않습니다.MailJet

다른 사람에게서우편, Compute Engine과 Google Suite를 연결하는 것은 어렵습니다. 이를 달성하려면 여러분의 도움이 필요합니다.

우리는 다음과 같이 sendmail을 구성했습니다.

divert(-1)dnl
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl
dnl define(`confSMTP_LOGIN_MSG', `$j Sendmail; $b')dnl
dnl define(`confLOG_LEVEL', `9')dnl
dnl define(`SMART_HOST', `relay-smtp.gmail.com')dnl
define(`confDEF_USER_ID', ``8:12'')dnl
dnl define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
dnl define(`RELAY_MAILER_ARGS', `TCP $h 587′)dnl
dnl define(`ESMTP_MAILER_ARGS', `TCP $h 587′)dnl
dnl define(`confAUTH_OPTIONS', `A p')dnl
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
dnl define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
dnl define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl
dnl define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl
dnl define(`confDONT_BLAME_SENDMAIL', `groupreadablekeyfile')dnl
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
define(`confTO_IDENT', `0')dnl
dnl define(`confINET_QOS', `AF11')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl define(`confMAX_DAEMON_CHILDREN', `20')dnl
dnl define(`confCONNECTION_RATE_THROTTLE', `3')dnl
FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl define(`confLOCAL_MAILER', `cyrusv2')dnl
dnl define(`CYRUSV2_MAILER_ARGS', `FILE /var/lib/imap/socket/lmtp')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')dnl
dnl DAEMON_OPTIONS(`Name=MTA-v4, Family=inet, Name=MTA-v6, Family=inet6')
FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
LOCAL_DOMAIN(`localhost.localdomain')dnl
dnl MASQUERADE_AS(`qreatiq.com')dnl
dnl FEATURE(masquerade_envelope)dnl
dnl FEATURE(masquerade_entire_domain)dnl
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl

이미 SELinux를 다음과 같이 설정했습니다.

setsebool httpd_can_sendmail on 

인증서 생성 중

cd /etc/pki/tls/certs
make sendmail.pem

인증에 사용할 인증 파일을 만듭니다.smtp.gmail.com

mkdir /etc/mail/auth
chmod 700 /etc/mail/auth 

클라이언트 정보 파일 생성

AuthInfo:smtp.gmail.com “U:smmsp” “I:gmail_address” “P:password” “M:PLAIN”
AuthInfo:smtp.gmail.com:587 “U:smmsp” “I:gmail_address” “P:password” “M:PLAIN”

그리고 만들어

makemap -r hash client-info.db < client-info
chmod 600 client-info client-info.db

별칭 편집

root:email_address

apache신뢰할 수 있는 사용자에 사용자를 추가 하고 실행하세요.newaliases

내가 이 코드를 사용하여 이메일을 보내려고 했던 것보다

echo ‘this is a test’| mail -s test_email [email protected]

/var/log/maillog그리고 여기 상태 의 cek 로그는 deferred because connection timeout with aspmx2.googlemail.com완전한 스택 추적입니다.

Aug 30 06:54:03 gcp***-***a sendmail[14979]: w7U6s31m014979: to=system@*****.com, ctladdr=a*****g_imannuel (1001/1002), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30234, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (w7U6s3QN014980 Message accepted for delivery)
Aug 30 06:59:03 gcp***-***a sendmail[14982]: w7U6s3QN014980: to=<system@*****.com>, ctladdr=<a*****g_imannuel@gcp***-***a.c.calm-ca***-XXX.internal> (1001/1002), delay=00:05:00, xdelay=00:05:00, mailer=esmtp, pri=120537, relay=aspmx2.googlemail.com. [173.194.66.26], dsn=4.0.0, stat=Deferred: Connection timed out with aspmx2.googlemail.com.

SSH를 시작하는 세션만 /var/log/messages에 기록합니다.

그리고 여기 Google Suite의 SMTP 릴레이 서비스가 있습니다.

Allowed senders: Any addresses (not recommended)
Only accept mail from the specified IP addresses: Yes
Allowed IP addresses: www.****.com
Require SMTP Authentication: Yes
Require TLS encryption: No

Google Suite(Gmail 앱 및 이메일이 발신자에게 전송되지 않음)를 확인하세요. 너무 슬퍼. 문제가 뭔지 아는 사람 있나요?

답변1

여기서 sendmail을 사용하는 것은 일을 엄청나게 복잡하게 만듭니다(그리고 어쨌든 여전히 포트 25를 사용하고 싶을 것입니다). 여기 지침을 따르십시오.https://support.google.com/a/answer/2956491?hl=ko이메일 릴레이를 위해 G Suite를 설정하려면 인증을 사용하고 포트 587을 사용하여 전송하세요.

또한 내장된 PHP mail() 함수를 사용할 수 없습니다(아무도 사용하지 않을 것입니다). 대신 PEAR::Mail을 사용하세요.http://pear.php.net/manual/en/package.mail.mail.php- 해당 패키지를 사용하면 호스트/포트 등을 구성할 수 있습니다.

관련 정보