{"id":132,"date":"2025-12-20T05:09:57","date_gmt":"2025-12-20T05:09:57","guid":{"rendered":"https:\/\/blogs.giamkichsan.com\/?p=132"},"modified":"2025-12-21T01:31:37","modified_gmt":"2025-12-21T01:31:37","slug":"132","status":"publish","type":"post","link":"https:\/\/blogs.giamkichsan.com\/index.php\/2025\/12\/20\/132\/","title":{"rendered":"C\u00e0i \u0111\u1eb7t email server tr\u00ean Ubuntu"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\"><strong>B\u01b0\u1edbc 1: C\u00e0i \u0111\u1eb7t Postfix (n\u1ebfu ch\u01b0a c\u00f3)<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install postfix mailutils -y<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Khi c\u00e0i \u0111\u1eb7t:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ch\u1ecdn <code>Internet Site<\/code><\/li>\n\n\n\n<li>System mail name: <strong>mail.giamkichsan.com<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u0110\u00e2y l\u00e0 hostname mail server c\u1ee7a b\u1ea1n.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3\ufe0f\u20e3 Ki\u1ec3m tra hostname<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>hostnamectl set-hostname mail.giamkichsan.com\nhostname<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>mail.giamkichsan.com<\/code> ph\u1ea3i l\u00e0 hostname server.<\/li>\n\n\n\n<li>Ki\u1ec3m tra DNS A record: <code>mail.giamkichsan.com<\/code> tr\u1ecf t\u1edbi IP server c\u1ee7a b\u1ea1n.<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>B\u01b0\u1edbc 2: T\u1ea1o ho\u1eb7c d\u00f9ng ch\u1ee9ng ch\u1ec9 SSL\/TLS<\/strong><\/h3>\n\n\n\n<p>B\u1ea1n c\u00f3 th\u1ec3 d\u00f9ng <strong>Let&#8217;s Encrypt<\/strong> ho\u1eb7c ch\u1ee9ng ch\u1ec9 t\u1ef1 k\u00fd (self-signed).<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">A. Ch\u1ee9ng ch\u1ec9 Let&#8217;s Encrypt: Y\u00eau c\u1ea7u ch\u1ee9ng ch\u1ec9 s\u1eed d\u1ee5ng ch\u1ebf \u0111\u1ed9&nbsp;<code>--standalone<\/code>&nbsp;(y\u00eau c\u1ea7u t\u1ea1m d\u1eebng m\u00e1y ch\u1ee7 web n\u1ebfu \u0111ang ch\u1ea1y tr\u00ean c\u1ed5ng 80)<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install certbot\nsudo certbot certonly --standalone -d mail.giamkichsan.com<\/code><\/pre>\n\n\n\n<p>Ch\u1ee9ng ch\u1ec9 s\u1ebd n\u1eb1m \u1edf:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/etc\/letsencrypt\/live\/mail.giamkichsan.com\/fullchain.pem\n\/etc\/letsencrypt\/live\/mail.giamkichsan.com\/privkey.pem<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>B\u01b0\u1edbc 3: C\u1ea5u h\u00ecnh Postfix \u0111\u1ec3 d\u00f9ng SSL\/TLS<\/strong><\/h3>\n\n\n\n<p>M\u1edf file c\u1ea5u h\u00ecnh ch\u00ednh c\u1ee7a Postfix:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/postfix\/main.cf<\/code><\/pre>\n\n\n\n<p>Th\u00eam ho\u1eb7c s\u1eeda c\u00e1c d\u00f2ng sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Domain ch\u00ednh\nmyhostname = mail.giamkichsan.com\nmydomain = giamkichsan.com\nmyorigin = \/etc\/mailname\n\n# M\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n s\u1ebd g\u1eedi mail \u0111i t\u1eeb domain\ninet_interfaces = all\ninet_protocols = all\n\n# Mail \u0111\u1ecba ph\u01b0\u01a1ng\nmydestination = $myhostname, localhost.$mydomain, localhost, $mydomain\n\n# C\u00e1c m\u00e1y ch\u1ee7 m\u00e0 mail c\u1ee7a b\u1ea1n s\u1ebd relay\n#relayhost = \n\n# TLS (SSL)\nsmtp_tls_cert_file=\/etc\/letsencrypt\/live\/mail.giamkichsan.com\/fullchain.pem\nsmtp_tls_key_file=\/etc\/letsencrypt\/live\/mail.giamkichsan.com\/privkey.pem\nsmtp_use_tls=yes\nsmtp_tls_loglevel = 2\nsmtp_tls_security_level=may\nsmtp_tls_session_cache_database = btree:${data_directory}\/smtp_scache\n\n# TLS cho Postfix SMTPD (receiving)\nsmtpd_tls_cert_file = \/etc\/letsencrypt\/live\/mail.giamkichsan.com\/fullchain.pem\nsmtpd_tls_key_file = \/etc\/letsencrypt\/live\/mail.giamkichsan.com\/privkey.pem\nsmtpd_use_tls=yes\nsmtpd_tls_loglevel = 2\nsmtpd_tls_security_level = may\nsmtpd_tls_session_cache_database = btree:${data_directory}\/smtpd_scache\nsmtpd_tls_auth_only = yes\nsmtpd_recipient_restrictions = \n    permit_mynetworks,\n    permit_sasl_authenticated,\n    reject_unauth_destination\n\n# My networks (ch\u1ec9 m\u1ea1ng n\u1ed9i b\u1ed9 g\u1eedi mail)\n# mynetworks = 127.0.0.0\/8 &#91;::1]\/128<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>B\u01b0\u1edbc 4: B\u1eadt STARTTLS cho c\u1ed5ng SMTP<\/strong><\/h3>\n\n\n\n<p>Trong file <code>\/etc\/postfix\/master.cf<\/code>, \u0111\u1ea3m b\u1ea3o d\u00f2ng SMTPS (465) c\u00f3 STARTTLS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>smtps inet n       -       y       -       -       smtpd\n  -o syslog_name=postfix\/smtps\n  -o smtpd_tls_wrappermode=yes\n  -o smtpd_sasl_auth_enable=yes\n  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject<\/code><\/pre>\n\n\n\n<p>\u0110i\u1ec1u n\u00e0y cho ph\u00e9p c\u00e1c client k\u1ebft n\u1ed1i v\u00e0 n\u00e2ng c\u1ea5p l\u00ean TLS.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>B\u01b0\u1edbc 5: Ki\u1ec3m tra c\u1ea5u h\u00ecnh<\/strong><\/h2>\n\n\n\n<p>Ki\u1ec3m tra c\u1ea5u h\u00ecnh Postfix:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart postfix\nsudo systemctl status postfix\nsudo postfix check<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>B\u01b0\u1edbc 7: Ki\u1ec3m tra SSL\/TLS<\/strong><\/h3>\n\n\n\n<p>B\u1ea1n c\u00f3 th\u1ec3 d\u00f9ng <code>openssl<\/code> \u0111\u1ec3 ki\u1ec3m tra:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl s_client -connect mail.giamkichsan.com:465 -starttls smtp\n<\/code><\/pre>\n\n\n\n<p>N\u1ebfu th\u00e0nh c\u00f4ng, b\u1ea1n s\u1ebd th\u1ea5y th\u00f4ng tin ch\u1ee9ng ch\u1ec9 v\u00e0 k\u1ebft n\u1ed1i \u0111\u01b0\u1ee3c m\u00e3 h\u00f3a TLS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">B\u01b0\u1edbc 8:  C\u00e1ch gi\u1ea3i quy\u1ebft Gmail t\u1eeb ch\u1ed1i email v\u00ec domain <code>mail.giamkichsan.com<\/code> ch\u01b0a c\u00f3 SPF\/DKIM<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1a. C\u1ea5u h\u00ecnh SPF cho domain<\/h4>\n\n\n\n<p>\ud83d\udc49 V\u00e0o <strong>DNS c\u1ee7a giamkichsan.com<\/strong> ki\u1ec3m tra SPF<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dig txt giamkichsan.com<\/code><\/pre>\n\n\n\n<p>N\u1ebfu ch\u01b0a c\u00f3 th\u00ec add DNS record (TXT) cho <code>giamkichsan.com<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Type: TXT\nName: @\nValue:\nv=spf1 ip4:109.199.101.177 -all<\/code><\/pre>\n\n\n\n<p>L\u01b0u \u00fd:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>109.199.101.177<\/code> = IP VPS g\u1eedi mail<\/li>\n\n\n\n<li><code>-all<\/code> = ch\u1ec9 cho ph\u00e9p IP n\u00e0y g\u1eedi mail<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1b. SPF l\u00e0 g\u00ec<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SPF x\u00e1c th\u1ef1c <strong>IP n\u00e0o \u0111\u01b0\u1ee3c ph\u00e9p g\u1eedi mail thay domain<\/strong>.<\/li>\n\n\n\n<li>N\u00f3 ki\u1ec3m tra mail \u0111\u1ebfn t\u1eeb server h\u1ee3p l\u1ec7 hay kh\u00f4ng.<\/li>\n\n\n\n<li>SPF ch\u1ec9 d\u1ef1a tr\u00ean \u0111\u1ecba ch\u1ec9 g\u1eedi (envelope sender), kh\u00f4ng ki\u1ec3m tra n\u1ed9i dung.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2. C\u00e0i \u0111\u1eb7t DKIM (n\u1ebfu mu\u1ed1n t\u0103ng uy t\u00edn)<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">1\ufe0f\u20e3 C\u00e0i OpenDKIM<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install opendkim opendkim-tools -y<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2\ufe0f\u20e3 T\u1ea1o th\u01b0 m\u1ee5c l\u01b0u key DKIM<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/etc\/opendkim\/keys\/giamkichsan.com\nsudo chown -R opendkim:opendkim \/etc\/opendkim\nsudo chmod -R 700 \/etc\/opendkim<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3\ufe0f\u20e3 T\u1ea1o DKIM key<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/etc\/opendkim\/keys\/giamkichsan.com\nsudo opendkim-genkey -s mail -d giamkichsan.com\nsudo chown opendkim:opendkim mail.private\nsudo chmod 600 mail.private\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-s mail<\/code> \u2192 selector (b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ed5i t\u00ean)<\/li>\n\n\n\n<li><code>-d giamkichsan.com<\/code> \u2192 domain c\u1ee7a b\u1ea1n<\/li>\n\n\n\n<li>Sau khi ch\u1ea1y xong, b\u1ea1n s\u1ebd c\u00f3 2 file:<\/li>\n\n\n\n<li><code>mail.private<\/code> \u2192 private key<\/li>\n\n\n\n<li><code>mail.txt<\/code> \u2192 public key \u0111\u1ec3 th\u00eam v\u00e0o DNS<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4\ufe0f\u20e3 C\u1ea5u h\u00ecnh OpenDKIM<\/h4>\n\n\n\n<p>M\u1edf file <code>\/etc\/opendkim.conf<\/code> v\u00e0 ch\u1ec9nh \/ th\u00eam c\u00e1c d\u00f2ng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano <span style=\"background-color: initial; font-family: inherit; font-size: inherit; color: initial;\">\/etc\/opendkim.conf<\/span><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Phi\u00ean b\u1ea3n OpenDKIM\nSyslog                  yes\nUMask                   002\nUserID                  opendkim:opendkim\n\n# Th\u01b0 m\u1ee5c ch\u1ee9a key ri\u00eang\nKeyTable                \/etc\/opendkim\/KeyTable\nSigningTable            \/etc\/opendkim\/SigningTable\nExternalIgnoreList      \/etc\/opendkim\/TrustedHosts\nTrustedHosts            \/etc\/opendkim\/TrustedHosts\n\n# Ch\u1ebf \u0111\u1ed9 t\u1ef1 \u0111\u1ed9ng ch\u1ecdn selector n\u1ebfu c\u00f3 nhi\u1ec1u key\nAutoRestart             yes\nAutoRestartRate         10\/1h\nMode                    sv\nCanonicalization        relaxed\/simple\n\n##\nDomain                  giamkichsan.com\nSocket                  inet:12301@localhost \/\/ Chinh sua phu hop server<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">** T\u1ea1o c\u00e1c file h\u1ed7 tr\u1ee3<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">a) <code>KeyTable<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/opendkim\/KeyTable<\/code><\/pre>\n\n\n\n<p>Th\u00eam ho\u1eb7c s\u1eeda d\u00f2ng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#c\u00fa ph\u00e1p chu\u1ea9n: keyname  domain:selector:\/duong\/dan\/toi\/private.key\nmail._domainkey.giamkichsan.com giamkichsan.com:mail:\/etc\/opendkim\/keys\/giamkichsan.com\/mail.private\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>mail<\/code> l\u00e0 selector (c\u00f3 th\u1ec3 \u0111\u1eb7t t\u00f9y \u00fd)<\/li>\n\n\n\n<li>\u0110\u01b0\u1eddng d\u1eabn t\u1edbi <strong>private key<\/strong> c\u1ee7a b\u1ea1n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">b) <code>SigningTable<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/opendkim\/SigningTable<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*@giamkichsan.com mail._domainkey.giamkichsan.com\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ngh\u0129a l\u00e0 t\u1ea5t c\u1ea3 email t\u1eeb domain @<code>giamkichsan.com<\/code> s\u1ebd d\u00f9ng key <code>mail._domainkey.giamkichsan.com<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">c) <code>TrustedHosts<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/opendkim\/TrustedHosts<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>127.0.0.1\nlocalhost\ngiamkichsan.com\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">Ph\u00e2n quy\u1ec1n \u0111\u00fang (r\u1ea5t quan tr\u1ecdng)<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo chown opendkim:opendkim \/etc\/opendkim\/KeyTable\nsudo chown opendkim:opendkim \/etc\/opendkim\/SigningTable\nsudo chown opendkim:opendkim \/etc\/opendkim\/TrustedHosts\nsudo chmod 640 \/etc\/opendkim\/KeyTable\nsudo chmod 640 \/etc\/opendkim\/SigningTable\nsudo chmod 640 \/etc\/opendkim\/TrustedHosts<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u00e1c host n\u00e0y \u0111\u01b0\u1ee3c tin c\u1eady \u0111\u1ec3 g\u1eedi mail qua DKIM.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">5\ufe0f\u20e3 C\u1ea5u h\u00ecnh Postfix k\u1ebft n\u1ed1i OpenDKIM<\/h2>\n\n\n\n<p>Ch\u1ec9nh file <code>\/etc\/postfix\/main.cf<\/code>, th\u00eam:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/postfix\/main.cf<\/code><\/pre>\n\n\n\n<p>Th\u00eam n\u1ed9i dung d\u01b0\u1edbi v\u00e0o <strong>cu\u1ed1i file<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>milter_default_action = accept\nmilter_protocol = 6\nsmtpd_milters = inet:localhost:12301\nnon_smtpd_milters = $smtpd_milters\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6\ufe0f\u20e3 Kh\u1edfi \u0111\u1ed9ng OpenDKIM v\u00e0 Postfix<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable opendkim\nsudo systemctl restart opendkim\nsudo systemctl restart postfix\n<\/code><\/pre>\n\n\n\n<p>Ki\u1ec3m tra l\u1ed7i<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo journalctl -xeu opendkim.service | tail -50 \/\/N\u1ebfu l\u1ed7i opendkim.service\nsudo journalctl -u opendkim -xe\n\n\/\/Hoac chay debug neu van loi\nsudo opendkim -f -x \/etc\/opendkim.conf\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7\ufe0f\u20e3 Th\u00eam public DKIM v\u00e0o DNS<\/h2>\n\n\n\n<p>M\u1edf file <code>mail.txt<\/code> v\u1eeba t\u1ea1o, copy n\u1ed9i dung TXT record. V\u00ed d\u1ee5:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/opendkim\/keys\/giamkichsan.com\/mail.txt\nho\u1eb7c\nsudo cat \/etc\/opendkim\/keys\/giamkichsan.com\/mail.txt\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>mail._domainkey    IN    TXT    \"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GN...rest_of_key...\"\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>mail<\/code> \u2192 selector (<code>-s mail<\/code> l\u00fac t\u1ea1o key)<\/li>\n\n\n\n<li>Th\u00eam <strong>record TXT<\/strong> n\u00e0y v\u00e0o DNS c\u1ee7a domain <code>giamkichsan.com<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>L\u01b0u \u00fd:<\/strong> DNS c\u00f3 th\u1ec3 m\u1ea5t <strong>15\u201360 ph\u00fat<\/strong> \u0111\u1ec3 propagate.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8\ufe0f\u20e3 Test DKIM<\/h2>\n\n\n\n<p>Sau khi DNS update:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>opendkim-testkey -d giamkichsan.com -s mail -vvv<\/code><\/pre>\n\n\n\n<p>N\u1ebfu k\u1ebft qu\u1ea3 OK \u2192 DKIM \u0111\u00e3 ho\u1ea1t \u0111\u1ed9ng.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>   4 Test g\u1eedi mail<\/strong><\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"Test g\u1eedi mail qua Gmail relay\" | mail -s \"Test Mail $(date)\" duanvc2811@gmail.com<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>6\ufe0f\u20e3 Ki\u1ec3m tra mail queue \/ log<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>mailq # Mail c\u00f2n trong queue hay \u0111\u00e3 g\u1eedi\ntail -f \/var\/log\/mail.log \n&#91;hoac] sudo tail -f \/var\/log\/syslog | grep --color=auto -E \"postfix|DKIM|SPF|warning|error\"<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>N\u1ebfu mail g\u1eedi th\u00e0nh c\u00f4ng \u2192 <strong>ra kh\u1ecfi queue<\/strong>, Gmail nh\u1eadn ngay<\/li>\n\n\n\n<li>N\u1ebfu b\u1ecb l\u1ed7i \u2192 log s\u1ebd ch\u1ec9 ra ngay (th\u01b0\u1eddng l\u00e0 l\u1ed7i password ho\u1eb7c TLS)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Nguy\u00ean nh\u00e2n th\u01b0\u1eddng g\u1eb7p<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>File log <code>\/var\/log\/mail.log<\/code> <strong>b\u1ecb x\u00f3a, quy\u1ec1n sai ho\u1eb7c filesystem readonly<\/strong>.<\/li>\n\n\n\n<li>Rsyslog kh\u00f4ng c\u00f3 quy\u1ec1n ghi v\u00e0o th\u01b0 m\u1ee5c <code>\/var\/log<\/code>.<\/li>\n\n\n\n<li>M\u1ed9t s\u1ed1 h\u1ec7 th\u1ed1ng m\u1edbi Ubuntu d\u00f9ng <strong>systemd-journald<\/strong> \u0111\u1ec3 log thay v\u00ec file ri\u00eang cho mail, ho\u1eb7c rsyslog ch\u01b0a \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh \u0111\u1ec3 ghi mail.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00e1ch fix<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1\ufe0f\u20e3 T\u1ea1o l\u1ea1i file log v\u00e0 c\u1ea5p quy\u1ec1n<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo touch \/var\/log\/mail.log\nsudo chown syslog:adm \/var\/log\/mail.log\nsudo chmod 640 \/var\/log\/mail.log\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2\ufe0f\u20e3 Kh\u1edfi \u0111\u1ed9ng l\u1ea1i rsyslog<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart rsyslog\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3\ufe0f\u20e3 Kh\u1edfi \u0111\u1ed9ng l\u1ea1i Postfix<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart postfix\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4\ufe0f\u20e3 Ki\u1ec3m tra log realtime<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tail -f \/var\/log\/mail.log<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>B\u01b0\u1edbc 1: C\u00e0i \u0111\u1eb7t Postfix (n\u1ebfu ch\u01b0a c\u00f3) B\u01b0\u1edbc 2: T\u1ea1o ho\u1eb7c d\u00f9ng ch\u1ee9ng ch\u1ec9 SSL\/TLS B\u1ea1n c\u00f3 th\u1ec3 d\u00f9ng Let&#8217;s Encrypt ho\u1eb7c ch\u1ee9ng ch\u1ec9 <a class=\"mh-excerpt-more\" href=\"https:\/\/blogs.giamkichsan.com\/index.php\/2025\/12\/20\/132\/\" title=\"C\u00e0i \u0111\u1eb7t email server tr\u00ean Ubuntu\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-132","post","type-post","status-publish","format-standard","hentry","category-ubuntu-he-dieu-hanh"],"_links":{"self":[{"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/posts\/132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/comments?post=132"}],"version-history":[{"count":20,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/posts\/132\/revisions"}],"predecessor-version":[{"id":169,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/posts\/132\/revisions\/169"}],"wp:attachment":[{"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/media?parent=132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/categories?post=132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.giamkichsan.com\/index.php\/wp-json\/wp\/v2\/tags?post=132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}