Membangun Server Surat Anda Sendiri Dengan FreeBSD 11

Menjalankan server email Anda sendiri bisa sangat bermanfaat. Anda bertanggung jawab atas data Anda. Ini juga memungkinkan Anda lebih fleksibel dengan opsi pengiriman Anda. Namun, ada beberapa tantangan. Anda berisiko membuka server Anda hingga kerentanan, serta menjadikan server Anda relay potensial bagi spammer untuk digunakan.

Dengan itu, mari kita mulai menjalankan server mail kita sendiri.

Gambaran

Ada tiga perangkat lunak yang diperlukan untuk menginstal yang tidak termasuk dalam sistem basis FreeBSD:

  • OpenSMTPd
  • Tempat perlindungan merpati
  • spamd

OpenSMTPd adalah agen transfer surat (MTA) dan agen pengiriman surat (MDA). Ini berarti bahwa ia dapat berkomunikasi dengan server mail lain melalui SMTPprotokol, dan juga menangani pengiriman email ke masing-masing kotak surat pengguna. Kami akan menyiapkan OpenSMTPd sehingga dapat berkomunikasi dengan server eksternal (difilter melalui spamd) dan mengirimkan email ke pengguna lokal, serta mengirimkan email lokal dari pengguna ke pengguna.

Dovecot adalah MDA yang membaca kotak surat lokal dan menyajikannya melalui IMAP atau POP3 kepada pengguna. Ini akan menggunakan kotak surat pengguna lokal untuk menyajikan konten ini.

Spamd adalah layanan penyaringan email. Kami dapat meneruskan email melalui spamd, dan itu akan memfilter email berdasarkan berbagai daftar hitam, daftar putih, dan daftar nama.

Gagasan umum untuk server surat ini memerlukan beberapa jalur berbeda:

Outside world -> Firewall -> spamd -> OpenSMTPD -> User mail boxes
Outside world -> Firewall (spamd-whitelist) -> OpenSMTPD -> User mailboxes
Outside world -> Firewall (IMAP/POP3) -> Dovecot
Outside world -> Firewall (SMTPD submission)

Untuk tutorial ini, kita akan menggunakan PBS OpenBSD versi FreeBSD untuk firewall kita. Anda juga dapat menggunakan ipfw, di mana konfigurasinya sangat mirip.

Catatan: Vultr, secara default, memblokir port 25, yang digunakan oleh server SMTP di mana-mana. Jika Anda ingin menjalankan server email yang berfungsi penuh, Anda harus membuka porta itu.

Pengaturan awal

Pertama, kita perlu menginstal program yang diperlukan.

Dengan asumsi Anda menjalankan sebagai pengguna dengan pengaturan akses sudo, kita dapat menjalankan perintah berikut. Mereka akan bervariasi tergantung pada apakah Anda menggunakan port atau paket.

Paket (disarankan)

Kecuali Anda memerlukan fungsionalitas khusus yang dibangun ke dalam utilitas ini, disarankan untuk menginstal melalui paket. Lebih mudah, membutuhkan lebih sedikit waktu dan sumber daya server, dan menyediakan antarmuka yang intuitif dan ramah pengguna.

sudo pkg install opensmtpd dovecot spamd

makePerintah berikut ini akan memberi Anda banyak opsi kompilasi, standarnya akan berfungsi dengan baik. Jangan ubah ini kecuali Anda tahu persis apa yang Anda lakukan.

sudo portsnap fetch update   # or run portsnap fetch extract if using ports for the first time
cd /usr/ports/mail/opensmtpd  
make install  # Installs openSMTPd
make clean
cd /usr/ports/mail/dovecot
make install  # Installs dovecot
make clean
cd /usr/ports/mail/spamd
make install  # Installs spamd
make clean

Kami perlu menambahkan baris berikut ke /etc/rc.conf:

pf_enable="YES"
pf_rules="/usr/local/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"

obspamd_enable="YES"
obspamd_flags="-v"
obspamlogd_enable="YES"

dovecot_enable="YES"

Pengaturan Firewall

Untuk mengkonfigurasi PF, kita dapat membuat /usr/local/etc/pf.conf:

## Set public interface ##
ext_if="vtnet0"

## set and drop IP ranges on the public interface ##
martians = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \
          10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \
          0.0.0.0/8, 240.0.0.0/4 }"

table <spamd> persist
table <spamd-white> persist

# Whitelisted webmail services
table <webmail> persist file "/usr/local/etc/pf.webmail.ip.conf"

## Skip loop back interface - Skip all PF processing on interface ##
set skip on lo

## Sets the interface for which PF should gather statistics such as bytes in/out and packets passed/blocked ##
set loginterface $ext_if

# Deal with attacks based on incorrect handling of packet fragments 
scrub in all


# Pass spamd whitelist
pass quick log on $ext_if inet proto tcp from <spamd-white> to $ext_if port smtp \
    -> 127.0.0.1 port 25
# Pass webmail servers
rdr pass quick log on $ext_if inet proto tcp from <gmail> to $ext_if port smtp \
    -> 127.0.0.1 port 25
# pass submission messages.
pass quick log on $ext_if inet proto tcp from any to $ext_if port submission modulate state
# Pass unknown mail to spamd
rdr pass log on $ext_if inet proto tcp from {!<spamd-white> <spamd>} to $ext_if port smtp \
    -> 127.0.0.1 port 8025 

## Blocking spoofed packets
antispoof quick for $ext_if

## Set default policy ##
block return in log all
block out all

# Drop all Non-Routable Addresses 
block drop in quick on $ext_if from $martians to any
block drop out quick on $ext_if from any to $martians

pass in inet proto tcp to $ext_if port ssh

# Allow Ping-Pong stuff. Be a good sysadmin 
pass inet proto icmp icmp-type echoreq

# Open up imap/pop3 support
pass quick on $ext_if proto tcp from any to any port {imap, imaps, pop3, pop3s} modulate state


# Allow outgoing traffic
pass out on $ext_if proto tcp from any to any modulate state
pass out on $ext_if proto udp from any to any keep state

Ini adalah konfigurasi PF yang berfungsi. Ini relatif sederhana, tetapi ada beberapa kebiasaan yang harus dijelaskan juga.

Pertama, kami menentukan $ext_ifvariabel kami untuk vtnet0perangkat kami untuk digunakan nanti. Kami juga menetapkan alamat IP yang tidak valid yang harus dibuang pada antarmuka eksternal.

Kami juga mendefinisikan dua tabel, spamddan spamd-white- dua tabel ini dibuat oleh spamd dalam konfigurasi standarnya. Selain itu, kami mendefinisikan tabel bernama webmailyang akan kami gunakan untuk memungkinkan beberapa penyedia email web utama melaluinya.

Untuk melihat tabel, Anda bisa menggunakan perintah pfctl -t tablename -T showuntuk membuat daftar elemen dalam tabel.

Kami menetapkan beberapa aturan PF: lewati pemrosesan pada antarmuka lokal, aktifkan statistik pada antarmuka eksternal dan gosok paket yang masuk.

Berikutnya adalah salah satu bagian yang lebih penting, di mana kami mengelola pengiriman lalu lintas kami ke spamd atau OpenSMTPd.

Pertama adalah aturan redirect (perhatikan sintaks di sini, FreeBSD 11 menggunakan sintaks PF gaya lama (pra-OpenBSD 4.6) sehingga sintaksisnya mungkin terlihat aneh. Jika kami menerima sesuatu pada smtp dari host yang terdaftar dalam spamdtabel atau tidak terdaftar dalam yang spamd-whitemeja, kita mengarahkan koneksi melalui ke daemon spamd, yang berkaitan dengan koneksi ini. ketiga aturan berikutnya aturan passthrough sehingga kita benar-benar dapat menerima email. Kami melewati pesan dari IP yang tercantum dalam spamd-whitedan webmailtabel langsung melalui ke OpenSMTPd. Juga, kami menerima pesan pada port pengiriman ( 587).

Lalu ada beberapa aturan tata graha untuk menetapkan kebijakan default kami, dan menerima pesan SSH dan ICMP.

Kami kemudian melewati IMAP dan POP3 pada antarmuka eksternal kami untuk mengakses Dovecot.

Terakhir kami mengizinkan semua lalu lintas keluar. Jika Anda ingin menambahkan keamanan tambahan, Anda dapat membatasi port yang Anda lewati, tetapi untuk server sekali pakai, itu tidak masalah untuk melewatkan semuanya.

Mulai PF:

sudo service pf start

Sekarang setelah kita memiliki pengaturan firewall, kita dapat beralih ke konfigurasi server mail kita.

OpenSMTPd

OpenSMTPd memiliki sintaks konfigurasi yang sangat sederhana, dan mudah dibaca. Seluruh konfigurasi yang berfungsi dapat masuk ke dalam 14 baris, seperti yang Anda lihat di bawah:

#This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.

ext_if=vtnet0

# If you edit the file, you have to run "smtpctl update table aliases"
table aliases   file:/etc/mail/aliases
table domains   file:/etc/mail/domains

# Keys
pki mail.example.com key "/usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem"
pki mail.example.com certificate "/usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem"
# If you want to listen on multiple subdomains (e.g. mail.davidlenfesty) you have to add more lines
# of keys, and more lines of listeners

# Listen for local SMTP connections
listen on localhost hostname mail.example.com

# listen for filtered spamd connections
listen on lo0 port 10026

# Listen for submissions
listen on $ext_if port 587 tls-require auth pki mail.example.com tag SUBMITTED

# Accept mail from external sources.
accept from any for domain <domains> alias <aliases> deliver to maildir "~/mail"

accept for local alias <aliases> deliver to maildir "~/mail"
accept from local for any relay tls
accept tagged SUBMITTED for any relay tls

Pertama, kami mendefinisikan kembali antarmuka eksternal kami, serta beberapa tabel, alias, dan domain. Lalu kami beralih ke kunci SSL dan sertifikat untuk domain apa pun yang ingin kami tangani surat.

Di bagian selanjutnya, kita mendefinisikan antarmuka dan port yang ingin kita dengarkan. Pertama, kami mendengarkan di localhost untuk mail.example.comdomain kami , untuk koneksi lokal apa pun. Kemudian kami mendengarkan pesan kami yang difilter spamd dan mengirimkan pesan pada antarmuka eksternal. Terakhir, kami mendengarkan pengiriman, ini terjadi di pelabuhan 587dan kami meminta mereka untuk mengotentikasi, untuk alasan keamanan.

Terakhir adalah acceptpengaturan kami . Kami menerima pesan apa pun untuk domain kami yang ditentukan dalam domainstabel kami untuk alias di aliasestabel kami , untuk dikirim ke direktori home mereka dalam maildirformat. Kemudian kami menerima semua koneksi lokal untuk kotak surat lokal dan menyampaikan pesan kami, sehingga kami dapat mengirim email. Terakhir, kami menerima pesan yang kami kirimkan untuk disampaikan. Jika kami tidak memerlukan otentikasi untuk port pengiriman kami, ini akan menjadi bahaya keamanan besar. Ini akan membiarkan siapa saja menggunakan server kami sebagai relai spam.

Alias

FreeBSD dikirimkan dengan file alias default /etc/mail/aliasesdalam format berikut:

vuser1:  user1
vuser2:  user1
vuser3:  user1
vuser4:  user2

Ini menentukan kotak surat yang berbeda, dan tempat kami ingin meneruskan pesan yang dikirim ke kotak surat yang ditentukan ini. Kami dapat mendefinisikan pengguna kami sebagai pengguna sistem lokal atau kotak surat eksternal untuk diteruskan. File FreeBSD default cukup deskriptif sehingga Anda dapat merujuknya untuk referensi.

Domain

FreeBSD tidak menyediakan file domain default, tetapi ini sangat sederhana:

# Domains
example.com
mail.example.com
smtp.example.com

Ini hanya file teks biasa dengan setiap domain yang ingin Anda dengarkan di baris baru. Anda dapat membuat komentar menggunakan #simbol. File ini ada hanya agar Anda dapat menggunakan lebih sedikit garis konfigurasi.

Sertifikat SSL

Ada dua cara untuk dapat mengamankan komunikasi Anda dengan server surat Anda, sertifikat yang ditandatangani sendiri dan ditandatangani. Tentu saja memungkinkan untuk menandatangani sendiri sertifikat Anda, namun layanan seperti Let's Encrypt menyediakan penandatanganan gratis dan sangat mudah digunakan.

Pertama-tama kita harus menginstal program certbot.

sudo pkg install py-certbot

Atau, dapat diinstal dengan port:

cd /usr/ports/security/py-certbot
make install
make clean

Kemudian, untuk mendapatkan sertifikat Anda, Anda perlu memastikan Anda telah membuka port 80pada antarmuka eksternal Anda. Tambahkan baris berikut di suatu tempat dalam aturan pemfilteran Anda di /usr/local/etc/pf.conf:

pass quick on $ext_if from any to any port http

Kemudian jalankan pfctl -f /usr/local/etc/pf.confuntuk memuat ulang aturan tersebut.

Kemudian Anda dapat menjalankan perintah untuk domain yang Anda inginkan untuk mendapatkan sertifikat:

certbot certonly --standalone -d mail.example.com

Disarankan untuk membuat entri crontab agar berjalan certbot renewsekali setiap 6 bulan untuk memastikan sertifikat Anda tidak kedaluwarsa.

Kemudian untuk setiap domain yang relevan, Anda dapat memodifikasi baris untuk menunjuk ke file kunci yang benar:

pki mail.example.com key "/usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem"
pki mail.example.com certificate "/usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem"

Edit sekuritas:

sudo chmod 700 /usr/local/etc/letsencrypt/archive/mail.example.com/*

Catatan: Anda harus melakukan ini untuk setiap keyfile asli atau OpenSMTPd tidak akan membukanya.

Sekarang kita dapat memulai layanan:

sudo service smtpd start

Mengkonfigurasi spamd

Di sini kita menggunakan daemon spamd OpenBSD untuk mengurangi jumlah spam yang kita dapatkan dari internet. Pada dasarnya, ini menyaring pesan dari IP yang dikenal sebagai buruk dari berbagai sumber spam, dan juga (secara default) koneksi masuk "greylisting". Spamd juga mencoba untuk membuang timme spammer dengan "gagap" koneksi daftar hitam dan greylisted, yang berarti menyebar tanggapannya selama beberapa detik yang memaksa klien untuk tetap terbuka lebih lama dari biasanya.

Greylisting koneksi dilakukan ketika ada alamat IP baru yang menghubungkan yang tidak ada dalam daftar hitam atau daftar putih. Setelah alamat baru terhubung, spamd mengirim pesan dengan pesan kesalahan inocuous, kemudian menambahkannya ke daftar sementara. Karena spammer dibayar untuk pesan yang dikirim, mereka tidak akan mencoba lagi kesalahan, sedangkan layanan yang sah akan segera mencoba kembali.

Anda harus menjalankan yang berikut ini untuk memasang fdescfs:

mount -t fdescfs null /dev/fd

Maka Anda harus menambahkan baris ini ke /etc/fstab:

fdescfs     /dev/fd     fdescfs rw      0       0

File konfigurasi default (ditemukan dalam /usr/local/etc/spamd/spamd.conf.sample) akan berfungsi dengan baik. Anda dapat mengeditnya untuk menambahkan sumber baru atau mengubah sumber yang Anda gunakan:

sudo cp /usr/local/etc/spamd/spamd.conf.sample /usr/local/etc/spamd/spamd.conf

Kami dapat memulai layanan dengan yang berikut:

sudo service obspamd start

Pada titik ini, spamd sudah diatur.

Mengaktifkan Layanan Webmail

Satu masalah dengan pendekatan greylisting adalah bahwa layanan surat besar sering akan mengirim surat melalui salah satu dari banyak gulungan yang berbeda, dan Anda tidak dijamin mendapatkan server yang sama mengirim pesan setiap waktu. Salah satu solusi untuk ini adalah memasukkan daftar putih rentang IP yang digunakan oleh berbagai layanan webmail. Ini adalah apa tabel webmail digunakan untuk dalam konfigurasi PF. Strategi ini bisa menjadi bumerang jika Anda memasukkan alamat IP yang digunakan spammer, tetapi selama Anda berhati-hati dengan rentang apa yang Anda masukkan dalam tabel, Anda akan baik-baik saja.

Untuk menambahkan rentang email ke tabel webmail, Anda dapat menjalankan perintah berikut:

pfctl -t webmail -T add 192.0.2.0/24

Tempat perlindungan merpati

Jika Anda ingin pengguna mengakses email mereka tanpa masuk melalui SSH, Anda akan memerlukan MDA yang mendukung IMAP dan / atau POP3. Program yang sangat populer adalah Dovecot, dengan konfigurasi yang cukup sederhana dan fitur yang kuat.

Kami dapat menyalin dari konfigurasi default:

cd /usr/local/etc/dovecot
cp -R example-config/* ./

Konfigurasi ini terdiri dari beberapa file yang berbeda. Untuk melihat perbedaan antara konfigurasi Anda dan default dovecot, jalankan perintah di bawah ini:

sudo doveconf -n

Berikut ini adalah konfigurasi yang sederhana dan berfungsi:

# 2.3.2.1 (0719df592): /usr/local/etc/dovecot/dovecot.conf
# OS: FreeBSD 11.2-RELEASE amd64  
# Hostname: mail.example.com
hostname = mail.example.com
mail_location = maildir:~/mail
namespace inbox {
  inbox = yes
  location = 
  mailbox Archive {
    auto = create
    special_use = \Archive
  }
  mailbox Archives {
    auto = create
    special_use = \Archive
  }
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = create
    autoexpunge = 60 days
    special_use = \Junk
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox "Sent Mail" {
    auto = no
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    auto = no
    special_use = \Sent
  }
  mailbox Spam {
    auto = no
    special_use = \Junk
  }
  mailbox Trash {
    auto = no
    autoexpunge = 90 days
    special_use = \Trash
  }
  prefix = 
  separator = /
}
passdb {
  args = imap
  driver = pam
}
ssl = required
ssl_cert = </usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_dh = </usr/local/etc/dovecot/dh.pem
ssl_key = </usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem
userdb {
  driver = passwd
}

Sebagian besar file konfigurasi akan masuk conf.d

Yang penting adalah 10-auth.conf, 10-mail.conf, dan 10-ssl.conf.

Anda dapat mengonfigurasi berbagai kotak surat yang Anda gunakan 15-mailboxes.conf. Apa yang Anda lihat di atas adalah konfigurasi yang baik untuk banyak sistem, tetapi jarak tempuh Anda mungkin beragam. Dianjurkan Anda bermain-main dengan ini dengan sebanyak mungkin klien yang berbeda.

Autentikasi

Sebagian besar pengaturan standar akan benar. Jika Anda ingin menggunakan pengguna sistem untuk mengautentikasi, Anda harus mengedit 10-auth.conf.

Batalkan komentar pada baris berikut:

! termasuk auth-system.conf.ext

Enkripsi

Kita harus menghasilkan parameter Diffie-Hellman:

sudo nohup openssl dhparam -out /usr/local/etc/dovecot/dh.pem

Catatan: Ini akan membutuhkan waktu lama untuk dijalankan. Jauh lebih lama dari yang Anda harapkan.

Kita sekarang dapat memulai Dovecot:

sudo service dovecot start

Kesimpulan

Pada titik ini, kami memiliki server surat yang fungsional, aman, dan relatif bebas spam.

Beberapa hal lagi yang perlu dilihat dari sini adalah menggunakan SpamAssassin untuk secara heuristik menyingkirkan spam, serta menemukan lebih banyak spamd blacklist yang dikeluarkan oleh sumber yang Anda percayai.


Tags: #BSD #Email

Leave a Comment

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

6 Hal yang Sangat Menggila dari Nintendo Switch

6 Hal yang Sangat Menggila dari Nintendo Switch

Banyak dari Anda tahu Switch keluar pada Maret 2017 dan fitur-fitur barunya. Bagi yang belum tahu, kami sudah menyiapkan daftar fitur yang membuat 'Switch' menjadi 'gadget yang wajib dimiliki'.

Janji Teknologi Yang Masih Belum Ditepati

Janji Teknologi Yang Masih Belum Ditepati

Apakah Anda menunggu raksasa teknologi untuk memenuhi janji mereka? periksa apa yang belum terkirim.

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Baca blog untuk mengetahui berbagai lapisan dalam Arsitektur Big Data dan fungsinya dengan cara yang paling sederhana.

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Baca ini untuk mengetahui bagaimana Kecerdasan Buatan menjadi populer di antara perusahaan skala kecil dan bagaimana hal itu meningkatkan kemungkinan untuk membuat mereka tumbuh dan memberi keunggulan pada pesaing mereka.

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA telah berkembang cukup sulit bagi pengguna untuk dipecahkan dalam beberapa tahun terakhir. Apakah itu akan tetap efektif dalam deteksi spam dan bot di masa mendatang?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Saat Sains Berkembang dengan kecepatan tinggi, mengambil alih banyak upaya kita, risiko menundukkan diri kita pada Singularitas yang tidak dapat dijelaskan juga meningkat. Baca, apa arti singularitas bagi kita.

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Apa itu telemedicine, perawatan kesehatan jarak jauh dan dampaknya terhadap generasi mendatang? Apakah itu tempat yang bagus atau tidak dalam situasi pandemi? Baca blog untuk menemukan tampilan!

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Anda mungkin pernah mendengar bahwa peretas menghasilkan banyak uang, tetapi pernahkah Anda bertanya-tanya bagaimana cara mereka mendapatkan uang sebanyak itu? mari berdiskusi.

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Baru-baru ini Apple merilis macOS Catalina 10.15.4 pembaruan suplemen untuk memperbaiki masalah tetapi tampaknya pembaruan menyebabkan lebih banyak masalah yang mengarah ke bricking mesin mac. Baca artikel ini untuk mempelajari lebih lanjut