Cài đặt LEMP + TOR với tên miền .onion

.onion là gì ?

.onion là tên miền ảo cấp cao nhất 4 được tạo ra bởi nhóm phát triển Tor 1 dành cho các dịch vụ ẩn với bên ngoài. Vì tên miền.onion không phải là tên miền hợp lệ trong DNS nên các tên miền này chỉ có thể truy cập được khi máy tính đã kết nối với mạng Tor. Các máy chủ chạy tên miền.onion rất khó để phát hiện ra. Sử dụng tên miền.onion giúp người truy cập và chủ máy chủ sử dụng tên miền khó bị phát hiện.

Vậy tên miền .onion khác các domain thông thường thế nào?

Các domain thông thường chúng ta vẫn hay sử dụng như .com, .vn, .org,… được ban hành bởi Internet Corporation for Assigned Names and Numbers (ICANN). Có hàng ngàn domain khác nhau, nhưng không phải mọi người đều sử dụng chúng (như .apple). Người dùng phải gửi đề xuất tới ICANN để đăng ký một domain và subdomain. Thường thì sẽ có các chi phí đi kèm và phí duy trì domain.
Trong khi đó các địa chỉ.onion được tạo ra dựa trên khóa công khai khi dịch vụ ẩn được tạo ra, gồm 16 ký tự gồm các ký tự bất kì trong bảng ký tự. Tor trên dịch vụ ẩn sẽ lấy 18 bit đầu trong mã nhận dạng được mã hóa bằng SHA-512 rồi đem mã hóa qua base32 để tạo ra địa chỉ.

(Video demo)

Bài viết này sẽ hướng dẫn cho bạn cách triển khai một hệ thống webserver Nginx + MariaDB + PHP + TOR để chạy các web trên mạng TOR, Là một mạng ẩn danh với dạng website DarkWeb, DeepWeb

I. Cài đặt Ubuntu

Tại bài này, ta sẽ sử dụng Ubuntu server 22.04 LTS. Các bản như 16 18 20.04 đều tương tự. Ko như các hướng dẫn khác trên mạng, tip này mình đã test chạy ok với TOR rồi nhé.

II. Cài đặt Nginx

Đầu tiên thì cần phải Gỡ Apache2 được cài sẵn trên Ubuntu
service apache2 stop — dừng
apt-get remove apache2* — xóa
whereis apache2 — xác đinh thư mục apache2
rm -rf /etc/apache2 — xóa thư mục apache2

apt-get update && apt-get upgrade -y

apt-get install nano net-tools wget zip unzip -y

Cài đặt Nginx:

apt-get install nginx -y

Trên Ubuntu 22.04, Nginx được cấu hình bắt đầu chạy khi cài đặt.

Nếu tường lửa ufw đang chạy, thì bạn cần phải cho phép kết nối với Nginx. Nginx tự đăng ký với ufw khi cài đặt. Do đó việc thực hiện trở nên đơn giản hơn.

apt install ufw

Cho phép lưu lượng truy cập trên cổng 80.

ufw allow 'Nginx HTTP'

Kiểm tra phiên bản nginx:

nginx -v

nginx version: nginx/1.17.10 (Ubuntu)

Truy cập IP máy chủ trên trình duyệt ta sẽ thấy như sau:

nếu còn hiển thị file index của apache2 thì vào xóa file index ở /var/www/html

III. Cài đặt hệ quản trị cơ sở dữ liệu

Trên thực tế với LEMP, bạn có thể sử dụng mysql hoặc mariadb đều được, bài này mình sẽ hướng dẫn với mariadb.

Trước khi cài đặt, ta sẽ gỡ phiên bản hiện tại của MariaDB trên máy để cài đặt mới.

Gỡ MariaDB hiện tại trên Ubuntu:

apt-get remove mariadb-server

Ở đây mình sử dụng MariaDB làm máy chủ cơ sở dữ liệu. Để cài đặt bạn sử dụng lệnh sau:

root@ubuntu:~# apt-get install mariadb-server mariadb-client -y

Cài xong bạn kiểm tra dịch vụ cũng như bật khởi động cùng hệ thống.

root@ubuntu:~# systemctl enable mariadb #Bật khởi động
root@ubuntu:~# systemctl start mariadb #Khởi động dịch vụ
root@ubuntu:~# systemctl status mariadb #Kiểm tra dịch vụ

● mariadb.service - MariaDB 10.6.7 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-05-13 15:09:50 +07; 4min 28s ago
Docs: man:mariadbd(8)
https://mariadb.com/kb/en/library/systemd/
Main PID: 3220 (mariadbd)
Status: "Taking your SQL requests now..."
Tasks: 8 (limit: 1034)
Memory: 60.1M
CPU: 575ms
CGroup: /system.slice/mariadb.service
└─3220 /usr/sbin/mariadbd

Cấu hình MariaDB

Chạy lệnh dưới để bắt đầu và mới đầu thì chưa có password nên nhấn Enter khi nó hỏi password nhé

root@ubuntu:~# mysql_secure_installation

Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] y #Thay đổi mật khẩu root mariaDB
New password: # Nhập mật khẩu vào nhé, nó sẽ không hiển thị ******* nhưng cứ nhập bình thường rồi nhấn Enter
Re-enter new password:
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

Kiểm tra phiên bản MariaDB
root@ubuntu:~# mariadb --version

mariadb Ver 15.1 Distrib 10.6.7-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper

 

IV. Cài đặt PHP

Không giống với Apache, Nginx không tích hợp hỗ trợ xử lý các tệp PHP. Vì vậy, ta cài đặt một ứng dụng riêng biệt để xử lý các tệp PHP. Chẳng hạn như PHP FPM (fastCGI process manager)

Nếu bạn muốn cài một bản php nào đó thì có thể thay lại số phiên bản cho phù hợp. Ví dụ:

apt install php7.4-fpm php7.4-common php7.4-mbstring php7.4-xmlrpc php7.4-soap php7.4-gd php7.4-xml php7.4-intl php7.4-mysql php7.4-cli php7.4-zip php7.4-curl

Kiểm tra phiên bản php

php -v

PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Ta sẽ thấy phiên bản php sau khi cài là 7.4.3 nếu bạn cài php7

Bây giờ ta đã cài đặt đủ các thành phần của LEMP stack. Nhưng vẫn cần phải thực hiện một số thay đổi về cấu hình để yêu cầu Nginx sử dụng PHP để xử lý nội dung.

Chú ý thay lại phần tô đỏ nhé.

Mở thư mục: /etc/nginx/sites-available/

nano /etc/nginx/sites-available/default

Xóa hết nội dung trong file này và thay lại nội dung dưới: (nhớ chỉnh lại phiên bản php7.4 cho đúng nhé)

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /home/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        # try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ /\.ht {
            deny all;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

Trong đó:

  • listen : Xác định cổng Nginx lắng nghe. Trong trường hợp này là cổng 80 (mặc định của HTTP)
  • root : Xác định gốc lưu trữ các tệp của trang web
  • index : thứ tự ưu tiên các file cấu hình, nếu chúng tồn tại
  • server_name : Xác định khối máy chủ nào được sử dụng. Nó trỏ đến tên miền hoặc IP public của bạn
  • location / : Kiểm tra sự tồn tại của các tệp khớp với uri. Nếu nginx không thể tìm thấy tệp thích hợp, nó sẽ trả về 404
  • location ~ \.php$ : Khai báo nơi xử lý PHP bằng cách trỏ Nginx vào tệp cấu hình fastcgi-php.conf và tệp php7.4-fpm.sock
  • location ~ /\.ht : Xử lí các tệp .htaccess mà Nginx không xử lí. Bằng cách deny all chỉ thị, nếu bất kì tệp .htaccess xảy ra để tìm đường vào tài liệu gốc thì chúng sẽ không được phục vụ cho khách truy cập.

Kiểm tra xem file cấu hình mới có lỗi gì không:

nginx -t

Nếu không có lỗi gì sẽ có thông báo tương tự như sau.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nếu có lỗi thì sẽ có thông báo lỗi.

Reload Nginx:

systemctl reload nginx

Toàn bộ source code mình muốn nó sẽ chạy ở thư mục /home/html/ thì mình tạo thêm thư mục bằng cách chạy lệnh này:

mkdir /home/html

cp /var/www/html/index.nginx-debian.html /home/html/index.nginx-debian.html

Tạo file info.php để check phiên bản ở /home/html/

nano /home/html/info.php

Thêm vào nội dung sau:

<?php
    phpinfo();
?>

Dùng trình duyệt gõ vào thanh URL

<ip vps>/info.php

Khi xuất hiện màn hình tương tự như hình có nghĩa là đã cài PHP thành công.

Sau khi cài đặt xong, bạn nên xóa file info.php, vì nó có thể cho người dùng trái phép một số gợi ý về cấu hình của trang web và giúp họ cố gắng đột nhập.

rm-rf /home/html/info.php

Nêu ko truy cập được thì: systemctl reload nginx và thử lại. Như vậy là đã cài và cấu hình web server nginx để chạy được các mã nguồn được rồi.

V. Cài đặt TOR và Cấu hình để chạy được trên mạng TOR

Chỉnh sửa file /etc/nginx/sites-available/default giống như phía dưới để chạy được với TOR nhé.

server {
  listen 127.0.0.1:80 default_server;

  root /home/html;
    index index.php index.html index.htm index.nginx-debian.html;

  server_name 127.0.0.1;
  # chỉnh phiên bản php lại cho phù hợp
    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

  location / {
    # try_files $uri $uri/ =404;
    # try_files $uri $uri/ /forums/index.php?$args;  # WordPress Permalinks nếu mã nguồn bạn để trong thư mục forums sub-folder thì bật dòng này nhá
    try_files $uri $uri/ /index.php?$args;
    allow 127.0.0.1;
    deny all;
  }
}

 

Sau đó lưu lại .
Các bạn mở tiếp file : nano /etc/nginx/nginx.conf
rồi thêm đoạn mã sau vào trong block http

server_name_in_redirect off;
server_tokens off;
port_in_redirect off;

Lưu lại  và khởi động lại Nginx bằng lệnh sau : systemctl restart nginx
Cài đặt và cấu hình Tor bằng lệnh dưới: (Hoặc tham khảo thêm ở bài viết này: https://support.torproject.org/apt/)

apt install apt-transport-tor -y

Sau đó, chạy lsb_release -c hoặc cat /etc/debian_version để kiểm tra phiên bản Hệ điều hành. Thay thế <DISTRIBUTION> bằng tên mã Hệ điều hành của bạn.

# For the stable version.
deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] tor://apow7mjfryruh65chtdydfmqfpj5btws7nbocgtaovhvezgccyjazpqd.onion/torproject.org <DISTRIBUTION> main
# For the unstable version.
deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] tor://apow7mjfryruh65chtdydfmqfpj5btws7nbocgtaovhvezgccyjazpqd.onion/torproject.org tor-nightly-main-<DISTRIBUTION> main

Ubuntu 20.04 thì sẽ có dạng: focal hoặc bullseye/sid nhưng bạn cứ kiểm tra cho chính xác nhé!

Ví dụ trên Ubuntu 22.04 của mình là bookworm/sid và mình thay lại như dưới:

# For the stable version.
deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] tor://apow7mjfryruh65chtdydfmqfpj5btws7nbocgtaovhvezgccyjazpqd.onion/torproject.org bookworm/sid main
# For the unstable version.
deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] tor://apow7mjfryruh65chtdydfmqfpj5btws7nbocgtaovhvezgccyjazpqd.onion/torproject.org tor-nightly-main-bookworm/sid main

và bạn cần thêm mấy dòng trên vào nano /etc/apt/sources.list — thư mục WinSCP: /etc/apt/

hoặc một tệp mới trong nano /etc/apt/sources.list.d/sources.list

Thêm khóa gpg được sử dụng để ký các gói bằng cách chạy lệnh sau tại dấu nhắc lệnh của bạn:

wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null

Cài đặt keyring tor và tor debian

Bây giờ hãy làm mới các nguồn của bạn và cố gắng cài đặt khóa tor và tor debian:

# apt update

apt install tor deb.torproject.org-keyring

Sau khi đã cài đặt xong Tor rồi thì chúng ta sẽ tiến hành cấu hình để run 1 dịch vụ ẩn Tor
Các bạn cần sao lưu file cấu hình tor mặc định để phòng khi cần phục hồi còn có cái mà dùng bằng lệnh sau:

cp /etc/tor/torrc /etc/tor/torrc.backup — Thư mục WinSCP: /etc/tor/

Sau đó mở file cấu hình bằng lệnh sau : nano /etc/tor/torrc  chép mấy dòng bên dưới và dán vào trên cùng của file và lưu lại

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:80

Mặc định các dịch vụ ẩn của tor, replay…đều không hoạt động, để kích hoạt chúng các bạn cần xóa bỏ dấu # ở các tùy chọn mình cần bật giống như trên.
Lưu lại và khởi động lại Tor bằng lệnh sau : service tor restart

Có 2 tập tin được tạo bởi Tor trong thu mục này: /var/lib/tor/hidden_service/

Đầu tiên là một tập tin hostname (tên máy chủ). Mở nó lên để lấy địa chỉ .onion của bạn bằng lệnh dưới:
cat /var/lib/tor/hidden_service/hostname

Tên miền .onion của mình là: vicoqlxclxrgcfgqtrg2uzubkn6v2aeyi4brj54uh3iuauq4hreridid.onion

Đó chính là địa chỉ để người khác truy cập vào website ở mạng Tor của bạn. Bây giờ thì vào bằng tên miền trên chứ không còn sử dụng được ipVPS nữa nhé.

Một tập tin khác chứa khóa riêng tư (private key). Mở nó lên và bạn sẽ thấy chúng gần giống như key SSH …Đó là một chuỗi mã hóa, với hai tệp này, bạn có thể di chuyển máy chủ của mình sang một máy chủ mới nếu cần thiết. Sao chép các tập tin này và giữ chúng an toàn nhá.

VI. Quản lý Database

Tạo Database

Bạn hãy truy cập vào mysql và tạo database mới cho website.

mysql -u root
CREATE DATABASE database_web1;
CREATE USER 'user_web1'@'localhost' IDENTIFIED BY 'PasssWord12345678';
GRANT ALL PRIVILEGES ON database_web1.* TO 'user_web1'@'localhost';

hoặc tạo database bằng vài lệnh đơn giản như sau:

# mysql -u root
# mysql -u root -p

  • Tạo Database
    MariaDB [(none)]> CREATE DATABASE tendb;
  • Tạo User
    MariaDB [(none)]> CREATE USER 'tenbuser'@'localhost' IDENTIFIED BY 'Password12345678';
  •  Gán quyền User Database
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON tendb.* TO 'tenbuser'@'localhost';
  • Reload all the privileges
    MariaDB [(none)]> FLUSH PRIVILEGES;
  • Show Database
    MariaDB [(none)]> show databases;

Sau khi upload mã nguồn vào thư mục /home/html thì nhứ chmod lại nhé

chown -Rf nginx:nginx /home/html/
chown -Rf www-data.www-data /home/html/

==============restore domain

Sao lưu các file trong thư mục hidden_service domain cũ: /var/lib/tor/hidden_service

Qua Server mới và xóa các file trong rm -rf /var/lib/tor/hidden_service –cẩn thận khi chạy lệnh này nhá.
Chép file trong thư mục đã sao lưu trên vào /var/lib/tor/hidden_service ở Server mới

Khởi động lại tor bằng lệnh: /etc/init.d/tor restart

Và sau đó, nó sẽ tạo một url TOR và tệp keyfile mới cho dịch vụ của bạn, nó sẽ không đụng đến các tệp web của bạn.

==============Tạo tên miền Onion mới
Nếu bạn muốn tạo một tên miền mới thì xóa hết file trong /var/lib/tor/hidden_service
Khởi động lại tor: /etc/init.d/tor restart
Reload nginx: systemctl reload nginx
Khởi động lại vps luôn: reboot

Và sau đó, nó sẽ tạo một url TOR và tệp keyfile mới cho dịch vụ của bạn, nó sẽ không đụng đến các tệp web của bạn.

Vậy là xong. Chúc bạn thành công!

M dành mấy tiếng để test + viết bài nên leech đi đâu nhớ ghi nguồn nè: https://hoanggiangnam.com/lemp-tor

Leave a Reply