#!/bin/bash
# ------------------------------
# MikroTik Auto-Block Script
# ------------------------------
ROUTER_IP="192.168.88.1"
ROUTER_USER="admin"
ROUTER_PASSWORD="Tr!ckyP@ssword." # use sshpass Alt use keys(had trouble trying to use a key)
WHITELIST="whitelist.txt"
LOG_FILE="blocked_devices.log"
INTERVAL=60 # check every 60 seconds
# List connected clients
CMD="/interface wireless registration-table print terse"
while true; do
echo "==== Checking connected clients ===="
# Fetch connected clients
clients=$(sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "$CMD" 2>/dev/null)
# Extract MAC addresses of connected devices
connected_macs=$(echo "$clients" | grep -ioP 'mac-?address=\K[0-9A-F:]{17}')
# Fetch current access-list MACs
blocked_macs=$(sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "/interface wireless access-list print terse" 2>/dev/null | grep -ioP 'mac-?address=\K[0-9A-F:]{17}')
# Block any connected MAC not in whitelist
for mac in $connected_macs; do
if ! grep -iq "$mac" "$WHITELIST"; then
if ! echo "$blocked_macs" | grep -iq "$mac"; then
sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "/interface wireless access-list add mac-address=$mac comment='Blocked unknown device' disabled=no"
echo "$(date '+%Y-%m-%d %H:%M:%S') - BLOCKED $mac" | tee -a "$LOG_FILE"
fi
fi
done
# Remove any blocked MAC that is not in whitelist
for mac in $blocked_macs; do
if ! grep -iq "$mac" "$WHITELIST"; then
# Remove MAC from access list
sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "/interface wireless access-list remove [find mac-address=$mac]"
echo "$(date '+%Y-%m-%d %H:%M:%S') - REMOVED $mac (illegal)" | tee -a "$LOG_FILE"
fi
done
echo "==== Sleeping for $INTERVAL seconds ===="
sleep $INTERVAL
done
< /code>
В настоящее время я запускаю сценарий из ящика, подключенного к одной и той же сети, но я хочу знать, смогу ли я запустить сценарий из другой сети и сказать через VPS. Таким образом, я знаю, что она работает, даже если машина выключена (настройте Cronjob для сценария), я также не хочу включать учетные данные маршрутизатора в сценарий и использовать ключ, но я продолжал получать ошибку синтаксиса, когда я пытался использовать ключ ранее. Я также сейчас пытаюсь сделать это немного более "белым воротником"
Подробнее здесь: https://stackoverflow.com/questions/797 ... ine-script