Theo dõi stickiness IP proxy tĩnh bằng cron / systemd timer (curl + cảnh báo)

Proxy tĩnh kỳ vọng exit IP không đổi giữa các lần gọi. Trong thực tế, bạn vẫn nên có lớp giám sát nhẹ: script định kỳ lấy IP qua proxy, so với IP kỳ vọng, và cảnh báo khi lệch. Bài này dựng monitor bằng curl + cron hoặc systemd timer — phù hợp VPS Linux vận hành proxy dân cư Việt Nam.

Vì sao cần monitor stickiness?

  • Whitelist phía đối tác gắn với một IP: nếu IP đổi im lặng, job production gãy.
  • Nhiều môi trường (staging/prod) dễ trỏ nhầm credential.
  • On-call cần biết sớm trước khi khách hàng báo lỗi.
  • Audit: lưu lịch sử IP theo thời gian để đối chiếu sự cố.

Thông số tham chiếu

Proxy tĩnh dân cư VN: 1.000đ/ngày, 30.000đ/30 ngày; Viettel / VNPT / FPT; HTTP hoặc SOCKS5; mạng dân cư thật, IP sạch. xem bảng giá. Checker thủ công: check-proxy.

Script monitor

Tạo /usr/local/bin/proxy-stickiness-check.sh:

bash
#!/usr/bin/env bash set -euo pipefail # Đọc secret từ file chỉ root đọc được # /etc/proxyviet/proxy.env: # PROXY_URL=http://USER:PASS@HOST:PORT # EXPECTED_EXIT_IP=x.x.x.x # ALERT_WEBHOOK=https://hooks.example/xxx # tuỳ chọn # STATE_FILE=/var/lib/proxyviet/last_ip source /etc/proxyviet/proxy.env mkdir -p "$(dirname "${STATE_FILE:-/var/lib/proxyviet/last_ip}")" STATE_FILE="${STATE_FILE:-/var/lib/proxyviet/last_ip}" LOG_TAG="proxy-stickiness" ip="$(curl -fsS -x "$PROXY_URL" --max-time 25 https://api.ipify.org || true)" if [[ -z "$ip" ]]; then logger -t "$LOG_TAG" "FAIL: không lấy được IP qua proxy" if [[ -n "${ALERT_WEBHOOK:-}" ]]; then curl -fsS -X POST -H 'Content-Type: application/json' \ -d '{"text":"proxy-stickiness: curl IP thất bại"}' \ "$ALERT_WEBHOOK" || true fi exit 1 fi logger -t "$LOG_TAG" "exit_ip=$ip" if [[ -n "${EXPECTED_EXIT_IP:-}" && "$ip" != "$EXPECTED_EXIT_IP" ]]; then msg="ALERT: IP lệch kỳ vọng got=$ip expected=$EXPECTED_EXIT_IP" logger -t "$LOG_TAG" "$msg" if [[ -n "${ALERT_WEBHOOK:-}" ]]; then curl -fsS -X POST -H 'Content-Type: application/json' \ -d "{\"text\":\"$msg\"}" "$ALERT_WEBHOOK" || true fi echo "$ip" > "$STATE_FILE" exit 2 fi # Cảnh báo nếu IP đổi so với lần trước (kể cả khi chưa set EXPECTED) if [[ -f "$STATE_FILE" ]]; then prev="$(cat "$STATE_FILE")" if [[ -n "$prev" && "$prev" != "$ip" ]]; then msg="ALERT: IP đổi $prev -> $ip" logger -t "$LOG_TAG" "$msg" if [[ -n "${ALERT_WEBHOOK:-}" ]]; then curl -fsS -X POST -H 'Content-Type: application/json' \ -d "{\"text\":\"$msg\"}" "$ALERT_WEBHOOK" || true fi fi fi echo "$ip" > "$STATE_FILE" exit 0
bash
sudo chmod 750 /usr/local/bin/proxy-stickiness-check.sh sudo mkdir -p /etc/proxyviet /var/lib/proxyviet sudo install -m 600 /dev/stdin /etc/proxyviet/proxy.env <<'ENV' PROXY_URL=http://USER:PASS@HOST:PORT EXPECTED_EXIT_IP=x.x.x.x ALERT_WEBHOOK= STATE_FILE=/var/lib/proxyviet/last_ip ENV

Chạy thử:

bash
sudo /usr/local/bin/proxy-stickiness-check.sh; echo exit:$? journalctl -t proxy-stickiness -n 20 --no-pager

Cron

cron
# mỗi 15 phút */15 * * * * root /usr/local/bin/proxy-stickiness-check.sh

Đặt vào /etc/cron.d/proxy-stickiness.

systemd timer (khuyến nghị hơn cron trên distro mới)

/etc/systemd/system/proxy-stickiness.service:

ini
[Unit] Description=Check static proxy exit IP stickiness After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/proxy-stickiness-check.sh Nice=10

/etc/systemd/system/proxy-stickiness.timer:

ini
[Unit] Description=Run proxy stickiness check every 15 minutes [Timer] OnBootSec=2min OnUnitActiveSec=15min AccuracySec=1min Unit=proxy-stickiness.service [Install] WantedBy=timers.target
bash
sudo systemctl daemon-reload sudo systemctl enable --now proxy-stickiness.timer systemctl list-timers | grep proxy-stickiness

Gợi ý cảnh báo

  • Webhook Slack / Discord / Telegram bot (POST JSON đơn giản như trên).
  • Hoặc chỉ dựa journald + monitoring agent (Promtail, Vector) filter ALERT:.
  • Không gửi mật khẩu proxy trong payload alert.

Kết hợp checker thủ công

Khi alert nổ:

  1. Chạy lại script tay.
  2. curl -x ... https://api.ipify.org và mở check-proxy trên máy có cùng credential.
  3. Đối chiếu panel — gia hạn / đổi IP nếu nhà cung cấp đã cấp IP mới, rồi cập nhật EXPECTED_EXIT_IP và whitelist đối tác.

Tóm tắt

Một script bash + cron/systemd timer đủ để biết sớm khi exit IP của proxy tĩnh lệch kỳ vọng. Giữ secret trong file 0600, log IP thôi, và xem bảng giá khi cần chọn lại gói HTTP/SOCKS5 Viettel/VNPT/FPT phù hợp hạ tầng.