BlackDrag0n
Moderator
- Joined
- Jan 4, 2021
- Messages
- 21
- Reaction score
- 15
- Points
- 3
Bảo mật traffic HTTP bằng SSL termination và reverse proxy NGINX
Nội dung:
GIới thiệu SSL Termination:
- SSL Termination là một giải pháp giúp bảo vệ traffic của người dùng bằng giao thức HTTPS thông qua một server NGINX. Server NGINX sẽ đứng ra làm endpoint SSL cho người dùng truy cập vào. Traffic từ NGINX đến Server có thể là HTTP hoặc HTTPS.
Chuẩn bị:
- Một Server Linux cài đặt Nginx ( Ở đây mình dùng Fedora)
- Certificate SSL ( Sử dụng Let's Encrypt)
Tiến hành:
Trên Server Linux thực hiện cài đặt các package cần dùng:
Bash:
# Cài đặt Nginx
dnf install nginx
# Cài đặt certbot
dnf install certbot python-certbot-nginx
Bash:
#Mở port 80 trên Firewall
firewall-cmd --addport=80/tcp --pernament
#Mở port 443 trên Firewall
firewall-cmd --addport=443/tcp --pernament
#Restart Firewall
firewall-cmd --reload
Bash:
setenforce 0
## Cần reboot Server
Sau khi reboot lại Server, tiến hành cấu hình Nginx. Chỉnh sửa file /etc/nginx/nginx.conf như hình.
include /etc/nginx/conf.d/*.conf sẽ lấy tất cả các cấu hình trong thư mục conf.d/
Lưu lại và tạo một file config trong thư mục conf.d/ . Ở đây mình sẽ tạo file tên reverseproxy.conf
NGINX:
# vim /etc/nginx/conf.d/reverseproxy.conf
server {
server_name server1.securityzone.vn;
location /{
proxy_pass http://<IP Server 1>;
}
}
server {
server_name server2.securityzone.vn;
location /{
proxy_pass http://<IP Server 2>;
}
}
Vì thế cần thêm một số thuộc tính nữa vào file reverseproxy.conf
NGINX:
server {
server_name server1.securityzone.vn;
location /{
proxy_pass http://<IP Server 1>;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header SSL_PROTOCOL $ssl_protocol;
}
listen 80;
}
server {
server_name server2.securityzone.vn;
location /{
proxy_pass http://<IP Server 2>;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header SSL_PROTOCOL $ssl_protocol;
}
listen 80;
}
Bash:
systemctl start nginx
systemctl enable nginx
Sử dụng certbot để lấy SSL Certificate :
Yêu cầu:
- Cần có tên miền và trỏ cả 2 tên miền cấu hình về server Nginx
- Mở port 80 và 443 trên Server nếu sử dụng method là http-challenge
- Cấu hình thêm DNS để challenge nếu không mở được port 80 trên server để sử dụng method là dns-challenge
=> Ở đây mình đã mở sẵn port 80 và 443 nên sẽ sử dụng http-challenge
Bash:
certbot --nginx -d server1.securityzone.vn -d server2.securityzone.vn
Bash:
systemctl restart nginx
Kiểm tra thành quả của mình sau khi cấu hình
Last edited: