Địa chỉ IP của MONA Pay
Video hướng dẫn
Xem transcript video (8 phần)
Nhận diện lỗi firewall
Webhook gửi thử chạy ở máy cá nhân nhưng lên server lại báo CONNECTION, lỗi bốn không ba hoặc TIMEOUT. Nguyên nhân thường là firewall hay WAF đang chặn máy gửi của MONA Pay. Trong vài phút, mình sẽ mở đúng đường vào cho webhook bằng nginx, ufw hoặc Cloudflare, rồi kiểm lại bằng log. IP hiện tại đọc là một không ba chấm một sáu tám chấm năm năm chấm một bốn. Dù cho phép IP, bạn vẫn phải kiểm chữ ký HMAC.
Hai chiều kết nối
Trang Địa chỉ IP ghi hai chiều dùng cùng địa chỉ. Chiều thứ nhất là MONA Pay gửi webhook thật hoặc gửi thử tới server bạn. Chiều thứ hai là API api.monapay.vn để server bạn gọi ra. Thông thường chỉ cần allowlist chiều webhook đi vào; chiều gọi API không cần mở riêng trừ khi server chặn outbound. Khi log hiện CONNECTION, hãy đọc lại trang này vì thay đổi IP sẽ được cập nhật tại đây.
Chặn tại nginx
Với nginx, tạo rule riêng cho đúng đường dẫn /webhook/monapay. Đặt lệnh allow cho IP trên màn hình, tiếp theo là deny all, rồi proxy_pass vào ứng dụng nội bộ, ví dụ cổng ba nghìn. Cách chặn tại đường dẫn cụ thể phù hợp hơn mở toàn bộ cổng HTTPS. Rule mẫu chỉ cho nguồn MONA Pay vào đường webhook và từ chối các nguồn còn lại tại chính đường dẫn đó.
Ufw và Cloudflare WAF
Với ufw, rule mẫu cho phép đúng IP nguồn đi vào cổng bốn bốn ba bằng TCP. Tuy nhiên cổng này thường còn phục vụ website cho mọi khách, nên tài liệu ưu tiên lọc ở nginx. Nếu website qua Cloudflare, tạo WAF rule: đường dẫn bằng /webhook/monapay và IP nguồn không nằm trong allowlist thì chặn. Tắt JS challenge và Bot Fight Mode cho đường webhook vì máy chủ không vượt được thử thách trình duyệt.
Kiểm IP trong ứng dụng
Nếu không sửa được nginx, ứng dụng có thể kiểm REMOTE_ADDR trong PHP hoặc req.ip trong Express. Khi đứng sau proxy tin cậy như Cloudflare, đọc CF-Connecting-IP theo cấu hình proxy, không tin tùy tiện vào X-Forwarded-For. Với Express, địa chỉ IPv4 có thể đi kèm tiền tố ::ffff: nên code mẫu loại phần này trước khi so với tập IP được phép.
IP không thay chữ ký
Allowlist chỉ là lớp giảm rác, không thay xác thực. Proxy hoặc cấu hình tin nhầm header vẫn có thể làm kiểm IP sai. Trong cấu hình webhook, bật HMAC_SHA256; ở endpoint kiểm X-Mona-Signature và X-Mona-Timestamp theo trang Bảo mật webhook. Whitelist IP là lớp thứ hai, không phải lớp duy nhất. Yêu cầu phải đồng thời đi từ nguồn được phép và có chữ ký hợp lệ. Không nên chỉ dựa vào IP rồi tự động xác nhận đơn hàng.
Gửi thử và đọc log
Sau khi mở rule, chạy dig +short api.monapay.vn và alias ipn.mona.host; kết quả đúng bản hiện hành là IP trên màn hình. Tiếp theo gọi POST /api/v1/client-webhooks/test, rồi đọc request_headers và status_code trong GET /api/v1/webhook-logs. CONNECTION nghĩa là kết nối còn bị chặn; HTTP bốn không ba thường do allow, deny hoặc WAF; TIMEOUT có thể do firewall thả rơi gói và hệ thống chờ tối đa mười giây.
Hoàn tất firewall
Tóm lại, mở đúng IP cho riêng endpoint webhook, loại thử thách trình duyệt khỏi đường này, giữ HMAC và xác nhận bằng lượt gửi thử cùng log. Đừng mở rộng cả server nếu chỉ một đường dẫn cần nhận webhook. IP có thể thay đổi, nên dùng trang tài liệu làm nguồn hiện hành khi log kết nối xuất hiện. Xem cấu hình mẫu tại monapay.vn/docs/dia-chi-ip, đăng ký tại my.monapay.vn, hoặc gọi một chín không không, sáu ba sáu, sáu bốn tám.
Webhook của MONA Pay đi ra từ địa chỉ IP 103.168.55.14 (máy chủ api.monapay.vn, alias ipn.mona.host), kiểm ngày 28/08/2026. Nếu firewall của bạn chỉ cho một số IP gọi vào endpoint webhook, thêm địa chỉ này vào danh sách cho phép. Có thay đổi, đội MONA cập nhật tại chính trang này và báo trước qua email tài khoản; nên đọc lại trang này hoặc bản dia-chi-ip.md mỗi khi log webhook hiện nhãn CONNECTION.
Danh sách IP
| Mục đích | IP | Ghi chú |
|---|---|---|
| Gửi webhook tới server bạn | 103.168.55.14 |
IPv4, cả webhook thật lẫn gửi thử |
API api.monapay.vn (bạn gọi vào) |
103.168.55.14 |
Không cần whitelist chiều ra trừ khi server bạn chặn outbound |
Whitelist vẫn phải kèm verify chữ ký
Chặn theo IP giúp giảm rác nhưng không thay được xác thực: ai đứng sau proxy hoặc giả header X-Forwarded-For vẫn có thể lọt nếu server bạn tin header đó. Luôn bật HMAC_SHA256 và kiểm X-Mona-Signature + X-Mona-Timestamp theo Bảo mật webhook. Whitelist IP là lớp thứ hai, không phải lớp duy nhất.
Cấu hình mẫu
nginx: chỉ cho IP MONA Pay vào đường dẫn webhook
ufw (server chỉ mở webhook cho MONA Pay, nhưng cổng 443 thường phục vụ cả website nên cách này ít dùng; ưu tiên chặn ở nginx như trên):
Cloudflare WAF: nếu website đi qua Cloudflare, tạo rule “URI Path equals /webhook/monapay AND IP Source Address is not in {103.168.55.14} → Block”. Nhớ tắt các tính năng thử thách (JS challenge, Bot Fight Mode) cho đường dẫn webhook, vì MONA Pay là máy gọi, không vượt được thử thách trình duyệt; log sẽ hiện HTTP_4XX hoặc HTTP_5XX nếu quên.
PHP: kiểm IP ở tầng ứng dụng (khi không sửa được nginx)
Node (Express)
Kiểm tra nhanh
Xem địa chỉ MONA Pay đang phân giải về đâu:
Cả hai trả 103.168.55.14 là đúng bản hiện hành. Gửi thử bằng POST /api/v1/client-webhooks/test rồi đọc request_headers, status_code trong GET /api/v1/webhook-logs để chắc firewall đã mở.
Lỗi thường gặp
| Nhãn trong log | Nguyên nhân liên quan IP | Cách xử lý |
|---|---|---|
CONNECTION |
Firewall server bạn chặn kết nối từ 103.168.55.14 |
Thêm IP vào allowlist, kiểm ufw status, security group |
HTTP_4XX (403) |
Rule allow/deny hoặc WAF chặn | Kiểm lại rule, tắt challenge cho đường dẫn webhook |
TIMEOUT |
Firewall drop gói thay vì từ chối | Sửa rule thành cho phép; MONA Pay chờ tối đa 10 giây |