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 $mydomain
parameter menentukan nama domain internet lokal. Standarnya adalah menggunakan $myhostname
minus komponen pertama. Anda dapat menampilkan nilai saat ini $mydomain
dengan:
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 $myorigin
parameter 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 $mydestination
parameter 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.com
dan 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.com
akan 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.com
dengan 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_password
file 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_passwd
file 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_passwd
dan sasl_passwd.db
file 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
SMTP
biasanya mengacu pada fungsi relai SMTP di aplikasi web itu sendiri dan sendmail
mengacu pada penggunaan server SMTP pada sistem operasi yang mendasarinya. Anda harus memilih sendmail
opsi 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.php
file 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.com
alamat Amplop Dari akan diteruskan melalui mail.domain1.com
dan email dengan domain2.com
alamat Amplop Dari akan diteruskan melalui mail.domain2.com
. Email dengan nama domain lain di alamat Amplop Dari akan diteruskan melalui host yang ditentukan untuk relayhost
parameter.
Mail.domain1.com
dan mail.domain2.com
dapat 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.php
file 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-Version
header. 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