Tự cài đặt mail server dùng cho pentest và các mục đích khác
Bài đăng này đã không được cập nhật trong 3 năm
Intro
Nhiều lúc bạn muốn có thật nhiều tài khoản mail để:
- Đăng ký diễn đàn hoặc newleters và những thứ linh tinh khác, nói chung là email có thể xác thực được, khi mà các trang email disposable như yopmail.com bị block càng nhiều
- Như mình là pentester cần có nhiều email để đăng ký nhiều account để test các lỗi như IDOR, BAC, PE...
- Khi không thể sử dụng mail alias với
+
- ...cho vui
Trong bài này ta sẽ setup thử mail server với các yêu cầu trên.
Những thứ bạn cần có:
- Một VPS có địa chỉ IP tĩnh và public trên internet. Hiện mình đang dùng dịch vụ của Digital Ocean với giá 5$/tháng, bạn có thể dùng bất cứ dịch vụ nào khác cũng được.
- Một domain mà bạn muốn thiết lập nhận mail. Có rất nhiều dịch vụ cho phép đăng ký domain free, mình dùng dot.tk và đăng ký domain: minhtuanact.tk
(thực ra domain và VPS đều là của đứa trong team, mình setup hộ để lấy ảnh viết bài viblo write-up )
Let's go!
Cài đặt cấu hình DNS
Để có thể được mail thì ta cần thiết lập một số DNS record:
- Một record
A
với domain/subdomain của mail server, chỉ đến địa chỉ IP của VPS. VD: trang web của bạn ở địa chỉ minhtuanact.tk và bạn muốn nhận mail ở một subdomain khác, ở đây mình sử dụng mail.minhtuanact.tk thì điền Name là:MAIL
. - Một record
MX
để chỉ rõ subdomain nào sẽ đảm nhận việc nhận và gửi mail. - Một record
TXT
với tên là_DMARC
dùng để thông báo về các policy trong việc gửi mai: khi bị spam mail thì như thế nào, gửi thông báo trong các trường hợp lỗi như thế nào, vân vân và vân vân... Mình cũng ko quan tâm lắm đến cái này nên dùng tạm cấu hình mặc định như sau. Điền email của bạn vào phầnrua
vàruf
nhé:
v=DMARC1; p=none; pct=100; fo=1; rua=mailto:your.email@gmail.com; ruf=mailto:your.email@gmail.com
Vớ Freenom thì bạn vào link: https://my.freenom.com/clientarea.php?managedns=YYYY&domainid=XXXX và cấu hình tương tự như dưới đây. Có thể đặt TTL nhỏ để DNS nhanh chóng được cập nhật ( tối thiểu là 300).
Sau khi đã cấu hình xong, để có thể kiểm tra các record đã ok chưa, ta có thể dùng công cụ: https://mxtoolbox.com/, điền domain chính vào và check. Khi record chưa được sẽ như thế này:
Còn ngon rồi thì sẽ như thế này:
Cài đặt mail server
Postfix
Để nhận mail, chúng ta sử dụng Postfix, một trong những mail server quá phổ biến và quen thuộc. Cài đặt thì cũng không có gì phức tạp cả.
sudo apt update
sudo apt install postfix
Khi cài đặt sẽ hiện lên màn hình cấu hình như dưới đây, chỉ cần đọc và chọn theo hướng dẫn là ok:
- General type of mail configuration?: Internet Site
- System mail name: minhtuanact.tk
- Root and postmaster mail recipient: sẽ là user chính trên server của bạn, trong trường hợp của mình là: minhtuan
Còn cụ thể chúng ta sẽ cấu hình thêm ở phía sau. Còn nếu lỡ làm sai ở đâu đó thì có thể dùng câu lệnh sau để cấu hình lại:
sudo dpkg-reconfigure postfix
Dovecot
Chúng ta cần cài đặt thêm Dovecot: là phần mềm mã nguồn mở email server dùng cho hai giao thức IMAP và POP3 dùng để quản lý mail từ mail server. Dovecot sẽ được dùng để chuyển các mail đến hộp thư của từng user trên server. Cài đặt thì cũng không có gì quá khó cả:
sudo apt update
sudo apt install dovecot-core dovecot-imapd
Cấu hình postfix
Đối với postfix, cấu hình sẽ nằm ở file /etc/postfix/main.cf
. Mở file này ra và chúng ta thêm cấu hình như dưới đây:
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = ubuntu-512mb-sgp1-01
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myorigin = /etc/mailname
#mydestination = $myhostname, ubuntu-512mb-sgp1-01, localhost.localdomain, localhost
myorigin = localhost
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
home_mailbox = Maildir/
virtual_alias_maps = hash:/etc/postfix/virtual
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions = permit_sasl_authenticated
virtual_alias_domains = hash:/etc/postfix/virtual_domains
alias_maps = hash:/etc/aliases
vàalias_database = hash:/etc/aliases
: dùng để chuyển hướng mail từ user này sang user khác. Ví dụ, chúng ta muốn những mail gửi đếnpostmaster@domain.com
sẽ được chuyển sang cho userroot
chẳng hạn (vì server vốn không tồn tại userpostmaster
).
# See man 5 aliases for format
postmaster: root
root: minhtuan
- Chỉnh
myorigin
vàmydestination
về localhost home_mailbox = Maildir/
: định dạng Maildir sẽ cho phép chia các email thành các file riêng biệt và di chuyển các file này giữa các folder tùy thuộc và hành động của người dùng. Một định dạng khác làmbox
sẽ lưu tất cả vào một file.virtual_alias_domains = hash:/etc/postfix/virtual_domains
dùng để setup trong trường hợp VPS này được dùng chung cho nhiều domain khác nhau, ví dụ khi muốn kiểm tra mối liên quan giữa 2 domain:example.com
vàxn--exmple-qta.com
(tức làexámple.com
sau khi punny decode) xem web app có thực hiện việc convert domain không, ta có thể dùng chung luôn mà ko cần thêm 1 VPS khác:
xn--exmple-qta.com #domain
example.com #domain
virtual_alias_maps = hash:/etc/postfix/virtual
: Cấu hình gồm domain và user sẽ nhận email cho domain đó. Cấu hình như thế này còn có tác dụng là tất cả các email gửi đến domain dù cho bất cứ user nào, kể cả không tồn tại đi nữa sẽ đều bị redirect về 1 hòm mail duy nhất của user được cài đặt.
xn--exmple-qta.com minhtuan
example.com minhtuan
Sau khi cấu hình các file này nhớ thực hiện các lệnh sau để generate DB:
sudo postmap /etc/aliases
sudo postmap /etc/postfix/virtual_domains
sudo postmap /etc/postfix/virtual
và load lại postfix:
sudo service postfix restart
Để có thể check mail, ta có thể cài đặt thêm công cụ mailutils
:
sudo apt install mailutils
Cài xong ta có thể sử dụng lệnh mail
để kiểm tra thư của user hiện tại:
U 22 Twitter Thu Jan 1 07:00 2082/106270 prin Tweeted: Me after getting bug 😂 :
U 23 Cron Daemon Thu Jan 1 07:00 51/2363 Cron <root@ubuntu-512mb-sgp1-01> certbot renew --renew-hook 'service nginx re
U 24 Twitter Thu Jan 1 07:00 1138/46840 Another Self, download the app today
U 25 Takeaway Thu Jan 1 07:00 581/42970 Jobs for you from Takeaway Talent Community
U 26 Twitter Thu Jan 1 07:00 1907/94689 prin Tweeted: Support ✌️✌️✌️✌️
? q
Held 214 messages in /home/minhtuan/Maildir
Cấu hình dovecot
Mở file /etc/dovecot/conf.d/10-auth.conf
và chỉnh cấu hình như sau:
disable_plaintext_auth = no
auth_mechanisms = plain login
và sửa auth_username_format = %n
(sẽ được dùng khi dùng với rainloop ở phía sau).
Mở /etc/dovecot/conf.d/10-mail.conf
và chỉnh như sau để chuyển sang sử dụng định dạng Maildir
.
mail_location = maildir:~/Maildir
Bước cuối là chỉnh sửa /etc/dovecot/conf.d/10-master.conf
, tìm đến block smtp-auth
và chỉnh như sau:
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
Và không quên reload lại dovecot
sudo service dovecot restart
Cấu hình mail client
Với mail client, mình sử dụng rainloop do cấu hình rất đơn giản và nhanh gọn, chỉ cần cài đặt PHP không yêu cầu sử dụng DB gì cả. Tải về tại: https://www.rainloop.net/ và unzip vào /var/html/rainloop
wget https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip
Rainloop yêu cầu PHP, ở đây mình dùng PHP 7.2 vài cài đặt các thư viện như sau:
sudo apt install php-fpm
sudo apt install php7.2-dom
sudo apt install php7.2-curl
Sau khi cài đặt theo hướng dẫn https://www.rainloop.net/docs/installation/, chú ý phân quyền đúng và với nginx, ta có thể cấu hình như sau:
server {
listen 80;
server_name inbox.minhtuanact.tk;
root /var/www/rainloop/;
index index.php index.html;
access_log /var/log/nginx/rainloop_access.log;
error_log /var/log/nginx/rainloop_error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ ^/(.+\.php)$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ^~ /data {
deny all;
}
}
Chú ý cấu hình server_name
với subdomain mà bạn muốn host rainloop trên đó, ở ví dụ trên là: inbox.minhtuanact.tk (nhớ setup DNS record nữa nhé).
Ok, bật rainloop lên và cấu hình nào, vào http://inbox.minhtuanact.tk/?admin
và điền tài khoản:
Default login is "admin", password is "12345".
ta cấu hình giống ảnh, và đừng quên đổi password mặc định của admin nha:
-
Chỉnh domain mặc định:
-
Thêm domain:
-
Đừng quên đổi pass nhá:
Xong xuôi ta có thể vào http://inbox.minhtuanact.tk/#/mailbox/INBOX và đăng nhập với username và password trên hệ thống để check mail. Thử gửi vài cái mail test xem có nhận được không nào
Kết
Đừng lấy mail server đăng ký rồi đi spam nha, bị block là khổ đấy
Hiện mail server của chúng ta mới có thể nhận được email, còn để gửi mail thì sẽ cần thêm chút cấu hình nữa, có lẽ sẽ để dành bài sau. Bye!
Tham khảo
All rights reserved