Главная Файлы Форум Галерея Гостевая книга Обратная связь Карта сайта Поиск
 

 

Моё место работы

СитиСервис
  • Заправка и ремонт лазерных картриджей
  • Ремонт любых принтеров и копиров
  • Оригинальные и совместимые картриджи
  • Доставка бесплатно (от 2-х картриджей)
  • Накопительная система расчётов для корпоративных клиентов
Телефон
+7 (4722) 373-983
8-980-326-01-23
Адрес E-mail
mybelpost@gmail.com

Привет, Гость

Войти
Идентификация
Я забыл свой пароль
Регистрация

Разделы -> Статьи -> Linux - разное -> Автоматическая блоки...

Автоматическая блокировка компьютеров по MAC-адресу на школьном шлюзе

Средствами интегрированного  в ядро межсетевого экрана (iptables) можно заблокировать выход в и-нет любого не желательного компьютера.

Сразу скажу о том, почему я не использовал iptables-save и iptables-restore.
Ввиду частых экспериментов с iptables мне не хотелось, чтобы их следы попали в рабочие правила.
И второе: сервер уже работает с подъёмом NAT и некоторыми правилами для iptables из специального скрипта.
Потому вся логика включения правил будет привязана к уже существующему скрипту запуска NAT на школьном шлюзе и isc-dhcp-server работающем на нём же.

В основе всего ниже описанного лежит правило для межсетевого экрана, которое блокирует любой трафик с определённого MAC-адреса:
iptables -A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
Блокировать будем, раз и на всегда (жестоко), любые android появившиеся в сети.

И так!

Создаём скрипт скомандовав в консоли от root:
touch /usr/bin/android_drop.sh
chmod 755 /usr/bin/android_drop.sh
Заполняем его вот таким содержимым:
#! /bin/bash
# Сценарий ищет андроидов в логах dhcpd за текущую дату и если они есть, то добавляет правило
# запрещающее любой трафик найденному MAC-адресу.

LANG=en_US.UTF-8; # переключаем из-за несоответствия в логах и вывода date (справедливо для Debian)

logpath="/var/log/messages"; # журнал, в который пишет isc-dhcp-server
macblock="/etc/iptables"; # каталог для наших правил iptables
tmpd="/tmp"; # системный каталог для временных файлов
ipt="/sbin/iptables"; # Полный путь к iptables иначе не будет работать через cron

# Проверяем наличие каталога для наших правил
if ! [[ -d "/etc/iptables" ]]; then
mkdir /etc/iptables; # создаём если его нет
fi

# Парсим журнал isc-dhcp-server выделяя маки андроидов
grep "$(date '+%b %e').*DHCPOFFER.*android" $logpath | awk '{ print $10 }' | sort -u | while read mac;
do
if ! [[ "$mac" == "" ]]; then # Не уверен, что проверка на пустой мак нужна, но сделал на всякий случай.
# Если андроид был найден, то сразу даём команду межсетевому экрану
$ipt -D INPUT -m mac --mac-source $mac -j DROP; # удалить правило, чтобы не было совпадающих
$ipt -A INPUT -m mac --mac-source $mac -j DROP; # включить правило.

# добавляем правило в список отрабатывающий при старте системы
echo "iptables -A INPUT -m mac --mac-source $mac -j DROP" >> $macblock/macblocklist;
# удаляем повторы правил
sort -u $macblock/macblocklist > $tmpd/macblocklist;
mv $tmpd/macblocklist $macblock;
fi
done
LANG=ru_RU.UTF-8; # Переключаем LANG в исходное состояние
exit 0;

Готовый скрипт можно скачать здесь. Перед использованием, проверьте значения переменных указывающих пути к файлам и каталогам.

Содержимое переменных logpath, macblock, tmpd, iptables измените исходя из своего расположения файлов и каталогов.

Отдаём скрипт на ежеминутное выполнение крону скомандовав от root вот так:
crontab -e
И вписав такую  строку с заданием:
* * * * * /usr/bin/android_drop.sh
Теперь заставим скрипт поднимающий NAT на школьном сервере использовать наши правила.
Для этого открываем его на редактирование (я использую mcedit):
mcedit /usr/bin/nat.sh
И делаем врезку кода сразу после строки с iptables -A INPUT -i lo -j ACCEPT приведя вот к такому виду:
........
iptables -A INPUT -i lo -j ACCEPT
source "/etc/iptables/macblocklist";
........
Сохраняем изменения и закрываем редактор.

Проверка сработки правил iptables
iptables -nxvL INPUT
ну, или все таблицы
iptables -nxvL
Справедливости ради, нужно сказать, что правила отданные скриптом напрямую в iptables будут иметь счётчик всегда в нуле. Т.к. ежеминутно правило удаляется и снова добавляется, а сработка тех правил, которые включены через файл должна считаться исправно. Ну, не нашёл я другого способа избежать повтора правил в iptables, как удаление совпавшего с вновь сформированным и последующее его добавление.

Всё! Каждый старт сервер будет поднимать NAT и включать правила из списка сформированного нашим скриптом.

Откуда взялся сценарий /usr/bin/nat.sh и как он стартует вместе с операционкой сказано в статье о настройке школьного шлюза.



Опубликовано: Константин, Автор/источник: Сакрюкин К.В. 07 Февраль 2015 21:23:57

Комментировать

Вы не залогинены! Регистрация

Афоризмы, мысли

Если программисты заслуживают вознаграждения за создание прогрессивных программ, то также они заслуживают и наказания, если они ограничивают использование этих программ.

/Столлман Ричард Мэттью/

Счётчик

Сейчас на сайте - 1 (0 зарег.)
Всего хитов9040 
Сегодня хитов9040 
Сегодня хостов1357 

Откуда гости наши?

 
Powered by ReloadCMS 1.5.0.
© 2004-2012 ReloadCMS Team
RSS AggregationPHP powered
Генерация страницы: 1.09
  Яндекс.Метрика
    Сакрюкин К.В.   Яндекс цитирования    
 
Здесь всё можно копировать и цитировать, но рабочая ссылка на мой сайт обязательна!