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
bashsudo 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ử:
bashsudo /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
bashsudo 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) filterALERT:. - Không gửi mật khẩu proxy trong payload alert.
Kết hợp checker thủ công
Khi alert nổ:
- Chạy lại script tay.
curl -x ... https://api.ipify.orgvà mở check-proxy trên máy có cùng credential.- Đố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_IPvà 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.