Tôi có một máy chủ LEMP tại nhà chạy Ubuntu 22.02 và một phiên bản đám mây Oracle chạy Ubuntu 20.04. Phiên bản đám mây Oracle đang hoạt động như một máy chủ Wireguard. Máy chủ LEMP ở nhà đang đóng vai trò là Máy khách Wireguard và đang được tạo đường hầm thông qua máy chủ Oracle để lấy địa chỉ IP khác với địa chỉ IP ở nhà của tôi. Tôi đã thiết lập cấu hình Máy khách/Máy chủ Wireguard này cho mỗi hướng dẫn Linuxbabe.com này. Máy khách bảo vệ dây đang hoạt động và có thể ping thành công Máy chủ Oracle. Máy chủ LEMP (máy khách Wireguard) cũng phân giải thành công địa chỉ IP Công cộng của Máy chủ Oracle. Tôi cũng đã cài đặt openresolv trên Máy khách VPN và bind9 trên máy chủ VPN để sử dụng DNS của Phiên bản Oracle từ máy chủ LEMP (Máy khách Wireguard). Công ty đăng ký tên miền của tôi đang trỏ DNS của nó tới cùng một IP với Máy chủ Oracle của tôi.Bây giờ, tôi đang cố cài đặt prosody trên máy chủ LEMP và không thể lấy chứng chỉ thông qua plugin certbot nginx. Có vẻ như có thứ gì đó đang chặn cổng 80/443 và cổng 80/443 đó không mở. Khi tôi chạy (trên máy chủ LEMP của mình), lệnh:
sudo certbot -v --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Tôi nhận được đầu ra lỗi sau:
Lưu nhật ký gỡ lỗi vào /var/log/letsencrypt/letsencrypt.log
Các plugin được chọn: Trình xác thực nginx, Trình cài đặt nginx
Yêu cầu chứng chỉ cho chat.example.com
Thực hiện các thử thách sau:
thử thách http-01 cho chat.example.com
Đang chờ xác minh...
Thử thách không thành công đối với miền chat.example.com
thử thách http-01 cho chat.example.com
Certbot không thể xác thực một số tên miền (trình xác thực: nginx). Cơ quan cấp chứng chỉ đã báo cáo các vấn đề sau:
Tên miền: chat.example.com
Loại: kết nối
Chi tiết: 150.136.56.232: Đang tìm nạp http://chat.example.com/.well-known/acme-challenge/GlzBhvxB_hDYefMW48qaHq3I-qc_NArj7VWml54bofM: Kết nối bị từ chối
Gợi ý: Cơ quan cấp chứng chỉ không thể xác minh các thay đổi cấu hình nginx tạm thời do Certbot thực hiện. Đảm bảo rằng các miền được liệt kê trỏ đến máy chủ nginx này và nó có thể truy cập được từ internet.
Thử thách dọn dẹp
Một số thử thách đã thất bại.
Yêu cầu trợ giúp hoặc tìm kiếm giải pháp tại https://community.letsencrypt.org. Xem tệp nhật ký /var/log/letsencrypt/letsencrypt.log hoặc chạy lại Certbot với -v để biết thêm chi tiết.
Tôi đang sử dụng UFW làm tường lửa của mình và trạng thái UFW của tôi trên Máy chủ LEMP (Máy khách VPN) là:
Trạng thái: Đang hoạt động
Đến hành động từ
-- ------ ----
[ 1] 22/tcp CHO PHÉP TRONG my.local.lan.ip/24
[ 2] 43211/tcp CHO PHÉP TRONG my.local.lan.ip/24
[ 3] 5222,5269/tcp CHO PHÉP Ở mọi nơi
[ 4] 80.443/tcp CHO PHÉP Ở mọi nơi
[ 5] 5222,5269/tcp (v6) CHO PHÉP TRONG Anywhere (v6)
[ 6] 80.443/tcp (v6) CHO PHÉP Ở Mọi Nơi (v6)
Trạng thái UFW của tôi trên Oracle Cloud Instance là:
Trạng thái: Đang hoạt động
Đến hành động từ
-- ------ ----
[ 1] Mọi nơi CHO PHÉP TRONG 10.10.10.0/24
[ 2] 22/tcp CHO PHÉP TRONG my.home.public.ip
[ 3] 22/tcp CHO PHÉP TRONG my.work.public.ip
[ 4] 5222,5269/tcp CHO PHÉP Ở mọi nơi
[ 5] 51820/udp CHO PHÉP TRONG my.home.public.ip
[ 6] 80.443/tcp CHO PHÉP Ở mọi nơi
[ 7] 5222,5269/tcp (v6) CHO PHÉP TRONG Anywhere (v6)
[ 8] 80,443/tcp (v6) CHO PHÉP VÀO Mọi Nơi (v6)
Cổng 51820/udp là cổng bảo vệ dây của tôi cho cả Phiên bản Oracle, cũng như Máy chủ Lemp. Tôi cũng đã chuyển tiếp địa chỉ IP công cộng của mình trên Phiên bản Oracle tới máy khách VPN để máy khách có thể gửi và nhận trên cùng một cổng công khai mà Phiên bản Oracle sử dụng. Dưới đây là tệp /etc/ufw/b Before.rules của tôi. Các sửa đổi chuyển tiếp cổng mà tôi đã thực hiện nằm dưới các nhận xét có tiêu đề "Linuxbabe...".
#
# quy.trước
#
# Quy tắc nên được chạy trước dòng lệnh ufw thêm quy tắc. Tập quán
# quy tắc nên được thêm vào một trong các chuỗi sau:
# ufw-trước-đầu-vào
# ufw-trước-đầu ra
# ufw-trước-chuyển tiếp
#
# Đừng xóa những dòng bắt buộc này, nếu không sẽ có lỗi
*lọc
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-trước-chuyển tiếp - [0:0]
:ufw-not-local - [0:0]
# Kết thúc dòng bắt buộc
# cho phép tất cả trên loopback
-A ufw-before-input -i lo -j CHẤP NHẬN
-A ufw-before-output -o lo -j CHẤP NHẬN
# nhanh chóng xử lý các gói mà chúng tôi đã có kết nối
-A ufw-before-input -m conntrack --ctstate LIÊN QUAN, THÀNH LẬP -j CHẤP NHẬN
-A ufw-before-output -m conntrack --ctstate LIÊN QUAN, THÀNH LẬP -j CHẤP NHẬN
-A ufw-before-forward -m conntrack --ctstate LIÊN QUAN, THÀNH LẬP -j CHẤP NHẬN
# hủy các gói KHÔNG HỢP LỆ (ghi nhật ký các gói này ở cấp độ log trung bình trở lên)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-Một ufw-before-input -m conntrack --ctstate INVALID -j DROP
# mã icmp ok cho INPUT
-A ufw-before-input -p icmp --icmp-type Destination-unreachable -j CHẤP NHẬN
-A ufw-before-input -p icmp --icmp-type time-exceeded -j CHẤP NHẬN
-Một ufw-before-input -p icmp --icmp-type tham số-vấn đề -j CHẤP NHẬN
-A ufw-before-input -p icmp --icmp-type echo-request -j CHẤP NHẬN
# ok mã icmp cho FORWARD
-A ufw-before-forward -p icmp --icmp-type Destination-unreachable -j CHẤP NHẬN
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j CHẤP NHẬN
-A ufw-before-forward -p icmp --icmp-type tham số-vấn đề -j CHẤP NHẬN
-A ufw-before-forward -p icmp --icmp-type echo-request -j CHẤP NHẬN
## Hướng dẫn Linuxbabe
# cho phép chuyển tiếp cho mạng đáng tin cậy
-A ufw-before-forward -s 10.10.10.0/24 -j CHẤP NHẬN
-A ufw-trước-chuyển tiếp -d 10.10.10.0/24 -j CHẤP NHẬN
# cho phép máy khách dhcp hoạt động
-A ufw-before-input -p udp --sport 67 --dport 68 -j CHẤP NHẬN
#
# ufw-không cục bộ
#
-A ufw-before-input -j ufw-not-local
# nếu ĐỊA PHƯƠNG, TRẢ LẠI
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
# nếu ĐA NĂNG, TRẢ LẠI
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
# nếu PHÁT SÓNG, TRỞ LẠI
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
# tất cả các gói không cục bộ khác bị loại bỏ
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
# cho phép MULTICAST mDNS khám phá dịch vụ (đảm bảo dòng MULTICAST ở trên
# không được chú thích)
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j CHẤP NHẬN
# cho phép MULTICAST UPnP khám phá dịch vụ (đảm bảo dòng MULTICAST ở trên
# không được chú thích)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j CHẤP NHẬN
# không xóa dòng 'CAM KẾT' nếu không các quy tắc này sẽ không được xử lý
LÀM
### Linuxbabe - Hướng dẫn UFW
## Quy tắc bảng NAT
* tự nhiên
# Định tuyến trước Nat
:CHẤP NHẬN TRƯỚC [0:0]
# !http! Chuyển tiếp oracle.server.public.ip (IP công cộng của máy chủ) Cổng TCP 80 đến 10.10.10.2:80 (IP máy khách VPN)
-A PREROUTING -i ens3 -d oracle.server.public.ip -p tcp --dport 80 -j DNAT --to-destination 10.10.10.2:80
# !HTTPS! Chuyển tiếp oracle.server.public.ip (IP công cộng của máy chủ) Cổng TCP 443 đến 10.10.10.2:443 (IP máy khách VPN)
-A PREROUTING -i ens3 -d oracle.server.public.ip -p tcp --dport 443 -j DNAT --to-destination 10.10.10.2:443
# !PROSODY-5222! Chuyển tiếp oracle.server.public.ip (IP công cộng của máy chủ) Cổng TCP 5222 đến 10.10.10.2:5222 (IP máy khách VPN)
-A PREROUTING -i ens3 -d oracle.server.public.ip -p tcp --dport 5222 -j DNAT --to-destination 10.10.10.2:5222
# !PROSODY-5269! Chuyển tiếp oracle.server.public.ip (IP công cộng của máy chủ) Cổng TCP 5269 đến 10.10.10.2:5269 (IP máy khách VPN)
-A PREROUTING -i ens3 -d oracle.server.public.ip -p tcp --dport 5269 -j DNAT --to-destination 10.10.10.2:5269
# !PROSODY-BOSH-5280! Chuyển tiếp oracle.server.public.ip (IP công cộng của máy chủ) Cổng TCP 5280 đến 10.10.10.2:5280 (IP máy khách VPN)
-A PREROUTING -i ens3 -d oracle.server.public.ip -p tcp --dport 5280 -j DNAT --to-destination 10.10.10.2:5280
# !PROSODY-BOSH-5281! Chuyển tiếp oracle.server.public.ip (IP công cộng của máy chủ) Cổng TCP 5281 đến 10.10.10.2:5281 (IP máy khách VPN)
-A PREROUTING -i ens3 -d oracle.server.public.ip -p tcp --dport 5281 -j DNAT --to-destination 10.10.10.2:5281
LÀM
### Linuxbabe - Hướng dẫn Wireguard
# Nat Postrouting
* tự nhiên
:POSTROUTING CHẤP NHẬN [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE
# Kết thúc mỗi bảng bằng dòng 'CAM KẾT' nếu không các quy tắc này sẽ không được xử lý
LÀM
Của tôi /etc/nginx/nginx.conf
tệp trên Máy chủ LEMP (máy khách bảo vệ dây) trông như thế này:
#người dùng nginx;
dữ liệu www của người dùng;
worker_processes tự động;
thông báo error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
sự kiện {
công_nhân kết_nối 1024 ;
}
http {
bao gồm /etc/nginx/mime.types;
ứng dụng default_type/octet-stream;
log_format chính '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log chính;
gửi tệp trên;
#tcp_nopush bật;
keepalive_timeout 65;
#gzip trên;
bao gồm /etc/nginx/conf.d/*.conf;
}
Của tôi /etc/nginx/conf.d/prosody.conf
tệp trên Máy chủ LEMP (Máy khách VPN) trông như thế này:
người phục vụ {
nghe 80;
nghe [::]:80;
server_name chat.example.com;
gốc /var/www/prosody/;
vị trí ~ /.well-known/acme-challenge {
chấp nhận tất cả;
}
}
Cuối cùng, tôi đã bật Chuyển tiếp IP trên Máy chủ Oracle bằng cách bỏ ghi chú dòng net.ipv4.ip_forward = 1
Trong /etc/sysctl.conf
.
Sau tất cả những điều này, máy chủ LEMP của tôi dường như đang sử dụng thành công Đường hầm máy chủ VPN của Phiên bản Oracle, TUY NHIÊN, nó vẫn không thể lấy chứng chỉ từ cerbot bằng cách sử dụng tệp cấu hình nginx prosody.conf. Theo như tôi có thể nói, với tất cả các nghiên cứu tôi đã thực hiện, thiết lập này (quan trọng nhất là các quy tắc chuyển tiếp VPN trong before.rules), sẽ cho phép thành công máy chủ LEMP của tôi lấy chứng chỉ bằng địa chỉ IP của Phiên bản Oracle. Nhưng nó KHÔNG LÀM NHƯ VẬY!
Vì vậy, câu hỏi của tôi là, tôi phải làm gì để gỡ lỗi này, điều gì đang chặn cổng máy chủ LEMP 80/443 của tôi và tôi phải làm gì để nhận được thành công chứng chỉ certbot cho tiến trình sử dụng địa chỉ IP Công cộng của Phiên bản Oracle của tôi?