เซิร์ฟเวอร์อีเมล OpenBSD ที่ใช้ OpenSMTPD, Dovecot, Rspamd และ RainLoop

บทนำ

บทช่วยสอนนี้แสดงให้เห็นถึงเซิร์ฟเวอร์อีเมลแบบเต็มรูปแบบที่ทำงานบน OpenBSD โดยใช้ OpenSMTPD, Dovecot, Rspamd และ RainLoop OpenSMTPD เป็นเซิร์ฟเวอร์อีเมลเริ่มต้นสำหรับ OpenBSD เลือกอินสแตนซ์ Vultr Compute Cloud ที่มีพื้นที่เก็บข้อมูลมากมายสำหรับจำนวนผู้ใช้ที่คาดหวัง

ขั้นตอนเบื้องต้น

ตั้งค่าบัญชีผู้ใช้ของคุณเพื่อทำงานเป็นรูท

su -
usermod -G wheel <username>
echo "permit nopass keepenv :wheel" > /etc/doas.conf
exit

ตั้งค่าที่เก็บแพ็กเกจสำหรับ OpenBSD

doas su
echo "https://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl
exit

เพิ่มแพ็คเกจที่จำเป็น

doas pkg_add opensmtpd-extras opensmtpd-filter-rspamd dovecot dovecot-pigeonhole rspamd redis

กำหนดค่า OpenSMTPD

ตามค่าเริ่มต้น OpenSMTPD จะฟังเฉพาะที่ localhost เท่านั้น ต้องกำหนดค่าอย่างชัดเจนเพื่อฟังบนอินเตอร์เฟสภายนอก ควรกำหนดค่าให้ใช้ผู้ใช้เสมือนแทนผู้ใช้ระบบเพื่อความปลอดภัย

สำรองข้อมูล/etc/smtpd.confไฟล์เริ่มต้นและสร้างใหม่ตั้งแต่เริ่มต้น

cd /etc/mail
mv smtpd.conf smtpd.conf.default

สร้างใหม่smtpd.confตามที่แสดงด้านล่าง แทนที่example.comด้วยโดเมนของคุณ การกำหนดค่าเริ่มต้นนี้ไม่เปิดใช้งานตัวกรอง rspamd ขณะทดสอบ OpenSMTP ตัวกรองสแปมจะเปิดใช้งานในภายหลัง

pki "mail" cert "/etc/ssl/mail.crt"
pki "mail" key "/etc/ssl/private/mail.key"

table aliases file:/etc/mail/aliases
table credentials passwd:/etc/mail/credentials
table virtuals file:/etc/mail/virtuals

filter "rspamd" proc-exec "/usr/local/libexec/smtpd/filter-rspamd"

# To accept external mail, replace with: listen on all

# listen on all tls pki "mail" hostname "mail.example.com"
listen on egress port submission tls-require pki "mail" hostname "mail.example.com" \
  auth <credentials>

action "local_mail" mbox alias <aliases>
action "domain_mail" maildir "/var/vmail/example.com/%{dest.user}" \
  virtual <virtuals>
action "outbound" relay

# Uncomment the following to accept external mail for domain "example.org"

# match from any for domain "example.com" action "domain_mail"
match from local for local action "local_mail"

match from local for any action "outbound"
match auth from any for any action "outbound"

สร้างไฟล์ / etc / หนังสือรับรอง

OpenSMTPD และ Dovecot สามารถแชร์ฐานข้อมูลการพิสูจน์ตัวตน ฐานข้อมูลนี้มีลักษณะคล้ายกับไฟล์รหัสผ่านระบบในรูปแบบโดยมีสองฟิลด์พิเศษสำหรับ Dovecot สองฟิลด์พิเศษกำหนดโฮมไดเร็กทอรีเสมือนและตำแหน่งเมล รหัสผ่านอยู่ในรูปแบบปักเป้า บทช่วยสอนนี้สร้างผู้ใช้ตัวอย่างสามคน

สร้างรหัสผ่านและต่อรหัสเข้ากับ/etc/mail/credentialsไฟล์

doas su
smtpctl encrypt example_password1 >> /etc/mail/credentials
smtpctl encrypt example_password2 >> /etc/mail/credentials
smtpctl encrypt example_password3 >> /etc/mail/credentials
exit

ผลลัพธ์มีลักษณะคล้ายกับสิ่งนี้:

$2b$10$agmNBPvFm1zqCjbbZC3JbO4Ns2jJNZQfTS45MAnKi.IPrkKITyTa6
$2b$10$LwkcKVVnwG8hDxu2W4YKD.K0kQ2oylOmQ9SBUb0hIopBsmNxYPb4e
$2b$10$bgLW/GMZyRXKbROgRQIvRu4xbeOqOJJXlgEAKuS5sIrBvfdPvEzeq

แก้ไข/etc/mail/credentialsเพื่อเพิ่มฟิลด์ที่จำเป็น แต่ละบรรทัดแผนที่ไปยังบัญชีระบบVmailกับ UID และ GID ของ2000 แทนที่ example.com ด้วยโดเมนของคุณ ชื่อผู้ใช้เสมือนคือที่อยู่อีเมลที่สมบูรณ์

[email protected]:$2b$10$agmNBPvFm1zqCjbbZC3JbO4Ns2jJNZQfTS45MAnKi.IPrkKITyTa6:vmail:2000:2000:/var/vmail/example.com/john::userdb_mail=maildir:/var/vmail/example.com/john
[email protected]:$2b$10$LwkcKVVnwG8hDxu2W4YKD.K0kQ2oylOmQ9SBUb0hIopBsmNxYPb4e:vmail:2000:2000:/var/vmail/example.com/adam::userdb_mail=maildir:/var/vmail/example.com/adam
[email protected]:$2b$10$bgLW/GMZyRXKbROgRQIvRu4xbeOqOJJXlgEAKuS5sIrBvfdPvEzeq:vmail:2000:2000:/var/vmail/example.com/natalie::userdb_mail=maildir:/var/vmail/example.com/natalie

สร้างบัญชีเมลเสมือนและตั้งค่าความปลอดภัย

  • ตั้งค่าการ/etc/mail/credentialsอนุญาตให้เป็นแบบอ่านอย่างเดียวสำหรับ_smtpdและ_dovecotผู้ใช้ระบบ
  • สร้างvmailผู้ใช้ระบบกลุ่มและโฮมไดเรกทอรี

    • เมื่อคุณสร้างผู้ใช้ระบบ Vmail useradd: Warning: home directory '/var/vmail' doesn't exist, and -m was not specifiedที่คุณจะได้รับการแจ้งเตือนต่อไปนี้: คาดว่าจะเป็นแบบนี้ หลีกเลี่ยงนี้เกะกะไดเรกทอรีที่มีไฟล์ dot /etc/skelจาก ไม่จำเป็นเนื่องจากบัญชี vmail ไม่อนุญาตให้ลงชื่อเข้าใช้

      doas chmod 0440 / etc / mail / credentials doas chown smtpd: dovecot / etc / mail / หนังสือรับรอง doas useradd -c "บัญชีเมลเสมือน" -d / var / vmail -s / sbin nologin -u 2000 -g = uid -l พนักงาน vmail doas mkdir / var / vmail doas chown vmail: vmail / var / vmail

สร้างการแมปผู้ใช้เสมือน

สร้าง/etc/mail/virtualsเพื่อกำหนดที่อยู่อีเมลที่ถูกต้อง

สร้างคีย์สาธารณะ / ส่วนตัวสำหรับ OpenSMTPD

ตัวอย่างนี้ใช้ใบรับรองแบบลงนามด้วยตนเอง ใช้ใบรับรองที่ลงชื่อที่ถูกต้องหากคุณมี เมื่อได้รับพร้อมต์สำหรับชื่อสามัญตรวจสอบให้แน่ใจว่าตรงกับ FQDN ของเซิร์ฟเวอร์ ตัวอย่างนี้ใช้ mail.example.com

doas su
cd /etc/ssl
openssl genrsa -out private/mail.key 4096
openssl req -x509 -new -nodes -key private/mail.key -out mail.crt -days 3650 -sha256
chmod 0400 /etc/ssl/private/mail.key
exit

ทดสอบเซิร์ฟเวอร์

ใช้ตัวตรวจสอบไวยากรณ์การกำหนดค่า OpenSMTPD หากไม่พบปัญหาให้รีสตาร์ท smtpd daemon

doas smtpd -n
doas rcctl restart smtpd

จากบัญชีอีเมลภายนอกให้ส่งอีเมลทดสอบไปยังผู้ใช้คนใดคนหนึ่ง

  • OpenSMTPD จะสร้างโครงสร้างของโฟลเดอร์ Maildir ด้านล่างและส่งจดหมายไปยัง/var/vmail/var/vmail/example.com/<username>/new
  • 1576339842.4d64757b.example.com:2,ในฐานะที่เป็นผู้ใช้รากเรียกดูไปยังสถานที่แห่งนี้และยืนยันได้ว่าคุณมีไฟล์ชื่อที่คล้ายกันนี้:
  • ตรวจสอบเนื้อหาของไฟล์รวมถึงส่วนหัวจดหมายทั้งหมดเพื่อตรวจสอบว่าการส่งอีเมลทำงานได้อย่างถูกต้อง

    Return-Path: <n0244e80da3-54b1ed125c5342fc-adam===example.org@bounce.example.org>
    Delivered-To: [email protected]
    Received: from spruce-goose-ba.twitter.com (spruce-goose-ba.twitter.com [199.59.150.96])
        by mail.example.com (OpenSMTPD) with ESMTPS id 75b514d3 (TLSv1.2:ECDHE-RSA-AES256-GCM-    SHA384:256:NO)
        for <[email protected]>;
        Sat, 14 Dec 2019 11:10:40 -0500 (EST)
    DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=twitter.com;
        s=dkim-201406; t=1576339839;
        bh=jhKB5/w9v87GaXSuizT576ntJ/72gvLRDhsqmGQQrCE=;
        h=Date:From:To:Subject:MIME-Version:Content-Type:List-Unsubscribe:
        Message-ID;
        b=TWn/QVUJ1VDlWiweWoanwHLABCL1nqmm0+TBzh3PjmYNm0quRMXB7QL2ykzHGME5A
        DTz/JFHa0cOvQsrdhxxbjOLFKimK0nF+Ou5kI+2HzTzfVNZS0qGnTVP/tZyaIsWjjl
        an5EiR6HFOHG4iClOOEOJW4oLDEZfPTefrlW+378bmHGIRUNDvVKrbXKunL9fJFAb3
        JSrhWQNwbrF/aARFzw4nKfb1I7vTRSrN1eXE5JxzGwI2XAjqDIWdR5ExwUNbJH5ZPs
        wQ85j8KLZEEgQkbH9CypgeUMJWsVK95FqOCCaqKMS10M7intGMb3aeiiFcB7yDHi9t
        u7rVESm4eGp/g==
    X-MSFBL: DM7pSZns+YDRgNEmGNre9aPjZTtc1tDlN97w5rQDBts=|eyJ1IjoibWF0dEBnb2J
        sYWNrY2F0LmNvbUBpaWQjIzU0YjFlZDEyNWM1MzQyZmNiNThiMzVmNzI0NDZlMGF
        mQHVzYiMjNkAyNDRAMTA4MjgwNTAxMDYzNzk1MDk3NkAwQDA4MjY5ZWI4OTI3YzR
        kNTFiNTZkMjY3YzY2OGRmN2IwY2Y4M2ExZGIiLCJyIjoibWF0dEBnb2JsYWNrY2F
        0LmNvbSIsImciOiJCdWxrIiwiYiI6InNtZjEtYmd4LTM0LXNyMS1CdWxrLjE4NiJ
        9
    Date: Sat, 14 Dec 2019 16:10:39 +0000
    ...
    

กำหนดค่า Dovecot IMAP

ตั้งค่าคลาสเข้าสู่ระบบ

Dovecot ต้องการความสามารถในการเปิดไฟล์จำนวนมากขึ้นสำหรับการอ่านและการเขียนมากกว่าคลาสเริ่มต้นที่อนุญาต การไม่ทำเช่นนี้จะทำให้เกิดข้อผิดพลาดที่แก้ไขได้ยาก

กำหนดคลาสล็อกอินสำหรับ Dovecot daemon ที่ด้านล่างของ/etc/login.confเพิ่มบรรทัดต่อไปนี้

    dovecot:\
        :openfiles-cur=1024:\
        :openfiles-max=2048:\
        :tc=daemon:    

สร้างไฟล์การกำหนดค่า Dovecot

/etc/dovecot/local.confสร้าง

auth_mechanisms = plain
first_valid_uid = 2000
first_valid_gid = 2000
mail_location = maildir:/var/vmail/%d/%n
mail_plugin_dir = /usr/local/lib/dovecot
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex  imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapsieve vnd.dovecot.imapsieve
mbox_write_locks = fcntl
mmap_disable = yes
namespace inbox {
  inbox = yes
  location =
  mailbox Archive {
  auto = subscribe
  special_use = \Archive
  }
  mailbox Drafts {
  auto = subscribe
  special_use = \Drafts
  }
  mailbox Junk {
  auto = subscribe
  special_use = \Junk
  }
  mailbox Sent {
  auto = subscribe
  special_use = \Sent
  }
  mailbox Trash {
  auto = subscribe
  special_use = \Trash
  }
  prefix =
}
passdb {
  args = scheme=CRYPT username_format=%u /etc/mail/credentials
  driver = passwd-file
  name =
}
plugin {
  imapsieve_mailbox1_before = file:/usr/local/lib/dovecot/sieve/report-spam.sieve
  imapsieve_mailbox1_causes = COPY
  imapsieve_mailbox1_name = Junk
  imapsieve_mailbox2_before = file:/usr/local/lib/dovecot/sieve/report-ham.sieve
  imapsieve_mailbox2_causes = COPY
  imapsieve_mailbox2_from = Junk
  imapsieve_mailbox2_name = *
  sieve = file:~/sieve;active=~/.dovecot.sieve
  sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment
  sieve_pipe_bin_dir = /usr/local/lib/dovecot/sieve
  sieve_plugins = sieve_imapsieve sieve_extprograms
}
protocols = imap sieve
service imap-login {
  inet_listener imaps {
  port = 0
  }
}
service managesieve-login {
  inet_listener sieve {
  port = 4190
  }
  inet_listener sieve_deprecated {
  port = 2000
  }
}
ssl_cert = </etc/ssl/mail.crt
ssl_key = </etc/ssl/private/mail.key
userdb {
  args = username_format=%u /etc/mail/credentials
  driver = passwd-file
  name =
}
protocol imap {
  mail_plugins = " imap_sieve"
}

แก้ไขข้อบกพร่อง Dovecot

มีข้อผิดพลาดใน Dovecot ที่ssl_certและssl_keyการตั้งค่าไม่ถูกแทนที่ในlocal.confไฟล์ดังนั้นเราจึงต้องแสดงความคิดเห็นออก หากคุณพลาดขั้นตอนนี้ Dovecot จะล้มเหลวในการเริ่มต้นอย่างถูกต้อง

แก้ไข/etc/dovecot/conf.d/10-ssl.confตามที่แสดง

...
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert = </etc/ssl/dovecotcert.pem
#ssl_key = </etc/ssl/private/dovecot.pem
...

สร้างสคริปต์ Sieve

สคริปต์ตะแกรงฝึก Rspamd บนสแปมและแฮม การย้ายอีเมลเข้าและออกจากโฟลเดอร์ขยะจะทำให้เกิดเหตุการณ์ในการฝึกอบรม Rspamd

/usr/local/lib/dovecot/sieveไฟล์เหล่านี้จะตั้งอยู่ที่

สร้างreport-ham.sieveไฟล์

require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];

if environment :matches "imap.mailbox" "*" {
  set "mailbox" "${1}";
}

if string "${mailbox}" "Trash" {
  stop;
}

if environment :matches "imap.user" "*" {
  set "username" "${1}";
}

pipe :copy "sa-learn-ham.sh" [ "${username}" ];

สร้างreport-spam.sieveไฟล์

require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];

if environment :matches "imap.user" "*" {
  set "username" "${1}";
}

pipe :copy "sa-learn-spam.sh" [ "${username}" ];

รวบรวมไฟล์

sievec report-ham.sieve
sievec report-spam.sieve 

สร้างเชลล์สคริปต์สองตัวต่อไปนี้ใน /usr/local/lib/dovecot/sieve

เพิ่มรายการต่อไปนี้เพื่อ sa-learn-ham.sh

#!/bin/sh
exec /usr/local/bin/rspamc -d "${1}" learn_ham

เพิ่มรายการต่อไปนี้เพื่อ sa-learn-spam.sh

#!/bin/sh
exec /usr/local/bin/rspamc -d "${1}" learn_spam

ทำให้ไฟล์ปฏิบัติการได้

chmod 0755 sa-learn-ham.sh
chmod 0755 sa-learn-spam.sh

เปิดใช้งานและเริ่ม Dovecot

rcctl enable dovecot
rcctl start dovecot

ตรวจสอบว่า Dovecot เริ่มต้นอย่างถูกต้อง

ps ax | grep dovecot

88005 ??  I        0:00.11 /usr/local/sbin/dovecot
69640 ??  I        0:00.03 dovecot/anvil
91207 ??  I        0:00.03 dovecot/log
98178 ??  I        0:00.19 dovecot/config
34712 ??  I        0:00.06 dovecot/stats
96674 ??  I        0:00.03 dovecot/imap-login
 8891 ??  S        0:00.02 dovecot/imap

ตรวจสอบว่า Dovecot สามารถอ่านได้อย่างถูกต้อง /etc/mail/credentials

doveadm user [email protected]

field    value
uid      2000
gid      2000
home /var/vmail/example.com/john
mail maildir:/var/vmail/example.com/john

ตรวจสอบว่าผู้ใช้จดหมายสามารถเข้าสู่ระบบ

doveadm auth login [email protected]

Password: ********
passdb: [email protected] auth succeeded
extra fields:
  [email protected]

userdb extra fields:
  [email protected]
  mail=maildir:/var/vmail/example.com/john
  uid=2000
  gid=2000
  home=/var/vmail/example.com/john
  auth_mech=PLAIN

ตั้งค่า Rspamd

นี่คือการกำหนดค่าพื้นฐาน Rspamd อ้างอิงเอกสารทางการสำหรับรายละเอียดเพิ่มเติม ตัวอย่างนี้สร้างคำนิยามสำหรับโดเมนของเราเพื่อเปิดใช้งานการลงนาม DKIM

สร้างพับบลิคสาธารณะ / ส่วนตัวใน/etc/mail/dkimและตั้งค่าการอนุญาตที่ถูกต้อง

doas su
mkdir /etc/mail/dkim
cd /etc/mail/dkim
openssl genrsa -out private.key 1024
openssl rsa -in private.key -pubout -out public.key
chmod 0440 private.key
chown root:_rspamd private.key

สร้างระเบียน DNS สำหรับ DKIM ที่มีรหัสสาธารณะ อ้างถึงผู้ให้บริการ DNS ของคุณสำหรับรายละเอียดวิธีสร้างระเบียน DKIM คัดลอกเนื้อหาจาก/etc/mail/dkim/public.keyและวางไว้หลังp=ส่วนของระเบียน DKIM ดังที่แสดงด้านล่าง หมายเหตุตัวอย่างนี้ยังสร้างระเบียน SPF

default._domainkey.example.com. IN TXT "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClcuK3FV3Ug64li8iFsuJ2ykgb7FMZsujk9uG79ppPUp57vCfjzO7F+HBfx5qIwvlGxv2IJXK86FZwhpUX+HFCDUtfB2z0ZNGerWcZfNzM1w1Bru/fdMd2tCYkiHEa5RWIkLfs/Fm+neXxRZfAG2UDWmAghNbgzYv7xViwgufDIQIDAQAB"
example.com. IN TXT "v=spf1 a ip4:192.0.2.1 mx ~all"

สร้างระเบียน DMARC

_dmarc.example.com. IN TXT "v=DMARC1;p=none;pct=100;rua=mailto:[email protected]"

สร้าง/etc/rspamd/local.d/dkim_signing.confไฟล์กำหนดค่า

  • selector="default";สายมาจากส่วนแรกของการบันทึก DKIM DNS ( default._domainkey....) สร้างขึ้น

    domain {
        example.com {
            path = "/etc/mail/dkim/example.com.key";
            selector = "default";
        }
    }
    

เปิดใช้งานและเริ่ม Rspamd

doas rcctl enable redis rspamd
doas rcctl start redis rspamd

เปลี่ยนบรรทัดด้านล่าง/etc/mail/smtpd.confและรีสตาร์ท OpenSMTPD เพื่อเปิดใช้งาน Rspamd

...
listen on all tls pki "mail" hostname "mail.example.com" filter "rspamd"
listen on egress port submission tls-require pki "mail" hostname "mail.example.com" \
  auth <credentials> filter "rspamd"
...
rcctl restart smtpd

ทดสอบเซิร์ฟเวอร์อีเมลด้วยไคลเอนต์อีเมล POP3 หรือ IMAP หากคุณไม่ต้องการใช้เว็บเมลให้หยุดที่นี่

(ไม่บังคับ) กำหนดค่าเว็บเมล RainLoop

ติดตั้งแพคเกจข้อกำหนดเบื้องต้น

เมื่อได้รับแจ้งโปรดเลือก PHP เวอร์ชันล่าสุด

pkg_add php php-curl php-pdo_sqlite php-zip pecl73-mcrypt zip unzip wget curl

เรียก RainLoop เว็บเมล tarball /var/www/htdocs/และแยกไป

ใช้ Standard Edition ซึ่งรวมถึงตัวอัปเดตอัตโนมัติ

cd /tmp
wget https://www.rainloop.net/repository/webmail/rainloop-latest.zip
unzip rainloop-latest.zip -d /var/www/htdocs/rainloop
chown -R www:www /var/www/htdocs

สร้าง Let's Encrypt SSL Certificate

  • คัดลอก/etc/examples/acme-client.confไปยัง/etc
  • เพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์:

    domain webmail.example.com {
    domain key "/etc/ssl/private/webmail.example.com.key"
    domain full chain certificate "/etc/ssl/webmail.example.com.crt"
    sign with letsencrypt
    }
    

กำหนดค่า httpd

  • สร้างรายการ DNS (ระเบียน CNAME หรือ A) สำหรับโดเมนย่อย webmail.example.com
  • แก้ไข/etc/httpd.confตามตัวอย่างด้านล่าง

    prefork 3
    types { include "/usr/share/misc/mime.types" }
    
    server "default" {
        listen on egress port 80 
        root "/htdocs"
        directory index index.html
    
        location "/.well-known/acme-challenge/*" {
                root "/acme"
                request strip 2
        }
    }
    

รันการตรวจสอบไวยากรณ์ httpd

httpd -n

เปิดใช้งานและเริ่ม httpd

rcctl enable httpd
rcctl start httpd

ขอใบรับรองการเข้ารหัสของ Let's

acme-client -v webmail.example.com

เพิ่มคำจำกัดความเซิร์ฟเวอร์สำหรับ RainLoop /etc/httpd.conf

server "webmail.example.com" {
    listen on egress port 80
    block return 302 "https://$SERVER_NAME$REQUEST_URI"
}

server "webmail.example.com" {
    listen on egress tls port 443
    root "/htdocs/rainloop"
    directory index "index.php"

    tcp { nodelay, backlog 10 }

    tls {
            certificate "/etc/ssl/webmail.example.com.crt"
            key "/etc/ssl/private/webmail.example.com.key"
    }

    hsts {
            max-age 31556952
            preload
    }

    # Value below is 25MB in bytes. 1MB = 1048576 bytes
    connection max request body 26214400

    location "/data*" {
            block return 403
    }

    location "*.php*" {
            fastcgi socket "/run/php-fpm.sock"
    }
}

กำหนดค่า PHP เพื่อให้สามารถแนบได้สูงสุด 25 เมกะไบต์ ทำการเปลี่ยนแปลงต่อไปนี้ใน/etc/php-7.3.ini:

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 25M
...
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 29M

เปิดใช้งานโมดูล PHP ที่จำเป็นโดยการคัดลอกไฟล์กำหนดค่าไปที่ /etc/php-7.3/

cp /etc/php-7.3.sample/* /etc/php-7.3/.

ตรวจสอบไวยากรณ์ของ /etc/httpd.conf

httpd -n

เปิดใช้งานและเริ่มต้น httpd และ php-fpm

rcctl reload httpd
rcctl enable php73_fpm
rcctl start php73_fpm

สอบปลายภาค

https://webmail.example.com/?adminเรียกดูเพื่อ

ชื่อผู้ใช้เริ่มต้นคือ: ผู้ดูแลระบบ
รหัสผ่านเริ่มต้นคือ: 12345

เรียกดูแต่ละส่วนการกำหนดค่าและทำการเปลี่ยนแปลงที่คุณต้องการ เมื่อคุณตั้งค่าเสร็จแล้วให้เข้าสู่เว็บเมลที่https://webmail.example.com



Leave a Comment

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

เรียนรู้วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7; ระบบการจัดการเนื้อหา Headless ที่มีความยืดหยุ่นสูงและปลอดภัย

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

เรียนรู้วิธีการตั้งค่า Nginx บน Ubuntu สำหรับการสตรีมวิดีโอสด HLS ด้วยคำแนะนำที่ชัดเจนและเป็นประโยชน์

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

เรียนรู้การใช้ Percona XtraBackup สำหรับการสำรองข้อมูลด้วยวิธีที่เป็นระบบและง่ายดายบน WordPress ออนไลน์ของคุณ

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS ซึ่งเป็นโอเพ่นซอร์สและระบบปฏิบัติการฟรีพร้อมเวอร์ชันล่าสุดแล้ว สามารถตอบสนองความต้องการของผู้ใช้ Windows ยุคใหม่และล้ม Microsoft ได้หรือไม่? มาหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบเก่านี้ แต่เป็นประสบการณ์ OS ที่ใหม่กว่ากัน

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

การโจมตีของ Ransomware กำลังเพิ่มขึ้น แต่ AI สามารถช่วยจัดการกับไวรัสคอมพิวเตอร์ตัวล่าสุดได้หรือไม่? AI คือคำตอบ? อ่านที่นี่รู้ว่า AI boone หรือ bane

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

ในที่สุด Whatsapp ก็เปิดตัวแอพเดสก์ท็อปสำหรับผู้ใช้ Mac และ Windows ตอนนี้คุณสามารถเข้าถึง Whatsapp จาก Windows หรือ Mac ได้อย่างง่ายดาย ใช้ได้กับ Windows 8+ และ Mac OS 10.9+

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

อ่านข้อมูลนี้เพื่อทราบว่าปัญญาประดิษฐ์กำลังได้รับความนิยมในหมู่บริษัทขนาดเล็กอย่างไร และเพิ่มโอกาสในการทำให้พวกเขาเติบโตและทำให้คู่แข่งได้เปรียบ

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

เมื่อเร็ว ๆ นี้ Apple เปิดตัว macOS Catalina 10.15.4 การอัปเดตเสริมเพื่อแก้ไขปัญหา แต่ดูเหมือนว่าการอัปเดตทำให้เกิดปัญหามากขึ้นที่นำไปสู่การสร้างเครื่อง Mac อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติม

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

คอมพิวเตอร์ของเราจัดเก็บข้อมูลทั้งหมดในลักษณะที่เรียกว่าระบบไฟล์บันทึก เป็นวิธีการที่มีประสิทธิภาพที่ช่วยให้คอมพิวเตอร์สามารถค้นหาและแสดงไฟล์ได้ทันทีที่คุณกดค้นหาhttps://wethegeek.com/?p=94116&preview=true