Cài LEMP + Tor trên Ubuntu 20.04

Cập nhật hệ thống và cài các gói cần thiết

root@ubuntu:~# apt-get update && apt-get upgrade -y

root@ubuntu:~#  apt-get install nano net-tools wget zip unzip -y

1. Cài đặt NGINX

root@ubuntu:~# apt-get install nginx -y

Tiếp theo bạn sử dụng 3 lệnh sau để kích hoạt và khởi động nginx.

root@ubuntu:~# systemctl enable nginx #Bật khởi động cùng hệ thống

root@ubuntu:~# systemctl start nginx #Khởi động nginx

root@ubuntu:~# systemctl status nginx #Kiểm tra trạng thái

Để kiểm tra phiên bản nginx được cài vào là phiên bản bao nhiêu bạn có thể sử dụng lệnh dưới để kiểm tra.:

root@ubuntu:~# nginx -v

Mở port 80, 443

Trường hợp nếu hệ thống bạn có cài firewall. Bạn hãy mở port 80 trên firewall để truy cập.

ufw allow 'Nginx HTTP'

Đối với iptables:

root@ubuntu:~# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

root@ubuntu:~# iptables -I INPUT -p tcp --dport 443 -j ACCEPT

2. Cài đặt máy chủ cơ sở dữ liệu MariaDB

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

root@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ụ

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:
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

3. Cài đặt PHP

Cài phiên bản chỉ định là PHP 7.4:

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

root@ubuntu:~# systemctl enable php7.4-fpm #Bật khởi động cùng hệ thống
root@ubuntu:~# systemctl start php7.4-fpm #Khởi động PHP
root@ubuntu:~# systemctl status php7.4-fpm #Kiểm tra PHP

Kiểm tra lại phiên bản PHP php -v

Hoặc cài phiên bản PHP chỉ định là PHP8.1 thì bạn thay số tương ứng vào lệnh trên nhé!

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.

 

Backup file config defaultcp -a /etc/nginx/sites-available/default{,.orig}

Thư mục WinSCP: /etc/nginx/sites-available/

root@ubuntu:~# nano /etc/nginx/sites-available/default

Thay toàn bộ nội dung bên trong đó bằng nội dung sau:

server {
    listen 80;
    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;
    server_name _;
    location / {
            try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
    location ~ /\.ht {
            deny all;
    }
}

 

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:

root@ubuntu:~# 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:

root@ubuntu:~# systemctl reload nginx

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

root@ubuntu:~# nano /var/www/html/info.php

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

<?php
phpinfo();
?>

Gõ ip_vps vào thanh URL trong trình duyệt:

<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.

root@ubuntu:~# rm -rf /var/www/html/info.php

Trỏ domain của bạn về ip nữa là chạy web được rồi đấy.

Thư mục chính để chứa code là /var/www/html/

 

4. Cài TOR

root@ubuntu:~# apt install tor

Sau khi Tor được cài đặt, chúng ta cần chỉnh sửa nhanh tệp cấu hình Tor có tên là torrc, nó thường nằm trong /etc/tor/torrc. Hãy loại bỏ nó và bắt đầu mới. Thực hiện các lệnh sau.
root@ubuntu:~# rm -f /etc/tor/torrc

Copy và chạy 2 lệnh này 1 thời điểm nhé:

echo "HiddenServiceDir /var/lib/tor/hidden_service/" >> /etc/tor/torrc
echo "HiddenServicePort 80 127.0.0.1:80" >> /etc/tor/torrc

Bây giờ bắt đầu Tor

root@ubuntu:~# service tor stop

root@ubuntu:~# service tor start —-này sẽ tạo địa chỉ .onion mới!

root@ubuntu:~# service nginx reload

root@ubuntu:~# service tor status —- sử dụng cái này để kiểm tra xem tor đã khởi động chính xác chưa.

root@ubuntu:~# cat /var/lib/tor/hidden_service1/hostname —- để hiển thị tên miền tor 

Bạn có thể biết Tor đang chạy đúng cách bằng cách sử dụng

root@ubuntu:~#service tor status -l

nếu nó hiển thị bất kỳ lỗi nào và tor chưa khởi động, bạn cần thực hiện lại các bước của mình để tìm ra sự cố, đó có thể là một vấn đề đơn giản như sai thời gian đồng hồ trên máy chủ, hãy kiểm tra nhật ký Tor để biết chi tiết.

Nếu mọi thứ suôn sẻ, bạn sẽ có một tệp được tạo tự động có chứa tên máy chủ .onion của bạn, hãy làm

root@ubuntu:~# cat /var/lib/tor/hidden_service/hostname

và nhấn enter để hiển thị tên miền TOR của bạn.

Ví dụ ra tên miền: nhr2fiise3uc2ajygkjrgae3f5c.onion

 

Chạy nhiều trang web TOR trên 1 Server

Nếu bạn muốn thêm nhiều dịch vụ Tor, chỉ cần chạy lại hai lệnh dưới: (và thêm vhost nữa nhá)

echo "HiddenServiceDir /var/lib/tor/hidden_service/" >> /etc/tor/torrc
echo "HiddenServicePort 80 127.0.0.1:80" >> /etc/tor/torrc

Nhưng thay đổi vị trí thư mục thành hidden_service1, hidden_service2, hidden_service3

 echo "HiddenServiceDir /var/lib/tor/hidden_service2/" >> /etc/tor/torrc

Nếu bạn muốn thêm một cái khác, chỉ cần thay đổi lại thư mục và khởi động lại Tor. Bạn cũng có thể cần phải khởi động lại nginx để hiển thị trang web của mình.

root@ubuntu:~# service tor stop

root@ubuntu:~# service tor start <———-này sẽ tạo địa chỉ .onion mới!

root@ubuntu:~# service nginx reload

root@ubuntu:~# cat /var/lib/tor/hidden_service2/hostname <———- để hiển thị tên miền thứ 2 tor mới thêm

Sau khi ra tên miền mới rồi thì thêm vào vhost – làm bước 5 ở dưới nhé

5. Cấu hình vhost – thêm tên miền

Tạo thư mực /home/nhr2fiise3uc2ajygkjrgae3f5c.onion/public_html để chứa mã nguồn website. Ở đây mình sẽ tạo ở thư mục HOME/ cho dễ sử dụng nhé:

root@ubuntu:~# mkdir -p /home/nhr2fiise3uc2ajygkjrgae3f5c.onion/public_html
root@ubuntu:~#  nano /home/nhr2fiise3uc2ajygkjrgae3f5c.onion/public_html/index.html

<html>
    <body>
        <center><h1>Hello nhr2fiise3uc2ajygkjrgae3f5c.onion</h1></center>
    </body>
</html>

Chmod – Phân quyền thư mục

root@ubuntu:~#  chown -R www-data:www-data /home/* — đây là chmod toàn bộ thư mục có trong /home/

Cấu hình nginx – nginx.conf

Đường dẫn các file cấu hình nginx ở thư mục này: /etc/nginx/sites-available/

Tạo file cấu hình nginx cho tên miền nhr2fiise3uc2ajygkjrgae3f5c.onion tại /etc/nginx/sites-available/nhr2fiise3uc2ajygkjrgae3f5c.onion bằng lệnh:

root@ubuntu:~# nano /etc/nginx/sites-available/nhr2fiise3uc2ajygkjrgae3f5c.onion

Nội dung:

server {
        listen 127.0.0.1:80;

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

        server_name nhr2fiise3uc2ajygkjrgae3f5c.onion;

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

        location ~ /\.ht {
                deny all;
            }

        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;
        }
}

Nếu là domain bình thường thì để dạng như sau:

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

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

        server_name hoanggiangnam.com www.hoanggiangnam.com;

        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;
        }
}

Nhớ thay tên miền của bạn vào và sửa lại phiên bản php ở dòng này fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

Tạo một symbolic link để liên kết file /etc/nginx/sites-available/nhr2fiise3uc2ajygkjrgae3f5c.onion sang thư mục /etc/nginx/sites-enabled/. Nginx sẽ đọc các file cấu hình tại thư mục /etc/nginx/sites-enabled/ mỗi khi khởi động.
root@ubuntu:~#  ln -s /etc/nginx/sites-available/nhr2fiise3uc2ajygkjrgae3f5c.onion /etc/nginx/sites-enabled/
root@ubuntu:~#  nginx -t

Kết quả  nếu output cũng như bên dưới thì bạn đã cấu hình chính xác rồi đấy
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Sau đó reboot lại. Còn nếu bị lỗi như dưới

root@ubuntu:

~# nginx -t
nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 64
nginx: configuration file /etc/nginx/nginx.conf test failed

thì fix bằng cách vào /etc/nginx/nginx.conf và thêm dòng  server_names_hash_bucket_size 128; vào bên trên # server_names_hash_bucket_size 64;

server_names_hash_bucket_size 128; # server_names_hash_bucket_size 64; # server_name_in_redirect off;

root@ubuntu:~# service nginx restart

  • Nếu vẫn lỗi thì tăng server_names_hash_bucket_sizetheo các bước 128, 256, 512, v.v. (mỗi lần tăng 2 lần). ví dụ.server_names_hash_bucket_size 128;
  • tham khảo thêm ở đây: https://stackoverflow.com/quest…

Khởi động lại Web Server bằng lệnh
root@ubuntu:~#  systemctl restart nginx

root@ubuntu:~# nginx -t

Nếu ko xãy ra lỗi gì thì làm bước tiếp theo là cài TOR

(Thêm một tên miền khác vào nữa thì lặp lại các bước Chạy nhiều trang web TOR trên 1 Server + tạo VHOST )

6. Tạo Database

Xem thêm:

Một số bài tương tự:

 

Leave a Reply