Atur Relai SMTP Antara 2 Server SMTP Postfix di CentOS / RHEL

Atur Relai SMTP Antara 2 Server SMTP Postfix di CentOS / RHEL

Sebelumnya kita telah membahas pengaturan relai SMTP Postfix dengan mailjet , yang berguna ketika Anda harus menggunakan layanan relai SMTP komersial. Tutorial ini akan menunjukkan cara mengatur relai SMTP antara 2 server SMTP Postfix di CentOS / RHEL.

Kasus Penggunaan

Katakanlah ada dua server: server A dan server B.

  • Anda telah menyiapkan server email berfitur lengkap di server A dengan Postfix sebagai server SMTP. Anda dapat menggunakannya untuk mengirim email langsung ke penerima, karena porta 25 tidak diblokir.
  • Nanti Anda menggunakan server B untuk menyiapkan situs web, yang perlu mengirim email pemberitahuan kepada pengguna.

Anda dapat menyiapkan server email lain di server B, tetapi ini hanya membuang-buang waktu dan sumber daya perangkat keras. Solusi yang lebih masuk akal adalah dengan menginstal server SMTP Postfix di server B dan mengkonfigurasinya untuk mengirim email melalui server A, yang dapat meneruskan email dari server B ke penerima akhir. Server A telah membangun reputasi IP-nya, jadi Anda tidak perlu membangun reputasi IP untuk server B.

Jika Anda menjalankan WordPress di server Linux Anda sendiri, saya sarankan Anda mengikuti tutorial ini untuk menyiapkan relai SMTP Postfix. Dengan cara ini, Anda dapat menghilangkan plugin SMTP di WordPress. Plugin WordPress memperlambat situs Anda dan rentan, seperti kerentanan yang ditemukan di plugin Easy WP SMTP , yang memungkinkan pengguna yang tidak sah untuk mengubah opsi WordPress dan mengeksekusi kode berbahaya. Situs saya pernah disusupi, karena kerentanan di plugin WordPress. Jadi saya menyingkirkan plugin sebanyak yang saya bisa, ketika saya dapat menerapkan fungsi yang sama dengan sistem operasi yang mendasarinya.

Tanpa basa-basi lagi, mari kita mulai.

Langkah 1: Instal Server SMTP Postfix di Server B

Jalankan perintah berikut untuk menginstal Postfix dari repositori CentOS / RHEL default. Pustaka Cyrus SASL diperlukan agar otentikasi SASL berfungsi.

sudo dnf update

sudo dnf menginstal postfix cyrus-sasl cyrus-sasl-plain -y

Setelah terinstal, jalankan server SMTP Postfix.

sudo systemctl mulai postfix

Dan aktifkan mulai otomatis saat boot.

sudo systemctl mengaktifkan postfix

Langkah 2: Konfigurasikan Postfix di Server B

Mengatur nama host Postfix

Secara default, server SMTP Postfix menggunakan nama host OS untuk mengidentifikasi dirinya sendiri saat berkomunikasi dengan server SMTP lainnya. Namun, nama host OS mungkin berubah, jadi praktik yang baik untuk menetapkan nama host secara langsung di file konfigurasi Postfix dengan perintah berikut. Perhatikan bahwa tidak disarankan untuk menggunakan domain utama (domainanda.com) sebagai nama host.

sudo postconf -e "myhostname = www.yourdomain.com "

Menyetel Parameter $ mydomain

The $mydomainparameter menentukan nama domain internet lokal. Standarnya adalah menggunakan $myhostnameminus komponen pertama. Anda dapat menampilkan nilai saat ini $mydomaindengan:

postconf mydomain

Ini harus menjadi nama domain puncak Anda, seperti

linuxbabe.com

Jika tidak menampilkan nama domain apex Anda, setel parameter $ mydomain dengan:

sudo postconf -e "mydomain = yourdomain.com "

Mengatur Parameter $ myorigin

The $myoriginparameter menentukan nama domain default yang ditambahkan ke alamat pengirim dan penerima yang tidak memiliki bagian @domain. Defaultnya adalah menggunakan nilai $myhostname, seperti yang dapat dilihat dengan:

postconf myorigin

Keluaran:

myorigin = $ myhostname

Anda dapat mengubah nilainya menjadi domainanda.com.

sudo postconf -e "myorigin = yourdomain.com "

Menyetel Parameter $ mydestination

The $mydestinationparameter menentukan daftar domain yang server Anda menganggap dirinya tujuan akhir untuk. Anda dapat menampilkan nilai $ mydestination saat ini dengan:

postconf mydestination

Keluaran

mydestination = $ myhostname, localhost. $ mydomain, localhost

Nilai default memungkinkan server SMTP Postfix Anda menerima email yang datang someone@mail.yourdomain.com, someone@localhost.yourdomain.comdan someone@localhost. Perhatikan bahwa nilai mydestination tidak boleh menyertakan nama domain utama Anda seperti linuxbabe.com, karena itu akan menjadikan server B sebagai tujuan untuk nama domain utama Anda, yang berarti email yang dihasilkan dari server B untuk admin@yourdomain.comakan dikirim ke server B itu sendiri, bukan ke server A .

Memulai ulang Postfix

Terakhir, kita perlu merestart Postfix agar perubahan diterapkan.

sudo systemctl restart postfix

Langkah 3: Relai SMTP Postfix melalui port 587

Jalankan perintah berikut di server B untuk menyetel parameter relayhost. Ganti mail.linuxbabe.comdengan nama host server email Anda.

sudo postconf -e "relayhost = [ mail.linuxbabe.com ]: 587"

Kemudian edit file konfigurasi utama Postfix di server B.

sudo nano /etc/postfix/main.cf

Tambahkan baris berikut di akhir file ini untuk mengkonfigurasi otentikasi SASL. Kami menetapkan bahwa /etc/postfix/sasl_passwordfile tersebut berisi nama pengguna dan kata sandi.

# konfigurasi relai keluar
smtp_sasl_auth_enable = ya
smtp_sasl_password_maps = hash: / etc / postfix / sasl_passwd
smtp_sasl_security_options = tanpa nama
smtp_tls_security_level = mungkin
header_size_limit = 4096000

Simpan dan tutup file. Selanjutnya, Anda harus membuat akun email khusus di server email Anda, sehingga server B dapat menggunakan akun email ini untuk login melalui port 587. Setelah itu, buat /etc/postfix/sasl_passwdfile di server B.

sudo nano / etc / postfix / sasl_passwd

Tambahkan host relai SMTP dan kredensial SMTP ke file ini seperti di bawah. Ganti nilai ini dengan nama host server email Anda sendiri, akun email, dan kata sandi. Perhatikan bahwa ada titik dua antara akun email dan kata sandi.

[ mail.linuxbabe.com ]: 587   account@linuxbabe.com : sandi

Simpan dan tutup file. Kemudian buat file db hash yang sesuai dengan postmap.

sudo postmap / etc / postfix / sasl_passwd

Sekarang Anda harus memiliki file /etc/postfix/sasl_passwd.db. Mulai ulang Postfix agar perubahan diterapkan.

sudo systemctl restart postfix

Secara default, sasl_passwddan sasl_passwd.dbfile dapat dibaca oleh semua pengguna di server. Ubah izin menjadi 600 sehingga hanya root yang dapat membaca dan menulis ke dua file ini.

sudo chmod 0600 / etc / postfix / sasl_passwd /etc/postfix/sasl_passwd.db

Mulai sekarang, Website di server B dapat menggunakan Postfix untuk mengirim email, yang akan diteruskan melalui server email Anda. Perhatikan bahwa banyak aplikasi web menyediakan dua mode pengiriman email:

  • SMTP
  • Sendmail

SMTPbiasanya mengacu pada fungsi relai SMTP di aplikasi web itu sendiri dan sendmailmengacu pada penggunaan server SMTP pada sistem operasi yang mendasarinya. Anda harus memilih sendmailopsi untuk menggunakan relai SMTP Postfix. Jika Anda menginstal plugin SMTP di situs WordPress Anda, hapus plugin SMTP dan WordPress akan menggunakan relai SMTP Postfix.

Jika Anda Memiliki iRedMail di Server A

Jika Anda menggunakan iRedMail untuk menyiapkan server email di server A, daemon kebijakan iRedAPD kemungkinan akan menolak relai email dari server B, karena pengirim tidak sama dengan nama pengguna otentikasi SMTP. Untuk mengatasi masalah ini, kita perlu menambahkan nama pengguna otentikasi SMTP ke daftar yang diizinkan.

Edit file konfigurasi iRedAPD.

sudo nano /opt/iredapd/settings.py

Tambahkan baris berikut di akhir file. Ganti teks merah seperlunya.

ALLOWED_LOGIN_MISMATCH_SENDERS = [' akun@domainanda.com ']

Simpan dan tutup file. Kemudian mulai ulang iRedAPD agar perubahan diterapkan.

sudo systemctl restart iredapd

Mencegah Spammer di Server B

Karena server SMTP Postfix di server B hanya digunakan untuk mengirim email transaksional ke pengguna, kami dapat membuatnya hanya mendengarkan di localhost saja, jadi pelaku kejahatan tidak dapat mengirim spam ke sana. Jalankan perintah berikut di server B agar Postfix hanya mendengarkan di localhost.

sudo postconf -e "inet_interfaces = loopback-only"

Mulai ulang Postfix agar perubahan diterapkan.

sudo systemctl restart postfix

Mengatur Alamat Dari, Dari Nama dan Jalur Kembali

Secara default, alamat Dari dan Dari nama sama dengan akun email yang digunakan untuk mengautentikasi login, dan jalur kembali akan seperti itu www-data@postfix-hostname. Anda dapat menyetel alamat Dari khusus, Dari nama, dan Jalur Kembali di aplikasi web Anda.

Mari gunakan WordPress sebagai contoh. Anda dapat menambahkan baris berikut di functions.phpfile tema WordPress Anda untuk mengganti alamat Dari default, Dari nama, dan jalur kembali. Ganti teks merah seperlunya. Anda harus membuat alamat email Dari di server email Anda untuk mencegah kegagalan pengiriman.

// Berfungsi untuk mengubah alamat email Dari
function wpb_sender_email ($ original_email_address) {
    return 'notifications@linuxbabe.com ';
}

// Berfungsi untuk mengganti nama pengirim
function wpb_sender_name ($ original_email_from) {
    mengembalikan ' LinuxBabe ';
}

// Setel jalur kembali sama dengan alamat Dari
function fix_my_email_return_path ($ phpmailer) {
    $ phpmailer-> Pengirim = $ phpmailer-> Dari;
}

// Menghubungkan fungsi kita ke filter WordPress
add_filter ('wp_mail_from', 'wpb_sender_email');
add_filter ('wp_mail_from_name', 'wpb_sender_name');
add_action ('phpmailer_init', 'fix_my_email_return_path');

Simpan file dan Anda selesai.

Memeriksa Skor Pengirim Email

Sekarang Anda harus pergi ke https://www.mail-tester.com dan mengirim email dari situs web di server B ke alamat penguji surat. Periksa skor pengirim Anda dan lihat apakah SPF, DKIM, dan DMARC akan lulus. Seperti yang Anda lihat, saya mendapat nilai sempurna

Jika Ada Beberapa Situs Web di Server B

Jika Anda memiliki beberapa situs web yang berjalan di server B, Anda perlu menggunakan host relai yang berbeda untuk setiap nama domain. Edit file konfigurasi utama Postfix di server B.

sudo nano /etc/postfix/main.cf

Tambahkan baris berikut dalam file, yang memberitahu Postfix bahwa kami ingin menggunakan relayhost yang berbeda untuk setiap domain pengirim.

sender_dependent_relayhost_maps = hash: / etc / postfix / relay_by_sender

Kemudian buat file.

sudo nano / etc / postfix / relay_by_sender

Tambahkan parameter seperti di bawah ini. Sisi kiri adalah domain pengirim. Sisi kanan adalah nama host dari server email dan nomor porta.

Email @ domain1 .com. domain1 .com: 587Email 
@ domain2 .com. domain2 .com: 587

Simpan dan tutup file. Kemudian edit file otentikasi SASL.

sudo nano / etc / postfix / sasl_passwd

Tambahkan kredensial login seperti di bawah ini.

surat. domain1 .com account@domain1.com: sandi
surat. domain2 .com account@domain2.com: sandi

Simpan dan tutup file. Kemudian buat file hash db.

sudo postmap / etc / postfix / relay_by_sender

sudo postmap / etc / postfix / sasl_passwd

Mulai ulang server SMTP Postfix agar perubahan diterapkan.

sudo systemctl restart postfix

Mulai saat ini, email dengan domain1.comalamat Amplop Dari akan diteruskan melalui mail.domain1.comdan email dengan domain2.comalamat Amplop Dari akan diteruskan melalui mail.domain2.com. Email dengan nama domain lain di alamat Amplop Dari akan diteruskan melalui host yang ditentukan untuk relayhostparameter.

Mail.domain1.comdan mail.domain2.comdapat mengarah ke alamat IP yang sama, yang berarti kedua nama domain tersebut menggunakan server email yang sama. Anda dapat memeriksa salah satu tutorial berikut untuk menghosting beberapa domain di satu server email.

  • Cara menghosting beberapa domain email di iRedMail dengan Nginx
  • Cara menghosting beberapa domain email di server email Modoboa

Anda juga dapat menghosting email di server yang berbeda untuk dua nama domain. Jika Anda memiliki beberapa situs WordPress di server B, Anda juga harus mengubah setiap functions.phpfile di tema WordPress Anda untuk menyetel alamat Dari dan nama khusus untuk setiap nama domain.

Menghapus Informasi Sensitif dari Header Email

Secara default, server SMTP Postfix akan menambahkan Received:header email, mencatat alamat IP server B, yang dapat membocorkan alamat IP situs Anda (Jika berada di belakang CDN). Anda dapat memberitahu Postfix untuk mengabaikannya. Buat file cek header di server A.

sudo nano / etc / postfix / smtp_header_checks

Letakkan baris berikut ke dalam file.

/ ^ Diterima: / IGNORE

Simpan dan tutup file. Kemudian edit file konfigurasi utama Postfix.

sudo nano /etc/postfix/main.cf

Tambahkan baris berikut di akhir file.

smtp_header_checks = regexp: / etc / postfix / smtp_header_checks

Simpan dan tutup file. Kemudian jalankan perintah berikut untuk membangun kembali tabel hash.

sudo postmap / etc / postfix / smtp_header_checks

Muat ulang Postfix agar perubahan diterapkan.

sudo systemctl memuat ulang postfix

Sekarang Postfix tidak akan menyertakan informasi sensitif tersebut di header email. Perhatikan bahwa beberapa orang mungkin juga suka menghapus MIME-Versionheader. Saya tidak merekomendasikannya, karena ini akan menyebabkan kegagalan verifikasi DKIM.

Penyelesaian masalah

Jika Postfix di server B tidak dapat mengirim email dan Anda menemukan kesalahan berikut di mail log ( /var/log/maillog),

peringatan: otentikasi SASL gagal: Tidak ada mekanisme yang layak ditemukan

Anda perlu menginstal pustaka Cyrus SASL.

sudo dnf menginstal postfix cyrus-sasl cyrus-sasl-plain -y

Kemudian restart Postfix.

sudo systemctl restart postfix

Kesimpulan

Sekian tutorial kali ini, jika kamu menemui masalah, silahkan tinggalkan komentar