Địa chỉ IP của MONA Pay

Cập nhật 28/08/2026Bản Markdownllms.txtopenapi.json

Video hướng dẫn

Địa chỉ IP của MONA Pay để mở firewall cho webhook · Xem trên YouTube
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

Code
location = /webhook/monapay {
    allow 103.168.55.14;
    deny all;
    proxy_pass http://127.0.0.1:3000;
}

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

Code
sudo ufw allow from 103.168.55.14 to any port 443 proto tcp

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)

PHP
<?php
$allowed = ['103.168.55.14'];
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
// Nếu server đứng sau proxy tin cậy (Cloudflare), đọc CF-Connecting-IP thay vì X-Forwarded-For
if (!in_array($ip, $allowed, true)) {
    http_response_code(403);
    exit('IP khong duoc phep');
}

Node (Express)

JavaScript
const ALLOWED = new Set(['103.168.55.14']);
app.post('/webhook/monapay', (req, res, next) => {
  const ip = req.ip.replace('::ffff:', ''); // app.set('trust proxy', ...) nếu sau Cloudflare/nginx
  if (!ALLOWED.has(ip)) return res.status(403).send('IP khong duoc phep');
  next();
});

Kiểm tra nhanh

Xem địa chỉ MONA Pay đang phân giải về đâu:

Code
dig +short api.monapay.vn
dig +short ipn.mona.host

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