Добрый день. Не знал в каком разделе опубликовать сей продукт, поскольку относится и к администрированию и к программированию. Проверить "в продакшне" не имею возможности по причине временного отсутствия работы, так что эксперименты проводились на многострадальном VirtualBox и весьма успешно. Опубликованное ниже есть во встроенной справке Енота. Однако, с позволения администрации размещу здесь краткую записку и скриншотики с дистрибутивом. Может быть программа окажется кому-то полезной для быстрой настройки шейпера/шлюза, ну а для меня - закладка на память.
Обновлено 29.01.2019
HTB-ENOT v2.5 (i386 и x86_64): https://cloud.mail.ru/public/JF4L/p7HZaXcHy
Скриншотики: https://cloud.mail.ru/public/5Uw6/YqAk7GnBe
История версий
------------------------------------------------------------------------------------
2.5
- Перекомпиляция в Lazarus 1.8.4
- "Резиновый" интерфейс, общий дизайн
- Запилена Флешка-MgaRemix-7-beta1-HTB-ENOT-2.5+Save-1Gb-UPD-30.01.2019 (LXDE)
------------------------------------------------------------------------------------
2.4.9 RC1
- Учет маршрутов из бэкапа
- Текущая адаптация в Lazarus 1.6.4
------------------------------------------------------------------------------------
HTB-ENOT - это графический интерфейс скрипта/компилятора htb.init v0.8.5 [Copyright (C) 2002-2004 Lubomir Bulej <pallas@kadan.cz>] с дополнительными функциями.
Енот предназначен для быстрой настройки компьютера под управлением Mageia Linux в качестве шейпера, маршрутизатора, фильтра контента, хранилища файлов (общий сетевой диск) и DNS/DHCP сервера в котором на уровне графического интерфейса удобно управлять шейпингом трафика, а так же пробрасывать порты из локальной сети во внешний мир и настраивать статические маршруты. Удалённое управление - по VNC. Подключение зашифровано, вход по приватному ключу и паролю. Встроена защита от некоторых типов атак и сканирования портов. Предусмотрен белый список доступа в интернет и управление локальными портами сервера.
Программа написана на Lazarus 1.6.4. Поддерживаемые дистрибутивы Linux: Mageia 2 - Mageia 6 [GNOME на Wayland не поддерживается]. Компиляция проводилась на Mageia 5.1 (MATE, тема «Блестящая»). Код программы не претендует на шедевральность и распространяется AS IS (как есть). Все желающие могут внести необходимые изменения на свой вкус.
Краткая инструкция по использованию и настройке:
------------------------------------------------------------------------------------
Ставим Linux Mageia 5.1 (или другой из поддерживаемых дистрибутивов) на компьютер с двумя сетевыми картами. Настраиваем статические адреса на его сетевых интерфейсах: один в интернет (указываем DNS-ы провайдера и шлюз), другой в локальную сеть.
Устанавливаем пакеты: urpmi --auto x11vnc openssh-server putty dnsmasq samba
Далее, раскомментируем в файле /etc/sudoers секцию %wheel ALL=(ALL) NOPASSWD: ALL и закомментируем #Defaults requiretty. Сохраним изменения. Теперь добавим в группу wheel текущего пользователя, например так: gpasswd -a user wheel. Обязательно перезагружаемся!
Открываем архив htb-gen.tar.gz и копируем папку htb-gen на Рабочий стол.
Запускаем программу. Для этого войдите в каталог htb-gen и запустите файл project1.
Далее, идём в меню "Служебные"-"Инсталлировать". По окончании процедуры установки Енот создаст необходимые сервисы запуска шейпера, межсетевого экрана и остальных демонов.
Далее, в "Меню"-"Настройки" вводим названия интерфейсов, скорости канала провайдера, локалки и жмём кнопку «Применить». При желании можно сразу создать нужное количество правил в автоматическом режиме: "Меню"-"Создать n-правил". В таблице правил Енота будут созданы рабочие заготовки для n-ного количества клиентов, которых нужно «отшейпить». Таблица полностью редактируется. Есть возможность изменения значений столбцов целиком (клик по заголовку столбца), удаления или вставки записей для новых хостов. Тонкую настройку правил шейпинга удобно выполнять с помощью построителя (кнопка в поле "Правило"). Енот понимает до 2-х правил на 1 хост, разделённых знаком '+'.
Функция управления удалённым рабочим столом включается в "Меню"-"Настройки"-"Включить VNC". Пароль вводится по запросу, ключи SSH создаются автоматически. Процесс подключения к удалённому рабочему столу сервера состоит их двух этапов: создание зашифрованного тоннеля между клиентом и сервером, затем подключение по VNC. Для тоннеля потребуется приватный ключ htb-enot.ppk, который автоматически выгружается на рабочий стол Вашего сервера и используется на стороне клиента. Таким образом, доступ к серверу предоставлен ТОЛЬКО ВЛАДЕЛЬЦУ данного ключа, которому известен пароль VNC.
Настройки PuTTY на удалённом клиенте:
------------------------------------------------------------------------------------
1. Host Name (or IP address) - IP адрес сервера с Енотом
2. Port - 2222
3. Saved Session - название сессии, например "Сервер в офисе-1"
4. На вкладке Category-Data в Auto-login username вводим имя пользователя на сервере
5. На вкладке Category-SSH-Auth в Private key file выбираем выгруженный ключ htb-enot.ppk
6. На вкладке Category-SSH-Tunnels - Source port: 5999, Destination: localhost:5999, [Add]
7. Нажимаем Category-Session и сохраняем сессию кнопкой [Save]
8. Запускаем сессию [Open] и подключаемся к удалённому серверу
Для подключения к удалённому рабочему столу можно использовать TigerVNC, TightVNC, VNC-Viewer. Параметры подключения: localhost:5999. Для удобства оставлен парольный вход на сервер SSH (порт 2222), который защищен от брутфорса (3 неудачных попытки - блокировка на 60 секунд).
Функция "Меню"-"Настройки"-"Включить общий диск" активирует общий каталог (\\IP интерфейса в локалку\Common), где пользователи сети могут хранить и пересылать друг-другу файлы. Удаляемые файлы переносятся в корзину .recycle на том же диске, которая очищается автоматически раз в месяц. Функция "Основной сервер" активирует режим Master Browser.
Белый список доступа в интернет
------------------------------------------------------------------------------------
В режиме белого списка (чекер в настройках DHCP/DNS) доступ к сети интернет имеют только те, кто описан в таблице привязок DHCP MAC->IP. При этом сам DHCP-сервер может и не использоваться.
Данный подход выбран не случайно. Шейпер работает на уровне IP-адресов, проброс портов с внутренних хостов - тоже. С очередной выдачей настроек клиенту IP может изменяться (срок аренды в Еноте - 72 часа), таким образом шейпинг для этого IP будет не актуален. С другой стороны, словарная фильтрация работает на уровне MAC-адресов, что более действенно с позиции ограничения доступа. Но и MAC-адрес клиент может изменить вручную. Вывод: для жёсткого контроля выгоднее всего привязывать IP к MAC адресу на этапе выдачи. Тогда эти параметры будут уникальны, а в случае "подделки" одного из них в сети возникнет коллизия. Виновник и жертва получат отлУп + сообщения о совпадении настроек. Поскольку владелец IP (MAC) жёстко прописан в привязках DHCP, админ без труда вычислит виновника.
Таким образом, в режиме "Белый список" доступ наружу строго соответствует описанным в DHCP привязкам. Соответственно проброс портов, обрезание сайтов и шейпинг применяются только к ним.
По дефолту Енот слушает порты на интерфейсах:
WAN и LAN - 2222 - TCP
LAN - 137:139,445 - TCP
LAN - 137:139,445,53,67,68,1024:65535 - UDP
Управление локальными портами необходимо, если администратор использует на сервере дополнительные службы.
Правила HTB-ENOT
------------------------------------------------------------------------------------
Главная концепция шейпинга в Еноте - не более двух правил, разделённых знаком "+" на одну позицию в таблице.
До версии 2.4.5 применяется метод "точечного" шейпинга, который состоит в управлении скоростью и приоритетом исходящего и входящего трафика хостов; привязка к цели, где целью является IP хоста в локальной сети. Таким образом, одному IP в таблице могут соответствовать два правила шейпинга (обычно DOWNLOAD/UPLOAD). Правила удобно создавать, используя встроенный построитель.
Начиная с версии 2.4.6 можно создавать произвольные правила шейпинга. Если поле "IP ^ произвольно" содержит значение "произвольно" (выбирается из пик-листа), в поле правил можно использовать два произвольных правила без учёта привязки к IP-адресу. Правило может содержать привязку к маркировке трафика (например, MARK=500). Поскольку использование маркировки предполагает собственно маркировку в пакетном фильтре iptables, следует внести правила маркировки в iptables. Для этого предназначен конструктор правил (режим "Маркировка"). В его редакторе можно вставлять/удалять блоки маркировочного кода, тестировать/компилировать правила iptables с целью отладки и немедленно применять в работу. Значения MARK= от 300 и выше.
Пример маркировки трафика для web-серфинга (MARK=500) приведён в Еноте (Маркировка-Показать маркировку). Скорость можно оценить в "Яндекс.Интернетометр" (не speedtest.net). Если произвольное правило не содержит MARK, оно задаётся в таком же формате, как и в случае "точечного" шейпинга. Например для подсетей: 10.10.25.0/24,10.10.1.0/24 (трафик из одной в другую). Разумеется, соответствующие маршруты должны быть прописаны на обоих шлюзах (Меню-Добавить/Удалить маршруты).
Описание полей таблицы правил:
------------------------------------------------------------------------------------
IP ^ произвольно — адрес машинки в локальной сети или произвольная цель
Стикер — расширение создаваемых файлов. Например: ssh, ftp, smtp, главбух, админ
Правило — собственно правило шейпера для каждого IP-адреса.
RULE=[[saddr[/prefix]][:port[/mask]],][daddr[/prefix]][:port[/mask]]
Например:
10.2.2.5 — трафик, идущий на любой порт хоста 10.2.2.5
*,10.2.2.5 - трафик идущий на любой порт хоста 10.2.2.5
10.2.2.5:80, — трафик, идущий с 80 порта хоста 10.2.2.5 куда угодно (запятая в конце)
10.2.2.5:80 - трафик, идущий на порт 80 хоста 10.2.2.5 (нет запятой в конце)
:25,10.2.2.128/26:5000 — трафик, идущий с любого хоста, но с порта 25 на порт 5000 в сеть 10.2.2.128/26
Приоритет — высокий = 1, средний = 3, низкий = 7
MAX-UP — максимальная исходящая скорость (UPLOAD)
MAX-DOWN — максимальная входящая скорость (DOWNLOAD)
Структура рабочего каталога консольной части:
------------------------------------------------------------------------------------
/etc/htb — пусковые скрипты компиляции правил tc и iptables
/etc/htb/htb.rules — файлы конфигурации шейпера и сам компилятор
/etc/htb/htb.cache — кеш htb.init с правилами tc
/etc/htb/htb.route — скрипты добавления статических маршрутов
/etc/htb/htb.x11vnc - каталог VNC-сервера x11vnc и openssh-server
/etc/htb/htb.samba - каталог конфигураций сервера samba
/etc/htb/htb.dnsmasq - каталог конфигураций сервера dnsmasq
/etc/htb/tmp - каталог временных файлов
/usr/share/Common - расшаренная папка сервера samba, доступная пользователям
Примечания:
------------------------------------------------------------------------------------------
1. Если планируется изменение настроек сетевых интерфейсов, предварительно требуется отключить все службы в настройках Енота
2. В процессе инсталляции Енот удаляет вредные для него демоны: shorewall, msec и скрипты makewhatis
а) shorewall мешает применению правил пакетного фильтра iptables
б) msec даже в состоянии off запускается из планировщика и меняет привилегии
в) скрипты makewhatis при запуске из планировщика нагружают CPU до 100% (awk) и вводят машину в ступор
3. Для Енота нужен белый IP-адрес (WAN). Если IP серый/динамический пропадает смысл удалённого управления по VNC и проброса портов из локальной сети во внешний мир. На работу остальных функций не влияет
4. Обновление версий Енота выполняется через Деинсталляцию/Инсталляцию. Обновление можно выполнять и с удалённого клиента. В этом случае сессия VNC будет активна до перезагрузки сервера. Доступ по ключу и паролю на порт 2222 (SSH) предоставляется до их смены независимо от того, перезагружался сервер или нет.
Полезные команды консоли:
-------------------------------------------------------------------------------------------
tc qdisc show dev enp0s3 - показать дисциплины шейпера на интерфейсе enp0s3
sysctl -a | grep "forward" - показать, активен ли форвардинг пакетов
nmap localhost - просмотреть список открытых портов на localhost (нужен пакет nmap)
nslookup yandex.ru - посмотреть, какой сервер DNS резольвит yandex.ru
dig yandex.ru | grep "Query time" - посмотреть время отклика yandex.ru (нужен пакет bind-utils)
iptables --list - просмотреть правила фильтра пакетов iptables
route -n, netstat -nr, ip route - просмотреть таблицу маршрутов
-------------------------------------------------------------------------------------------
[Copyright (C) 2016 aLEX_gRANT <alex_q_2000@mail.ru>]