Cài đặt ban đầu máy chủ Ubuntu: 9 bước bắt đầu trên máy chủ Ubuntu mới cài đặt

Môi trường thử nghiệmHọ DebianUbuntu 24.04.5 LTStài khoản root · người dùng thường
Đã kiểm tra các việc cài đặt ban đầu máy chủ Ubuntu

Khi nhận một máy chủ mới, bạn thực hiện cài đặt ban đầu máy chủ Ubuntu một lần trước khi đưa bất kỳ dịch vụ nào lên. Trên máy chủ Ubuntu 24.04 tạo tại DigitalOcean, chúng tôi kết nối bằng root rồi lần lượt thiết lập từ cập nhật gói, người dùng sudo, đăng nhập bằng khóa, tường lửa, múi giờ, cập nhật bảo mật tự động cho đến swap, và xác nhận các thiết lập vẫn còn nguyên sau khi khởi động lại.

Các ô kết quả bên dưới là đầu ra khi chạy các lệnh theo thứ tự này. IP máy chủ 203.0.113.10 là giá trị ví dụ, và người dùng thường mới tạo được đặt tên là deploy.

🎯 Điểm chính
Cập nhật gói và kiểm tra có cần khởi động lại không
sudo được bật cho người dùng thường deploy
deploy (đã kiểm tra đăng nhập bằng khóa), sau đó root (chặn đăng nhập)
ufw chỉ cho phép SSH, 80 và 443
Đổi múi giờ và kiểm tra cập nhật bảo mật tự động
Tệp swap 2GB và thiết lập giữ nguyên sau khởi động lại
Điều kiện tiên quyết
Đọc trướcssh-keygenssh Lệnh
Kết nốiroot: khóa SSH để kết nối và máy chủ Ubuntu 24.04

1️⃣ Cập nhật gói Ubuntu

Ngay cả máy chủ vừa tạo cũng có sẵn các bản cập nhật chờ cài. Sau khi tải danh sách gói mới, hãy kiểm tra những gì sẽ thay đổi trước khi thực sự cài đặt.

🔲 apt-get update

export DEBIAN_FRONTEND=noninteractive

Các lệnh apt-get bên dưới được chạy sau khi đặt giá trị này trước. Khi có giá trị này, trong lúc cài gói sẽ không hiện cửa sổ hỏi thiết lập và câu trả lời mặc định được áp dụng.

apt-get update
Hit:1 http://mirrors.digitalocean.com/ubuntu noble InRelease
Hit:2 http://mirrors.digitalocean.com/ubuntu noble-updates InRelease
Hit:3 http://mirrors.digitalocean.com/ubuntu noble-backports InRelease
Hit:4 https://repos-droplet.digitalocean.com/apt/droplet-agent main InRelease
Hit:5 http://security.ubuntu.com/ubuntu noble-security InRelease
Reading package lists...

🔲 apt-get -s upgrade

apt-get -s upgrade
Calculating upgrade...
The following upgrades have been deferred due to phasing:
  libsqlite3-0
The following packages will be upgraded:
  apt apt-transport-https apt-utils bind9-dnsutils bind9-host bind9-libs
  cloud-init distro-info-data gir1.2-glib-2.0 git git-man libapt-pkg6.0t64
  libbrotli1 libglib2.0-0t64 libglib2.0-bin libglib2.0-data liblzma5
  libmspack0t64 libpcre2-8-0 python3-jwt python3-twisted tmux
  ubuntu-pro-client ubuntu-pro-client-l10n xz-utils zlib1g
26 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

Tùy chọn -s là chạy thử, chỉ tính kết quả mà không cài gì. Trên máy chủ này có 26 gói cần nâng cấp, và libsqlite3-0 bị bỏ ra khỏi lần nâng cấp này với [deferred due to phasing]. Số gói khác nhau giữa các máy chủ tùy thời điểm tạo máy chủ và image được dùng.

🔲 apt-get -y upgrade

apt-get -y upgrade
26 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 15.4 MB of archives.
After this operation, 398 kB of additional disk space will be used.

Khi cài đặt xong, danh sách các dịch vụ được khởi động lại sẽ hiện tiếp theo.

Running kernel seems to be up-to-date.

Restarting services...
 /etc/needrestart/restart.d/systemd-manager
 systemctl restart cron.service fwupd.service multipathd.service packagekit.service polkit.service ssh.service systemd-journald.service systemd-networkd.service systemd-resolved.service systemd-timesyncd.service systemd-udevd.service udisks2.service

Service restarts being deferred:
 systemctl restart ModemManager.service
 /etc/needrestart/restart.d/dbus.service
 systemctl restart systemd-logind.service
 systemctl restart unattended-upgrades.service

Khi một bản cập nhật cần khởi động lại được cài, tệp /var/run/reboot-required sẽ được tạo. Lần này hiện [Running kernel seems to be up-to-date.] và tệp đó cũng không được tạo, nên chúng tôi chuyển sang bước tiếp theo mà không khởi động lại.

2️⃣ Thêm người dùng Ubuntu và quyền sudo

Công việc hằng ngày làm bằng người dùng thường, và chỉ chạy lệnh quản trị bằng sudo. sudo nâng quyền bằng mật khẩu của chính bạn thay vì mật khẩu root, nên lưu lại được ai đã chạy lệnh nào.

🔲 adduser deploy

adduser deploy
info: Adding user `deploy' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `deploy' (1000) ...
info: Adding new user `deploy' (1000) with group `deploy (1000)' ...
info: Creating home directory `/home/deploy' ...
info: Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for deploy
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] Y
info: Adding new user `deploy' to supplemental / extra groups `users' ...
info: Adding user `deploy' to group `users' ...

adduser là công cụ bao quanh useradd; công cụ này tạo thư mục home và nhóm, sau đó lần lượt hỏi mật khẩu và thông tin người dùng. Mật khẩu không hiện trên màn hình khi gõ, còn các thông tin như tên và số điện thoại có thể để trống bằng Enter.

🔲 usermod -aG sudo deploy

usermod -aG sudo deploy
groups deploy
deploy : deploy sudo users

🔲 su

Người dùng trong nhóm sudo có thể chạy lệnh quản trị bằng sudo. Chuyển sang tài khoản deploy bằng su và kiểm tra quyền.

su - deploy
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
whoami
deploy
sudo whoami
[sudo] password for deploy: 
root
exit

Khi thêm sudo, hệ thống hỏi mật khẩu của deploy, và nếu đúng thì lệnh chạy với quyền root.

3️⃣ Đăng ký khóa SSH cho người dùng mới

Ban đầu chỉ root có khóa SSH được đăng ký, nên deploy chưa đăng nhập bằng khóa được. Hãy sao chép authorized_keys của root vào thư mục home của deploy.

🔲 install -o deploy -g deploy

install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
ls -la /home/deploy/.ssh
total 12
drwx------ 2 deploy deploy 4096 Nov  5 11:48 .
drwxr-x--- 3 deploy deploy 4096 Nov  5 11:48 ..
-rw------- 1 deploy deploy  100 Nov  5 11:48 authorized_keys

install tạo thư mục, sao chép tệp và đặt chủ sở hữu cùng quyền trong một lần. sshd kiểm tra quyền và chủ sở hữu của các tệp người dùng trước khi chấp nhận đăng nhập (StrictModes), nên đặt thư mục .ssh là 700 và authorized_keys là 600.

🔲 ssh deploy@203.0.113.10

Đừng đóng cửa sổ root đang mở; trước hết hãy kiểm tra trong cửa sổ terminal mới xem có kết nối được bằng deploy không.

ssh deploy@203.0.113.10
whoami
deploy
🧭 Thứ tự thiết lập không bị khóa kết nối
Sơ đồ giải thích
🧭 Các bước
🔑① Sao chép khóaKhóa root cho deploy
➜
🪟② Kiểm tra cửa sổ mớiGiữ cửa sổ root mở
➜
⛔③ Chặn đăng nhập rootPermitRootLogin no
➜
🪟④ Kiểm tra cửa sổ mớiKết nối deploy vẫn như cũ
✅⑤ Cho phép SSHufw allow OpenSSH
➜
🧱⑥ Bật ufwChỉ mở các cổng được phép
➜
🪟⑦ Kiểm tra cửa sổ mớiKết nối vẫn như cũ
Sao chép authorized_keys của root vào thư mục home của deploy.
Đừng đóng cửa sổ root đang mở; hãy kiểm tra trong cửa sổ terminal mới xem đăng nhập bằng khóa với deploy có được không.
Chỉ chặn đăng nhập root sau khi đã xác nhận kết nối deploy. Nếu không kết nối được ở cửa sổ mới, hãy hoàn tác thay đổi trong cửa sổ vẫn đang mở.
Sau khi tải lại thiết lập SSH, hãy kiểm tra trong cửa sổ mới xem kết nối deploy vẫn hoạt động không.
Trước khi bật tường lửa, hãy thêm quy tắc cho phép SSH trước.
Ngay khi bật, mọi kết nối không được phép sẽ bị chặn, nên quy tắc cho phép SSH phải có sẵn từ trước.
Sau khi bật tường lửa, hãy kiểm tra trong cửa sổ mới xem có kết nối lại được bằng deploy không.

4️⃣ Chặn đăng nhập root qua SSH

Trên Ubuntu 24.04, dòng Include ở đầu sshd_config tải trước các tệp trong thư mục /etc/ssh/sshd_config.d/, và với cùng một mục thì giá trị được đọc trước sẽ được áp dụng. Vì vậy, trước khi đổi thiết lập, hãy kiểm tra giá trị đang áp dụng và tệp chứa giá trị đó.

/etc/ssh└─ sshd_config  trên cùng: Include /etc/ssh/sshd_config.d/*.conf   ├─ ① sshd_config.d/50-cloud-init.conf         PasswordAuthentication no   ├─ ② sshd_config.d/60-cloudimg-settings.conf  PasswordAuthentication no   └─ ③ sshd_config dòng 42                      PermitRootLogin yes → no

🔲 sshd -T

sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
permitrootlogin yes
passwordauthentication no
sudo grep -rn 'PasswordAuthentication' /etc/ssh/sshd_config.d/
/etc/ssh/sshd_config.d/60-cloudimg-settings.conf:1:PasswordAuthentication no
/etc/ssh/sshd_config.d/50-cloud-init.conf:1:PasswordAuthentication no

Đăng nhập bằng mật khẩu đã bị tắt sẵn ở hai tệp trong sshd_config.d, nên thứ cần đổi chỉ là một dòng đăng nhập root trong tệp chính.

🔲 sed -i PermitRootLogin

sudo grep -n '^PermitRootLogin' /etc/ssh/sshd_config
42:PermitRootLogin yes
sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo grep -n '^PermitRootLogin' /etc/ssh/sshd_config
42:PermitRootLogin no

🔲 systemctl reload ssh

sudo sshd -t
sudo systemctl reload ssh
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
permitrootlogin no
passwordauthentication no

sshd -t kiểm tra cú pháp thiết lập, và nếu không có gì hiện ra thì không có lỗi. Sau khi tải lại, hãy xác nhận trong cửa sổ mới rằng kết nối deploy vẫn hoạt động, rồi thử kết nối bằng root để thấy bị từ chối.

ssh root@203.0.113.10
root@203.0.113.10: Permission denied (publickey).

Dù khóa đúng cũng không vào được bằng root; việc quản trị được làm bằng cách kết nối với deploy và dùng sudo.

5️⃣ Tường lửa Ubuntu ufw

ufw là công cụ tường lửa mặc định của Ubuntu nhưng ban đầu ở trạng thái tắt. Ngay khi bật, mọi kết nối không được phép sẽ bị chặn, nên hãy thêm quy tắc cho phép SSH trước và bật sau cùng.

sudo ufw status verbose
Status: inactive

🔲 ufw allow OpenSSH

sudo ufw app list
Available applications:
  OpenSSH
sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)
sudo ufw allow 80/tcp
Rules updated
Rules updated (v6)
sudo ufw allow 443/tcp
Rules updated
Rules updated (v6)
sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp

OpenSSH là profile mở cổng 22, còn 80 và 443 là các cổng dùng cho máy chủ web. Quy tắc được thêm cho cả IPv4 và IPv6.

🔲 ufw enable

sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    Anywhere                  
443/tcp                    ALLOW IN    Anywhere                  
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)             
80/tcp (v6)                ALLOW IN    Anywhere (v6)             
443/tcp (v6)               ALLOW IN    Anywhere (v6)             

Kết nối đến bị chặn theo mặc định, chỉ ba cổng được phép là mở, và tường lửa cũng bật khi khởi động. Sau khi bật, hãy kết nối lại bằng deploy trong cửa sổ mới và kiểm tra số thứ tự quy tắc.

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere                  
[ 2] 80/tcp                     ALLOW IN    Anywhere                  
[ 3] 443/tcp                    ALLOW IN    Anywhere                  
[ 4] OpenSSH (v6)               ALLOW IN    Anywhere (v6)             
[ 5] 80/tcp (v6)                ALLOW IN    Anywhere (v6)             
[ 6] 443/tcp (v6)               ALLOW IN    Anywhere (v6)             

6️⃣ Cài đặt múi giờ Ubuntu

Múi giờ ban đầu là Etc/UTC. Để thời gian trong log và các tác vụ đặt lịch khớp với khu vực của máy chủ, máy chủ này tạo ở khu vực Singapore nên được đặt thành Asia/Singapore.

timedatectl
               Local time: Thu 2026-11-05 12:00:31 UTC
           Universal time: Thu 2026-11-05 12:00:31 UTC
                 RTC time: Thu 2026-11-05 12:00:31
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

🔲 timedatectl list-timezones

timedatectl list-timezones | grep Singapore
Asia/Singapore

🔲 timedatectl set-timezone

sudo timedatectl set-timezone Asia/Singapore
timedatectl
               Local time: Thu 2026-11-05 20:00:32 +08
           Universal time: Thu 2026-11-05 12:00:32 UTC
                 RTC time: Thu 2026-11-05 12:00:32
                Time zone: Asia/Singapore (+08, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Chỉ hai dòng Local time và Time zone thay đổi; đồng bộ đồng hồ (NTP) và giờ UTC vẫn giữ nguyên.

7️⃣ unattended upgrades: cập nhật bảo mật tự động

Ubuntu tự động cài cập nhật bảo mật bằng gói unattended-upgrades, và gói này đã được cài và bật sẵn từ đầu. Vì vậy ở bước này, bạn kiểm tra xem nó có đang bật không và nó tự động cài những gì.

🔲 dpkg-query -W

dpkg-query -W unattended-upgrades
unattended-upgrades	2.9.1+nmu4ubuntu1
systemctl is-enabled unattended-upgrades apt-daily.timer apt-daily-upgrade.timer
enabled
enabled
enabled

🔲 cat 20auto-upgrades

cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Số 1 trong hai giá trị nghĩa là mỗi ngày một lần, và đổi thành 0 thì cập nhật tự động sẽ tắt. Những gì được cài do tệp 50unattended-upgrades quyết định.

grep -vE '^[[:space:]]*(//|$)' /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
	"${distro_id}:${distro_codename}";
	"${distro_id}:${distro_codename}-security";
	"${distro_id}ESMApps:${distro_codename}-apps-security";
	"${distro_id}ESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Package-Blacklist {
};
Unattended-Upgrade::DevRelease "auto";

Trong các nguồn được phép có -security nhưng không có -updates, nên cập nhật thường không được cài tự động mà chỉ cập nhật bảo mật được cài. Để nhận cả cập nhật thường một cách tự động, hãy bỏ chú thích dòng -updates trong tệp này.

🔲 unattended-upgrade

sudo unattended-upgrade --dry-run --debug
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security, o=UbuntuESMApps,a=noble-apps-security, o=UbuntuESM,a=noble-infra-security

Đây là hai dòng cuối của cùng một lần chạy.

No packages found that can be upgraded unattended and no pending auto-removals
The list of kept packages can't be calculated in dry-run mode.

--dry-run chỉ tính những gì cập nhật tự động sẽ làm mà không cài gì. Vì đã cập nhật gói xong, kết quả cho thấy không có gói nào cần cài tự động. Nhật ký các lần chạy thật được lưu trong thư mục /var/log/unattended-upgrades/.

sudo ls -l /var/log/unattended-upgrades/
total 32
-rw-r--r-- 1 root root     0 Nov  5 20:00 unattended-upgrades-dpkg.log
-rw-r--r-- 1 root root     0 Nov  5 17:34 unattended-upgrades-shutdown.log
-rw-r--r-- 1 root root 29093 Nov  5 20:04 unattended-upgrades.log

8️⃣ Cài đặt bộ nhớ swap Ubuntu

Máy chủ này có bộ nhớ 1GB và ban đầu swap là 0. Trước khi đưa ứng dụng lên, hãy tạo tệp swap 2GB và đăng ký vào /etc/fstab để nó vẫn bật sau khi khởi động lại.

free -h
               total        used        free      shared  buff/cache   available
Mem:           961Mi       328Mi       161Mi       4.0Mi       631Mi       633Mi
Swap:             0B          0B          0B
df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        24G  2.0G   22G   9% /

🔲 fallocate -l 2G /swapfile

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
ls -lh /swapfile
-rw------- 1 root root 2.0G Nov  5 20:04 /swapfile

🔲 mkswap /swapfile

sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=0b43ccd8-5b4a-4048-9b84-eee12667b387

🔲 swapon /swapfile

sudo swapon /swapfile
swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2
free -h
               total        used        free      shared  buff/cache   available
Mem:           961Mi       328Mi       160Mi       4.0Mi       632Mi       632Mi
Swap:          2.0Gi          0B       2.0Gi

🔲 tee -a /etc/fstab

swapon chỉ bật ngay lúc này; để nó vẫn bật sau khi khởi động lại, hãy thêm một dòng vào fstab.

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
/swapfile none swap sw 0 0

9️⃣ Kiểm tra cài đặt ban đầu máy chủ Ubuntu

Khi đã xác nhận các thiết lập vẫn còn sau khi khởi động lại, việc cài đặt ban đầu Ubuntu hoàn tất.

🔲 systemctl reboot

sudo systemctl reboot

🔲 uptime -p

Sau khi khởi động lại, hãy kết nối lại bằng deploy.

uptime -p
up 2 minutes
swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
permitrootlogin no
passwordauthentication no
sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    Anywhere                  
443/tcp                    ALLOW IN    Anywhere                  
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)             
80/tcp (v6)                ALLOW IN    Anywhere (v6)             
443/tcp (v6)               ALLOW IN    Anywhere (v6)             
timedatectl | head -n 4
               Local time: Thu 2026-11-05 20:06:35 +08
           Universal time: Thu 2026-11-05 12:06:35 UTC
                 RTC time: Thu 2026-11-05 12:06:35
                Time zone: Asia/Singapore (+08, +0800)
systemctl is-active unattended-upgrades ssh.socket
active
active

Swap, thiết lập SSH, tường lửa, múi giờ và cập nhật tự động đều giống như trước khi khởi động lại. Tiếp theo, máy chủ này sẽ chạy một ứng dụng Node.js với PM2 và Nginx.

🔢 FAQ & nội dung đề xuất

Cứ để nguyên là được. Gói bị bỏ ra với [deferred due to phasing] là bản cập nhật đang được phát hành theo từng giai đoạn. Ubuntu phát hành một số bản cập nhật trước cho một phần máy chủ, nếu không có vấn đề thì mở rộng ra tất cả máy chủ. Cập nhật bảo mật không phát hành theo giai đoạn, và gói bị bỏ ra sẽ được cài cùng ở lần nâng cấp tiếp theo khi phạm vi phát hành mở rộng.

Tác vụ cập nhật tự động chạy mỗi ngày một lần, và hai bộ hẹn giờ apt-daily.timer và apt-daily-upgrade.timer chạy nó với độ trễ ngẫu nhiên tính từ một thời điểm cố định. Trên máy chủ này, lần chạy tiếp theo của apt-daily-upgrade.timer được đặt vào 06:27:59 (+08) ngày hôm sau. Nếu máy chủ đang tắt và lỡ thời điểm đó, tác vụ có thể chạy ngay ở lần khởi động tiếp theo, nên các tác vụ apt đôi khi phải chờ một lúc ngay sau khi khởi động.

Với thiết lập mặc định thì không. Giá trị mặc định của Automatic-Reboot trong 50unattended-upgrades là false, và trong thiết lập của máy chủ này dòng đó cũng không được bật. Khi một bản cập nhật cần khởi động lại được cài, tệp /var/run/reboot-required sẽ được tạo, nên hãy tự khởi động lại khi có tệp đó.

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 10   +   1   =