Tomcat được biết đến là một máy chủ cho các ứng dụng web được sử dụng để triển khai các ứng dụng web được viết bằng Java. Tuy nhiên đây vẫn chưa phải là một máy chủ web hoàn chỉnh. Vì vậy, việc bảo mật Tomcat bằng Apache hoặc Nginx là một phương pháp phổ biến và thường được dùng để giúp bạn bảo vệ và cung cấp đầy đủ tính năng cho ứng dụng. Bài viết này sẽ hướng dẫn bạn bảo mật Tomcat 10 bằng Apache hoặc Nginx trên Ubuntu 20.04.
Giới thiệu
Apache Tomcat là một máy chủ web và là một bộ chứa servlet được sử dụng để vận hành các ứng dụng được xây dựng bằng Java. Tomcat là một implementation có mã nguồn mở của Jakarta Servlet, Jakarta Server Pages và các công nghệ khác trên nền tảng Jakarta EE.
Khi tiến hành cài đặt, mặc định Tomcat sẽ đáp ứng cho các lưu lượng truy cập không được mã hóa, bao gồm mật khẩu hoặc các loại dữ liệu nhạy cảm khác. Để bảo mật cho server Tomcat, người dùng hay bạn sẽ cần phải tích hợp thêm chứng chỉ Let’s Encrypt TLS cho tất cả các kết nối HTTP của mình. Để kết hợp với TLS, bạn có thể thiết lập một reverse proxy với các chứng chỉ đã được cấu hình trước, chứng chỉ này sẽ giúp kết nối an toàn với phía Client và định tuyến các requests tới server Tomcat.
Mặc dù các kết nối liên quan đến TLS có thể được cấu hình ngay chính bên trong Tomcat, nhưng điều đó thường không được khuyến khích thực hiện vì Tomcat không có sẵn các bản cập nhật bảo mật và tiêu chuẩn mới nhất của TLS.
Trong bài hướng dẫn này, bạn sẽ tiến hành cấu hình kết nối đến Tomcat bằng Apache hoặc Nginx. Vì chúng đều phổ biến và được thử nghiệm tốt, trong khi các phần mềm khác giúp tự động cung cấp chứng chỉ Let’s Encrypt, chẳng hạn như certbot
lại không hỗ trợ cho Tomcat. Nếu bạn muốn dùng thử cả Apache và Nginx, bạn sẽ cần có các máy chủ riêng biệt cho từng loại.
Yêu cầu tiên quyết để bảo mật Tomcat 10 bằng Apache hoặc Nginx trên Ubuntu 20.04
Để theo dõi bài hướng dẫn, bạn cần thỏa các điều kiện sau:
- Một máy chủ Ubuntu 20.04 có tài khoản người dùng non-root được cấp quyền
sudo
và tường lửa được bật. - Tomcat 10 được đã cài đặt trên máy chủ của bạn (Hướng dẫn chi tiết tại đây)
- Tên miền đã được đăng ký cho máy chủ.
- Bản ghi DNS trỏ đến địa chỉ IP public của máy chủ của bạn.
Việc bảo mật Tomcat 10 trên Ubuntu 20.04 rất quan trọng khi triển khai ứng dụng web của bạn. Để đảm bảo an toàn và bảo mật cho máy chủ của bạn, việc sử dụng một VPS chất lượng là một lựa chọn lý tưởng.
Vietnix đang cung cấp các gói VPS đa dạng để phù hợp với nhu cầu và ngân sách của bạn như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS NVMe, VPS GPU.
Sử dụng VPS của Vietnix, bạn sẽ có được môi trường ảo riêng tư mạnh mẽ và an toàn, cho phép bạn hoàn toàn kiểm soát và quản lý máy chủ của mình. Từ đó, bạn có thể dễ dàng triển khai Tomcat 10 trên Ubuntu 20.04 và áp dụng các biện pháp bảo mật như sử dụng Apache hoặc Nginx. Đảm bảo rằng ứng dụng web của bạn được vận hành một cách an toàn, hiệu quả và bảo mật.
Liên hệ với Vietnix để tìm hiểu chi tiết và lựa chọn gói VPS phù hợp với bạn.
Lựa chọn 1: Sử dụng Apache làm Reverse Proxy
Yêu cầu
- Apache được cài đặt trên máy chủ Ubuntu với các virtual host files cho tên miền của bạn. (Hướng dẫn chi tiết cách cài đặt Apache Virtual Host trên Ubuntu 20.04 tại đây)
- Chứng chỉ của Let’s Encrypt TLS được cài đặt trên máy chủ cho tên miền.
Các bước tiến hành
Bước 1: Cấu hình Virtual Host trên Apache
Ở bước này, bạn sẽ chỉ cần chỉnh sửa lại cấu hình lưu lượng HTTPS của mình, nếu bạn đã thỏa các điều kiện tiên quyết trên.
Để xem các cấu hình hiện có, hãy chạy lệnh sau:
sudo apache2ctl -S
Output sẽ tương tự như thế này:
Output
...
VirtualHost configuration:
*:443 your_domain (/etc/apache2/sites-enabled/your_domain-le-ssl.conf:2)
*:80 your_domain (/etc/apache2/sites-enabled/your_domain.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
File cung cấp cấu hình HTTPS là /etc/apache2/sites-enabled/your_domain-le-ssl.conf
. Bạn hãy mở file đó để chỉnh sửa, hãy thay thế your_domain
bằng tên miền của bạn:
sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf
File sẽ trông giống như thế này:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName your_domain
ServerAlias www.your_domain
DocumentRoot /var/www/your_domain.conf
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Thêm các dòng sau vào Virtualhost
:
...
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
...
Các chỉ thị trên sẽ giúp Apache kích hoạt lưu lượng hai chiều giữa Tomcat và vùng bên ngoài trong khi vẫn nguyên được các giá trị headers của HTTP. Khi hoàn tất, hãy lưu và đóng file.
Đến đây thì bạn đã hoàn tất việc cấu hình cho Apache để chuyển hướng các lưu lượng truy cập tới Tomcat. Tiếp theo, bạn sẽ tiến hành bật chức năng đó lên.
Bước 2: Kiểm tra cấu hình mới của Apache
Trong bước này, bạn sẽ bật mod_proxy
và mod_proxy_http
, đây là các module của Apache giúp hỗ trợ proxy kết nối.
Bạn hãy chạy các lệnh sau để kích hoạt chúng:
sudo a2enmod proxy
sudo a2enmod proxy_http
Sau đó, kiểm tra lại cấu hình bằng lệnh như sau:
sudo apache2ctl configtest
Output phải kết thúc bằng Syntax OK
. Nếu có bất kỳ lỗi nào xảy ra, bạn hãy kiểm tra lại các cấu hình mà bạn đã thêm vào trước đó.
Cuối cùng, hãy khởi động lại máy chủ web Apache:
sudo systemctl restart apache2
Đến đây, bạn đã hoàn thành việc bảo mật cho server Tomcat của mình bằng chứng chỉ TLS khi truy cập đến your_domain
từ trình duyệt web. Bạn có thể bỏ qua phần Nginx dưới đây và tiến hành làm theo bước kế tiếp sau đó để giúp hạn chế bớt các quyền truy cập vào Tomcat.
Lựa chọn 2: Sử dụng NginX làm Reverse Proxy
Yêu cầu
- Nginx được cài đặt cùng với một server block cho miền của bạn. Phần này sẽ sử dụng
/etc/nginx/sites-available/your_domain
làm ví dụ. - Chứng chỉ của Let’s Encrypt TLS được cài đặt trên máy chủ cho tên miền. Tương tự với yêu cầu của lựa chọn ở trên khi sử dụng Apache.
Các bước tiến hành
Bước 1: Điều chỉnh cấu hình khối máy chủ NginX
Trong bước này, bạn sẽ sửa đổi cấu hình server block cho tên miền mà bạn đã tạo trong phần điều kiện tiên quyết để Nginx nhận biết Tomcat.
Đầu tiên, bạn hãy mở file cấu hình để chỉnh sửa bằng lệnh sau:
sudo nano /etc/nginx/sites-available/your_domain
Tiếp theo, hãy thêm các dòng sau vào đầu file:
upstream tomcat {
server 127.0.0.1:8080 fail_timeout=0;
}
Khối upstream
giúp xác định cách kết nối với Tomcat, cho phép Nginx biết vị trí của Tomcat.
Tiếp theo, trong server
được xác định cho cổng 443, hãy thay thế nội dung của khối location/
bằng các chỉ thị như sau:
server {
...
location / {
include proxy_params;
proxy_pass http://tomcat/;
}
...
Hai dòng này xác định rằng tất cả lưu lượng truy cập sẽ đi đến khối upstream
có tên tomcat
mà bạn vừa xác định. Song, bạn cũng sẽ yêu cầu giữ nguyên lại tất cả các tham số HTTP trong quá trình chuyển hướng này. Hãy lưu và đóng tệp khi hoàn tất.
Bây giờ, bạn sẽ cần kiểm tra lại cấu hình này bằng cách truy cập Tomcat tại tên miền của bạn.
Bước 2: Kiểm tra cấu hình mới của NginX
Để kiểm tra xem các thay đổi cấu hình của bạn có gây ra lỗi cú pháp hay không, hãy chạy lệnh sau:
sudo nginx -t
Nếu đã cấu hình thành công, output của các bạn sẽ tương tự như dưới đây:
Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Một lần nữa, nếu có lỗi xảy ra, bạn hãy quay lại các bước trước để xem lại cấu hình.
Sau đó, khởi động lại Nginx để cập nhật cấu hình mới:
sudo systemctl restart nginx
Giờ đây, bạn có thể kết nối đến server Tomcat của mình khi truy cập đến tên miền đã được bảo mật bằng chứng chỉ TLS trên trình duyệt.
https://your_domain
Tiến hành hạn chế quyền truy cập vào Tomcat bằng Apache hoặc NginX
Sau khi bạn đã kết nối được đến Tomcat tại tên miền của mình thông qua máy chủ proxy có chứng chỉ TLS, bây giờ bạn đã có thể tăng cường bảo mật cho Tomcat của mình bằng cách hạn chế quyền truy cập vào server đó.
Tất cả các request HTTP tới Tomcat cần phải được đi qua proxy, nhưng bạn có thể cấu hình Tomcat để chỉ lắng nghe các kết nối trên local loopback interface. Cấu hình này sẽ đảm bảo rằng các bên bên ngoài không thể thực hiện được các request trực tiếp tới Tomcat.
Trước hết, bạn hãy mở tệp server.xml
để chỉnh sửa (nằm trong thư mục cấu hình Tomcat):
sudo nano /opt/tomcat/conf/server.xml
Tìm định nghĩa Connector
trong Service
có tên Catalina
, giống như:
...
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
...
Để hạn chế quyền truy cập vào local loopback interface, bạn hãy chỉ định 127.0.0.1
để làm đối số cho address
:
...
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
address="127.0.0.1"
redirectPort="8443" />
...
Sau khi hoàn tất, hãy lưu và đóng file.
Để cập nhật các thay đổi trên, bạn hãy khởi động lại Tomcat bằng cách chạy lệnh sau:
sudo systemctl restart tomcat
Lúc này, server Tomcat của bạn chỉ có thể được truy cập thông qua proxy của máy chủ web Apache hoặc Nginx. Apache hoặc Nginx với vai trò là một proxy sẽ giúp bảo mật cho Tomcat khỏi các mạng từ bên ngoài.
Nếu cần thuê VPS tốc độ cao, ổn định để triển khai các dự án, bạn có thể lựa chọn Vietnix. Đây là nhà cung cấp dịch vụ VPS uy tín hàng đầu tại Việt Nam hiện nay.
- Vietnix có hơn 11 năm kinh nghiệm trong lĩnh vực VPS.
- Đã phục vụ hơn 50.000 khách hàng cá nhân và doanh nghiệp.
- Đã kích hoạt thành công hơn 100.000 dịch vụ.
- 97% khách hàng sau khi sử dụng dịch vụ đưa ra đánh giá 5 sao.
- 89% khách hàng đã duy trì sử dụng dịch vụ đến thời điểm hiện tại, cho thấy khách hàng rất hài lòng về dịch vụ tại Vietnix.
- Đạt giải thưởng Thương hiệu Việt Nam xuất sắc vào năm 2022.
Để được hỗ trợ chi tiết, bạn hãy liên hệ với Vietnix theo những thông tin dưới đây.
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
Lời kết
Trong bài hướng dẫn này, bạn đã thiết lập một server Tomcat ở sau của máy chủ proxy được bảo mật bằng chứng chỉ Let’s Encrypt TLS. Bạn cũng tiến hành hạn chế các truy cập trực tiếp từ bên ngoài vào Tomcat thông qua giao local loopback interface (localhost), cho nên chỉ có các ứng dụng cục bộ, chẳng hạn như Apache hoặc Nginx, mới có thể truy cập được. Cảm ơn bạn đã theo dõi bài viết.