+17

Tự cài đặt mail server dùng cho pentest và các mục đích khác

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ần ruaruf 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/aliasesalias_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 đến postmaster@domain.com sẽ được chuyển sang cho user root chẳng hạn (vì server vốn không tồn tại user postmaster).
# See man 5 aliases for format
postmaster:    root
root:	minhtuan
  • Chỉnh myoriginmydestination 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.comxn--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/?adminvà đ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

Viblo
Let's register a Viblo Account to get more interesting posts.