Đăng bởi Để lại phản hồi

Các câu lệnh trong git

  1. CHI TIẾT từng bước REVERT cho trường hợp đã merge và đã push lên GitHub server

🔹 Bước 1: Checkout vào branch đã bị merge

Ví dụ merge vào main:

git checkout main
git pull

📌 Đảm bảo bạn đang ở branch đúngcode mới nhất


🔹 Bước 2: Tìm merge commit

git log --oneline

Bạn sẽ thấy dạng như:

a1b2c3d Merge branch 'feature/login' into main

👉 Copy hash (a1b2c3d)


🔹 Bước 3: Revert merge commit

git revert -m 1 a1b2c3d

📌 Giải thích -m 1

  • 1 = giữ branch main
  • undo toàn bộ thay đổi từ branch được merge vào

⚠️ BẮT BUỘC phải có -m khi revert merge


🔹 Bước 4: Resolve conflict (nếu có)

Nếu Git báo conflict:

git status
  • Mở file bị conflict
  • Sửa
  • Sau đó:
git add .
git revert --continue

🔹 Bước 5: Push lên GitHub

git push

🎉 Xong! Merge đã được undo an toàn


✅ Kết quả bạn sẽ thấy

  • GitHub có commit mới dạng: Revert "Merge branch 'feature/login' into main"
  • Code quay về trạng thái trước khi merge
  • Lịch sử vẫn rõ ràng 👌

🟢 Cách khác (nếu merge bằng Pull Request)

👉 Vào Pull Request đã merge
👉 Bấm Revert
👉 GitHub tự tạo PR undo

✔️ Không cần terminal
✔️ Rất an toàn

Đăng bởi Để lại phản hồi

[GIT] HƯỚNG DẪN CLONE GITHUB PRIVATE REPO BẰNG SSH

🧩 Bước 1: Kiểm tra máy đã có SSH key chưa

Mở Terminal / Git Bash và gõ:

ls ~/.ssh

Nếu bạn thấy một trong các file sau:

  • id_rsa & id_rsa.pub
  • hoặc id_ed25519 & id_ed25519.pub

👉 Bỏ qua Bước 2, sang Bước 3.

Nếu không có hoặc báo lỗi → làm tiếp Bước 2.


🔑 Bước 2: Tạo SSH key mới

Gõ lệnh:

ssh-keygen -t ed25519 -C "email_github_cua_ban@example.com"

Nếu máy quá cũ không hỗ trợ ed25519, dùng:

ssh-keygen -t rsa -b 4096 -C "email_github_cua_ban@example.com"

Khi được hỏi:

Enter file in which to save the key:

👉 Nhấn Enter (dùng đường dẫn mặc định)

Enter passphrase:

👉 Có thể:

  • Nhấn Enter (không mật khẩu)
  • Hoặc nhập mật khẩu (bảo mật hơn)

📋 Bước 3: Copy SSH public key

Gõ:

cat ~/.ssh/id_ed25519.pub

(hoặc id_rsa.pub nếu dùng RSA)

→ Copy toàn bộ dòng (bắt đầu bằng ssh-ed25519)


🌐 Bước 4: Add SSH key lên GitHub

  1. Vào GitHub → Settings
  2. Chọn SSH and GPG keys
  3. Bấm New SSH key
  4. Dán public key vào ô Key
  5. Title: ví dụ My Laptop
  6. Bấm Add SSH key

🧪 Bước 5: Kiểm tra kết nối SSH

Gõ:

ssh -T git@github.com

Lần đầu sẽ hỏi:

Are you sure you want to continue connecting (yes/no)?

👉 Gõ yes

Nếu thành công sẽ thấy:

Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

📥 Bước 6: Clone repository private

Vào repo trên GitHub → bấm Code → SSH → copy link dạng:

git@github.com:USERNAME/REPOSITORY.git

Clone:

git clone git@github.com:USERNAME/REPOSITORY.git

🎉 Xong! Repo private đã được clone về máy


❗ Lỗi thường gặp & cách xử lý

❌ Permission denied (publickey)

Permission denied (publickey).

👉 Nguyên nhân:

  • Chưa add SSH key lên GitHub
  • Clone nhầm link HTTPS

👉 Kiểm tra:

ssh-add ~/.ssh/id_ed25519

❌ Clone nhầm HTTPS

❌ Sai:

https://github.com/...

✅ Đúng:

git@github.com:...

🔥 Mẹo hay

Có thể dùng nhiều GitHub account bằng nhiều SSH key

1 máy = 1 SSH key

Dùng SSH thì push/pull không cần đăng nhập

Đăng bởi Để lại phản hồi

Ok 👍 mình hướng dẫn bạn cấu hình Postfix port 587 (submission) ĐÚNG CHUẨN, từng bước, áp dụng cho Postfix (Ubuntu) như server của bạn.

Mục tiêu sau khi xong:

  • Port 587
  • STARTTLS
  • SMTP AUTH
  • Dùng được với MailKit / .NET

🎯 MỤC TIÊU KỸ THUẬT

Postfix sẽ:

  • Lắng nghe 587
  • Bật STARTTLS
  • Cho phép AUTH LOGIN / PLAIN
  • Chỉ cho user đã auth gửi mail

1️⃣ KIỂM TRA POSTFIX ĐANG LẮNG NGHE PORT 587 CHƯA

sudo netstat -plnt | grep :587

Nếu KHÔNG thấy → cần cấu hình
Nếu nhưng chưa auth → vẫn phải chỉnh


2️⃣ SỬA FILE master.cf (QUAN TRỌNG NHẤT)

Mở file:

sudo nano /etc/postfix/master.cf

Tìm (hoặc thêm) TOÀN BỘ KHỐI DƯỚI ĐÂY
👉 NHỚ bỏ dấu # nếu đang bị comment

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

📌 Ý nghĩa:

  • submission = port 587
  • tls_security_level=encrypt → BẮT BUỘC STARTTLS
  • sasl_auth_enable=yes → cho AUTH
  • permit_sasl_authenticated → chỉ user auth mới gửi

3️⃣ CẤU HÌNH SASL (AUTH) – BẮT BUỘC

Mở file:

sudo nano /etc/postfix/main.cf

Thêm hoặc đảm bảo có:

# TLS
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.giamkichsan.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.giamkichsan.com/privkey.pem
smtpd_tls_security_level=may
smtpd_tls_loglevel=1

# SASL AUTH
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes

📌 Postfix KHÔNG tự auth → nó dùng Dovecot


4️⃣ CẤU HÌNH DOVECOT (NẾU CHƯA CÓ)

Kiểm tra dovecot:

systemctl status dovecot

Nếu chưa có:

sudo apt install dovecot-core dovecot-imapd -y

Sửa file:

sudo nano /etc/dovecot/conf.d/10-master.conf

Tìm block:

service auth {

Bên trong phải có:

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

📌 Cái này cho phép Postfix gọi Dovecot để AUTH


5️⃣ KHỞI ĐỘNG LẠI DỊCH VỤ

sudo systemctl restart dovecot
sudo systemctl restart postfix

6️⃣ TEST AUTH PORT 587 (CỰC KỲ QUAN TRỌNG)

openssl s_client -starttls smtp -connect mail.giamkichsan.com:587

Sau khi hiện:

220 mail.giamkichsan.com ESMTP Postfix

Gõ:

EHLO test

👉 BẠN PHẢI THẤY:

250-AUTH LOGIN PLAIN
250-STARTTLS

✅ Thấy AUTH → cấu hình THÀNH CÔNG
❌ Không thấy → Postfix chưa nhận SASL


7️⃣ CODE .NET CHUẨN SAU KHI CẤU HÌNH XONG

client.Connect(
    "mail.giamkichsan.com",
    587,
    SecureSocketOptions.StartTls
);

client.Authenticate(
    "vcduan@giamkichsan.com",
    "Soc@2902"
);

client.Send(message);

🧨 LỖI HAY GẶP & CÁCH SỬA NHANH

LỗiNguyên nhân
No AUTHDovecot chưa link Postfix
535 auth failedSai user / mailbox
TLS errorSai path cert
timeoutFirewall chặn 587

👉 Mở firewall:

sudo ufw allow 587/tcp

✅ TÓM TẮT CHỐT

  • ❌ Đừng cố port 465
  • 587 + STARTTLS là chuẩn
  • ✅ Postfix + Dovecot
  • ✅ MailKit chạy mượt

👉 Sau khi bạn cấu hình xong, copy output của lệnh này gửi mình:

openssl s_client -starttls smtp -connect mail.giamkichsan.com:587

Mình sẽ check và xác nhận OK 100% trước khi bạn chạy tool .NET 💯

🟢 CÁCH 2 (CHUẨN MAIL SERVER – KHUYÊN DÙNG)

👉 Dùng passwd-file cho mailbox (ĐÚNG CHUẨN ISP)

1️⃣ Tạo file password mailbox

mkdir -p /etc/dovecot/passwd
nano /etc/dovecot/passwd/users

Nội dung:

vcduan@giamkichsan.com:{PLAIN}Soc@2902

2️⃣ Sửa auth config

nano /etc/dovecot/conf.d/10-auth.conf

Đổi thành:

disable_plaintext_auth = no
auth_mechanisms = plain login

!include auth-passwdfile.conf.ext

3️⃣ Sửa passwd-file config

nano /etc/dovecot/conf.d/auth-passwdfile.conf.ext

Đảm bảo:

passdb {
  driver = passwd-file
  args = scheme=PLAIN /etc/dovecot/passwd/users
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
Đăng bởi Để lại phản hồi

Cài đặt email server trên Ubuntu

Bước 1: Cài đặt Postfix (nếu chưa có)

sudo apt update
sudo apt install postfix mailutils -y

Khi cài đặt:

  • Chọn Internet Site
  • System mail name: mail.giamkichsan.com

Đây là hostname mail server của bạn.

3️⃣ Kiểm tra hostname

hostnamectl set-hostname mail.giamkichsan.com
hostname
  • mail.giamkichsan.com phải là hostname server.
  • Kiểm tra DNS A record: mail.giamkichsan.com trỏ tới IP server của bạn.

Bước 2: Tạo hoặc dùng chứng chỉ SSL/TLS

Bạn có thể dùng Let’s Encrypt hoặc chứng chỉ tự ký (self-signed).

A. Chứng chỉ Let’s Encrypt: Yêu cầu chứng chỉ sử dụng chế độ --standalone (yêu cầu tạm dừng máy chủ web nếu đang chạy trên cổng 80)
sudo apt install certbot
sudo certbot certonly --standalone -d mail.giamkichsan.com

Chứng chỉ sẽ nằm ở:

/etc/letsencrypt/live/mail.giamkichsan.com/fullchain.pem
/etc/letsencrypt/live/mail.giamkichsan.com/privkey.pem

Bước 3: Cấu hình Postfix để dùng SSL/TLS

Mở file cấu hình chính của Postfix:

sudo nano /etc/postfix/main.cf

Thêm hoặc sửa các dòng sau:

# Domain chính
myhostname = mail.giamkichsan.com
mydomain = giamkichsan.com
myorigin = /etc/mailname

# Máy chủ của bạn sẽ gửi mail đi từ domain
inet_interfaces = all
inet_protocols = all

# Mail địa phương
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# Các máy chủ mà mail của bạn sẽ relay
#relayhost = 

# TLS (SSL)
smtp_tls_cert_file=/etc/letsencrypt/live/mail.giamkichsan.com/fullchain.pem
smtp_tls_key_file=/etc/letsencrypt/live/mail.giamkichsan.com/privkey.pem
smtp_use_tls=yes
smtp_tls_loglevel = 2
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# TLS cho Postfix SMTPD (receiving)
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.giamkichsan.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.giamkichsan.com/privkey.pem
smtpd_use_tls=yes
smtpd_tls_loglevel = 2
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_auth_only = yes
smtpd_recipient_restrictions = 
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination

# My networks (chỉ mạng nội bộ gửi mail)
# mynetworks = 127.0.0.0/8 [::1]/128

Bước 4: Bật STARTTLS cho cổng SMTP

Trong file /etc/postfix/master.cf, đảm bảo dòng SMTPS (465) có STARTTLS:

smtps inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

Điều này cho phép các client kết nối và nâng cấp lên TLS.


Bước 5: Kiểm tra cấu hình

Kiểm tra cấu hình Postfix:

sudo systemctl restart postfix
sudo systemctl status postfix
sudo postfix check

Bước 7: Kiểm tra SSL/TLS

Bạn có thể dùng openssl để kiểm tra:

openssl s_client -connect mail.giamkichsan.com:465 -starttls smtp

Nếu thành công, bạn sẽ thấy thông tin chứng chỉ và kết nối được mã hóa TLS.

Bước 8: Cách giải quyết Gmail từ chối email vì domain mail.giamkichsan.com chưa có SPF/DKIM

1a. Cấu hình SPF cho domain

👉 Vào DNS của giamkichsan.com kiểm tra SPF

dig txt giamkichsan.com

Nếu chưa có thì add DNS record (TXT) cho giamkichsan.com:

Type: TXT
Name: @
Value:
v=spf1 ip4:109.199.101.177 -all

Lưu ý:

  • 109.199.101.177 = IP VPS gửi mail
  • -all = chỉ cho phép IP này gửi mail

1b. SPF là gì

  • SPF xác thực IP nào được phép gửi mail thay domain.
  • Nó kiểm tra mail đến từ server hợp lệ hay không.
  • SPF chỉ dựa trên địa chỉ gửi (envelope sender), không kiểm tra nội dung.

2. Cài đặt DKIM (nếu muốn tăng uy tín)

1️⃣ Cài OpenDKIM

sudo apt update
sudo apt install opendkim opendkim-tools -y

2️⃣ Tạo thư mục lưu key DKIM

sudo mkdir -p /etc/opendkim/keys/giamkichsan.com
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod -R 700 /etc/opendkim

3️⃣ Tạo DKIM key

cd /etc/opendkim/keys/giamkichsan.com
sudo opendkim-genkey -s mail -d giamkichsan.com
sudo chown opendkim:opendkim mail.private
sudo chmod 600 mail.private
  • -s mail → selector (bạn có thể đổi tên)
  • -d giamkichsan.com → domain của bạn
  • Sau khi chạy xong, bạn sẽ có 2 file:
  • mail.private → private key
  • mail.txt → public key để thêm vào DNS

4️⃣ Cấu hình OpenDKIM

Mở file /etc/opendkim.conf và chỉnh / thêm các dòng:

sudo nano /etc/opendkim.conf
# Phiên bản OpenDKIM
Syslog                  yes
UMask                   002
UserID                  opendkim:opendkim

# Thư mục chứa key riêng
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
TrustedHosts            /etc/opendkim/TrustedHosts

# Chế độ tự động chọn selector nếu có nhiều key
AutoRestart             yes
AutoRestartRate         10/1h
Mode                    sv
Canonicalization        relaxed/simple

##
Domain                  giamkichsan.com
Socket                  inet:12301@localhost // Chinh sua phu hop server

** Tạo các file hỗ trợ

a) KeyTable

sudo nano /etc/opendkim/KeyTable

Thêm hoặc sửa dòng:

#cú pháp chuẩn: keyname  domain:selector:/duong/dan/toi/private.key
mail._domainkey.giamkichsan.com giamkichsan.com:mail:/etc/opendkim/keys/giamkichsan.com/mail.private
  • mail là selector (có thể đặt tùy ý)
  • Đường dẫn tới private key của bạn

b) SigningTable

sudo nano /etc/opendkim/SigningTable
*@giamkichsan.com mail._domainkey.giamkichsan.com
  • Nghĩa là tất cả email từ domain @giamkichsan.com sẽ dùng key mail._domainkey.giamkichsan.com

c) TrustedHosts

sudo nano /etc/opendkim/TrustedHosts
127.0.0.1
localhost
giamkichsan.com
Phân quyền đúng (rất quan trọng)
sudo chown opendkim:opendkim /etc/opendkim/KeyTable
sudo chown opendkim:opendkim /etc/opendkim/SigningTable
sudo chown opendkim:opendkim /etc/opendkim/TrustedHosts
sudo chmod 640 /etc/opendkim/KeyTable
sudo chmod 640 /etc/opendkim/SigningTable
sudo chmod 640 /etc/opendkim/TrustedHosts
  • Các host này được tin cậy để gửi mail qua DKIM.

5️⃣ Cấu hình Postfix kết nối OpenDKIM

Chỉnh file /etc/postfix/main.cf, thêm:

sudo nano /etc/postfix/main.cf

Thêm nội dung dưới vào cuối file:

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:12301
non_smtpd_milters = $smtpd_milters

6️⃣ Khởi động OpenDKIM và Postfix

sudo systemctl enable opendkim
sudo systemctl restart opendkim
sudo systemctl restart postfix

Kiểm tra lỗi

sudo journalctl -xeu opendkim.service | tail -50 //Nếu lỗi opendkim.service
sudo journalctl -u opendkim -xe

//Hoac chay debug neu van loi
sudo opendkim -f -x /etc/opendkim.conf

7️⃣ Thêm public DKIM vào DNS

Mở file mail.txt vừa tạo, copy nội dung TXT record. Ví dụ:

sudo nano /etc/opendkim/keys/giamkichsan.com/mail.txt
hoặc
sudo cat /etc/opendkim/keys/giamkichsan.com/mail.txt
mail._domainkey    IN    TXT    "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GN...rest_of_key..."
  • mail → selector (-s mail lúc tạo key)
  • Thêm record TXT này vào DNS của domain giamkichsan.com

Lưu ý: DNS có thể mất 15–60 phút để propagate.


8️⃣ Test DKIM

Sau khi DNS update:

opendkim-testkey -d giamkichsan.com -s mail -vvv

Nếu kết quả OK → DKIM đã hoạt động.

4 Test gửi mail
echo "Test gửi mail qua Gmail relay" | mail -s "Test Mail $(date)" duanvc2811@gmail.com

6️⃣ Kiểm tra mail queue / log

mailq # Mail còn trong queue hay đã gửi
tail -f /var/log/mail.log 
[hoac] sudo tail -f /var/log/syslog | grep --color=auto -E "postfix|DKIM|SPF|warning|error"
  • Nếu mail gửi thành công → ra khỏi queue, Gmail nhận ngay
  • Nếu bị lỗi → log sẽ chỉ ra ngay (thường là lỗi password hoặc TLS)

Nguyên nhân thường gặp

  1. File log /var/log/mail.log bị xóa, quyền sai hoặc filesystem readonly.
  2. Rsyslog không có quyền ghi vào thư mục /var/log.
  3. Một số hệ thống mới Ubuntu dùng systemd-journald để log thay vì file riêng cho mail, hoặc rsyslog chưa được cấu hình để ghi mail.

Cách fix

1️⃣ Tạo lại file log và cấp quyền

sudo touch /var/log/mail.log
sudo chown syslog:adm /var/log/mail.log
sudo chmod 640 /var/log/mail.log

2️⃣ Khởi động lại rsyslog

sudo systemctl restart rsyslog

3️⃣ Khởi động lại Postfix

sudo systemctl restart postfix

4️⃣ Kiểm tra log realtime

sudo tail -f /var/log/mail.log
Đăng bởi Để lại phản hồi

[NGINX]Cài đặt app trên ubuntu

1️⃣ Cài Nginx (nếu chưa có)

sudo apt update
sudo apt install nginx -y

Kiểm tra Nginx:

sudo systemctl status nginx

2️⃣ Cấu trúc cơ bản reverse proxy

Reverse proxy nghĩa là: Nginx nhận request từ client → chuyển tiếp đến backend (app server)

Ví dụ:

  • Client truy cập http://yourdomain.com
  • Nginx chuyển request tới http://localhost:5000 (app .NET / Node.js / Python…)

3️⃣ Tạo file cấu hình site mới

sudo nano /etc/nginx/sites-available/myapp

Ví dụ cấu hình cơ bản:

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

4️⃣ Kích hoạt site

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/

Kiểm tra cấu hình:

sudo nginx -t

Reload Nginx:

sudo systemctl reload nginx

5️⃣ Kiểm tra reverse proxy

  • App backend chạy ở localhost:5000:
curl http://127.0.0.1:5000
  • Truy cập domain:
http://yourdomain.com

Nginx sẽ chuyển request tới backend.


6️⃣ (Tùy chọn) Bật HTTPS với Let’s Encrypt

Cài certbot:

sudo apt install certbot python3-certbot-nginx -y

Cấp chứng chỉ SSL:

sudo certbot --nginx -d yourdomain.com
Đăng bởi Để lại phản hồi

Cài đặt dotnet trên Ubuntu

1️⃣ Thêm Microsoft package repository

sudo apt update
sudo apt install -y wget apt-transport-https software-properties-common
wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

2️⃣ Cập nhật apt và cài .NET SDK 8

sudo apt update
sudo apt install -y dotnet-sdk-8.0

Nếu muốn chỉ cài runtime (chỉ chạy ứng dụng, không build):

sudo apt install -y dotnet-runtime-8.0

3️⃣ Kiểm tra cài đặt

dotnet --version

Kết quả sẽ hiển thị:

8.0.x

5️⃣ Cập nhật .NET 8 sau này

sudo apt update
sudo apt upgrade
Đăng bởi Để lại phản hồi

Một số câu lệnh trong Ubuntu

1. Thay đổi mật khẩu
sudo passwd ten_user
2. Tạo user mới
sudo adduser ten_user
Xoá user (nếu cần)
sudo deluser ten_user
Xoá luôn home:
sudo deluser --remove-home ten_user
🔐 Cấu hình bảo mật SSH (khuyến nghị)

Chỉ cho phép user cụ thể SSH:

sudo nano /etc/ssh/sshd_config

Thêm:

AllowUsers devuser admin

Restart:

sudo systemctl restart ssh
3. Cấp quyền sudo
sudo usermod -aG sudo ten_user //toàn quyền quản trị

Kiểm tra:

groups ten_user

//Nếu có sudo → OK ✅

4. Tắt đăng nhập root qua SSH(Đối với CONTABO – KHÔNG NÊN DÙNG)
sudo nano /etc/ssh/sshd_config

Sửa / kiểm tra:

PermitRootLogin no

Restart SSH:

sudo systemctl restart ssh

5️⃣ Phân quyền thư mục / file

Gán quyền sở hữu:

sudo chown -R ten_user:ten_user [/duong/dan]
Phân quyền đọc/ghi/chạy:
sudo chmod 755 [/duong/dan]

1️⃣ Dùng scp (secure copy)

Cú pháp chung:

scp /path/to/local/file username@server_ip:/path/to/remote/directory/

Ví dụ:

  • File trên client: /home/user/test.txt
  • Server: vmi2928652 (IP 109.199.101.177)
  • User trên server: root
  • Copy vào /root/ trên server
scp /home/user/test.txt root@109.199.101.177:/root/
  • Sau đó nhập mật khẩu root là file sẽ được copy.

2️⃣ Copy cả thư mục

scp -r /home/user/myfolder root@109.199.101.177:/root/
  • -r = recursive, copy toàn bộ folder

3️⃣ Dùng rsync (nếu muốn copy nhiều file và đồng bộ)

rsync -avz /home/user/myfolder/ root@109.199.101.177:/root/myfolder/
  • -a : archive (giữ quyền, timestamp)
  • -v : verbose
  • -z : nén khi gửi

4️⃣ Lưu ý

  • Client phải có quyền truy cập SSH vào server.
  • Nếu server dùng port SSH khác 22, thêm -P port_number:
scp -P 2222 file.txt root@109.199.101.177:/root/
Đăng bởi Để lại phản hồi

Hướng dẫn sử dụng SSH

1. Mở file key ssh lưu trên máy client
notepad $env:USERPROFILE\.ssh\known_hosts
2. Xóa hoặc thay đổi key trong file ssh trên notepad
Xóa bình thường sau đó lưu lại
3. Connect ssh tới server
ssh [user]@[host]
4. Mở port ra ngoài internet
1 - Kiểm tra UFW: sudo ufw status
2 - Nếu chưa bật: sudo ufw enable
3 - Mở port:
    sudo ufw allow 80 // Mở port cụ thể
    sudo ufw allow from 123.123.123.123 to any port 3306 //Mở cho ip cụ thể để an toàn hơn
    sudo ufw allow 8000:9000 // Mở port theo dải
    sudo ufw allow 22/tcp  //Mở port kèm protocol
    sudo ufw allow 8000:9000/tcp // Mở port theo dải kèm protocol
    sudo ufw allow ssh //Mở port cho service
    sudo ufw allow http //Mở port cho service
    sudo ufw allow https //Mở port cho service
4 - Kiểm tra port đã mở
    sudo ss -tuln //dùng để xem các port đang mở và đang lắng nghe
    //Ý nghĩa từng tham số
       ss : Socket Statistics (thay thế cho netstat)
       -t : TCP
       -u : UDP
       -l : Listening (đang mở)
       -n : Hiển thị số port (không resolve tên)

    sudo ss -tuln | grep 80 //Lọc port cụ thể

5 - Cách đóng port
    sudo ufw deny 3306 // Đóng port đang mở

    sudo systemctl stop mysql // Dừng service đang mở port
    sudo systemctl disable mysql // Disable service luôn

6 - Reload lại UFW
    sudo ufw reload

    

    

Đăng bởi Để lại phản hồi

hướng dẫn cài đặt email server cơ bản trên Ubuntu

1. Chuẩn bị

  • Ubuntu server
  • Domain (ví dụ: example.com)
  • DNS trỏ: mail.example.com -> IP server MX example.com -> mail.example.com

Kiểm tra hostname:

hostnamectl set-hostname mail.example.com

2. Cài Postfix

sudo apt update
sudo apt install postfix -y

Khi hỏi cấu hình:

  • General type: Internet Site
  • System mail name: example.com

Kiểm tra:

postfix status

3. Cấu hình Postfix

Mở file:

sudo nano /etc/postfix/main.cf

Đảm bảo có:

myhostname = mail.example.com
mydomain = example.com
myorigin = /etc/mailname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/

Restart:

sudo systemctl restart postfix

4. Cài Dovecot (nhận mail)

sudo apt install dovecot-imapd dovecot-pop3d -y

Cấu hình Maildir:

sudo nano /etc/dovecot/conf.d/10-mail.conf

Tìm và sửa:

mail_location = maildir:~/Maildir

Restart:

sudo systemctl restart dovecot

5. Tạo user email

Email sẽ theo user Linux:

sudo adduser user1

Email:
📧 user1@example.com


6. Mở firewall

sudo ufw allow 25,110,143,465,587,993,995/tcp
sudo ufw reload

7. Test gửi mail

echo "Hello Mail Server" | mail -s "Test" user1@example.com

Kiểm tra:

ls /home/user1/Maildir/new

PHẦN 1: Cài SSL (Let’s Encrypt)

1. Cài Certbot

sudo apt update
sudo apt install certbot -y

2. Cấp chứng chỉ SSL

⚠️ Domain mail.example.com phải trỏ đúng IP

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

SSL sẽ nằm tại:

/etc/letsencrypt/live/mail.example.com/

3. Cấu hình SSL cho Postfix

Mở:

sudo nano /etc/postfix/main.cf

Thêm hoặc sửa:

smtpd_tls_cert_file=/etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.example.com/privkey.pem

smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_auth_only = yes

Restart:

sudo systemctl restart postfix

4. Cấu hình SSL cho Dovecot

Mở:

sudo nano /etc/dovecot/conf.d/10-ssl.conf

Sửa:

ssl = yes
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem

Restart:

sudo systemctl restart dovecot

PHẦN 2: SMTP AUTH (bắt buộc để gửi mail an toàn)

sudo nano /etc/postfix/main.cf

Thêm:

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
  permit_sasl_authenticated,
  permit_mynetworks,
  reject_unauth_destination

Kết nối Postfix ↔ Dovecot:

sudo nano /etc/dovecot/conf.d/10-master.conf

Tìm service auth:

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

Restart:

sudo systemctl restart postfix dovecot

PHẦN 3: Chống SPAM (SpamAssassin)

1. Cài SpamAssassin

sudo apt install spamassassin spamc -y

Enable service:

sudo systemctl enable spamassassin
sudo systemctl start spamassassin

2. Tích hợp SpamAssassin với Postfix

Cài amavisd-new:

sudo apt install amavisd-new -y

Postfix master:

sudo nano /etc/postfix/master.cf

Thêm cuối file:

smtp-amavis unix - - - - 2 smtp
  -o smtp_data_done_timeout=1200
  -o disable_dns_lookups=yes
  -o max_use=20

127.0.0.1:10025 inet n - - - - smtpd
  -o content_filter=
  -o smtpd_delay_reject=no

Trong main.cf:

content_filter = smtp-amavis:[127.0.0.1]:10024

Restart:

sudo systemctl restart postfix amavis spamassassin

PHẦN 4: SPF, DKIM, DMARC (RẤT QUAN TRỌNG)

1. SPF (DNS)

Thêm TXT record:

example.com TXT "v=spf1 mx ip4:IP_SERVER -all"

2. DKIM

sudo apt install opendkim opendkim-tools -y

Tạo key:

sudo mkdir -p /etc/opendkim/keys/example.com
sudo opendkim-genkey -D /etc/opendkim/keys/example.com -d example.com -s mail
sudo chown -R opendkim:opendkim /etc/opendkim

DNS TXT (mail._domainkey):

v=DKIM1; k=rsa; p=MIIBIjANBgkq...

3. DMARC

DNS TXT:

_dmarc.example.com TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"

PHẦN 5: Auto renew SSL

sudo crontab -e

Thêm:

0 3 * * * certbot renew --quiet

Để mở dịch vụ gửi mail SMTP port 587 và 465 (SSL) trên Ubuntu (phổ biến nhất là Postfix), bạn làm theo đúng thứ tự dưới đây.


1️⃣ Mở port trên Firewall (UFW)

ufw allow 587/tcp
ufw allow 465/tcp
ufw reload
ufw status

Nếu bạn không dùng UFW, bỏ qua bước này.


2️⃣ Cấu hình Postfix mở port 587 & 465

Mở file cấu hình chính

nano /etc/postfix/master.cf

🔹 Bật port 587 (Submission)

Tìm dòng:

#submission inet n       -       y       -       -       smtpd

Sửa thành:

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

🔹 Bật port 465 (SMTPS – SSL)

Tìm dòng:

#smtps inet n       -       y       -       -       smtpd

Sửa thành:

smtps inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

👉 Lưu file và thoát.


3️⃣ Cấu hình SSL/TLS cho Postfix

Mở file:

nano /etc/postfix/main.cf

Thêm (hoặc chỉnh):

smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_tls_security_level=may
smtpd_tls_auth_only=yes

smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth
smtpd_sasl_auth_enable=yes

📌 Nếu bạn chưa có SSL, có thể dùng Let’s Encrypt:

apt install certbot
certbot certonly --standalone -d mail.domain.com

Sau đó dùng:

smtpd_tls_cert_file=/etc/letsencrypt/live/mail.domain.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.domain.com/privkey.pem

4️⃣ Cấu hình Dovecot (SMTP AUTH)

Mở:

nano /etc/dovecot/conf.d/10-master.conf

Tìm:

#unix_listener /var/spool/postfix/private/auth {
#}

Sửa thành:

unix_listener /var/spool/postfix/private/auth {
  mode = 0660
  user = postfix
  group = postfix
}

Restart dovecot:

systemctl restart dovecot

5️⃣ Restart Postfix

systemctl restart postfix

6️⃣ Kiểm tra port đã mở chưa

ss -lntp | grep -E '587|465'

Kết quả đúng:

LISTEN 0 100 0.0.0.0:587   users:(("postfix",pid=...))
LISTEN 0 100 0.0.0.0:465   users:(("postfix",pid=...))

7️⃣ Test gửi mail

Test SMTP 587

openssl s_client -starttls smtp -connect localhost:587

Test SMTP SSL 465

openssl s_client -connect localhost:465

Nếu thấy:

250 DSN

→ Thành công 🎉