Актуальність блокування відвідувань заборонених ресурсів стосується будь-якого адміна, якому можуть офіційно пред'явити невиконання закону або розпорядження відповідних органів.
Навіщо винаходити велосипед тоді, коли є спеціалізовані програми та дистрибутиви для наших завдань, наприклад Zeroshell, pfSense, ClearOS.
Ще одне питання виявилося у начальства: А чи має продукт, що використовується, сертифікат безпеки нашої держави?
У нас був досвід роботи з перерахованими дистрибутивами:
- Zeroshell — розробники навіть подарували на 2 роки ліцензію, але виявилося, що дистрибутив, що цікавить, нелогічно для нас виконував критичну для нас функцію;
- pfSense - повага і шана, одночасно нудно, звикання до командного рядка файрвола FreeBSD і не досить зручно для нас (думаю справу звички, але це виявилося не "тим шляхом");
- ClearOS - на нашому залозі виявилося дуже повільно, до серйозного тестування не змогли дійти, ось навіщо такі важкі інтерфейси?
- Ideco SELECTA. Про продукт «Айдеко» окрему розмову, цікавий продукт, але з політичних міркувань не для нас, а ще хочеться «вкусити» їх з приводу ліцензії на той самий лінукс, Roundcube тощо. З чого вони взяли, що «напив» інтерфейс в Python і відібравши права суперкористувача вони можуть продавати закінчений продукт, складений з розроблених і доопрацьованих модулів інтернет спільноти, що розповсюджуються по GPL&etc.
Розумію, що зараз у мій бік посипляться негативні вигуки з вимогами детально обґрунтувати свої суб'єктивні відчуття, але хочу сказати, що цей вузол мережі також є балансувальником трафіку на 4 зовнішні канали до мережі Інтернет, причому кожен канал має свої особливості. Ще наріжним каменем стала необхідність працювати одному з кількох мережних інтерфейсів у різних адресних просторах, і я готовий визнати, що застосовувати скрізь де треба і не треба VLANи я не готовий. У користуванні є пристрої типу TP-Link TL-R480T+ - поводяться не ідеально, загалом зі своїми нюансами. Цю частину на Linux вдалося настроїти завдяки оф.сайту Ubuntu
Рішення, що розглядається, не претендує на унікальність, але хочеться поставити запитання: «А навіщо на підприємстві пристосовуватися під сторонні сумнівні продукти з серйозними апаратними вимогами, коли можна розглянути альтернативний варіант?».
Якщо в РФ є список Роскомнагляду, в Україні – додаток до Рішення Ради НацБезпеки (напр.
Спілкуючись з колегами на інших підприємствах, на яких за замовчуванням заборонені всі сайти і лише за запитом з дозволу начальника можна отримати доступ до конкретного сайту, шанобливо посміхнувшись, подумавши і «покуривши над проблемою», прийшло розуміння того, що життя все-таки гарне і ми розпочали свій пошук.
Маючи можливість не тільки аналітично подивитися, що пишуть у «книгах домогосподарок» про фільтрацію трафіку, а й подивитися, що відбувається на каналах різних провайдерів, ми помітили наступні рецепти (будь-які скрини трохи обрізані, прошу зрозуміти просити):
Провайдер 1
— не морочиться і нав'язує власні ДНС сервери та прозорий проксі-сервер. Ну що?.. зате ми маємо доступ туди куди треба (якщо нам це треба :))
Провайдер 2
— вважає, що його верхній провайдер повинен про це думати, техпідтримка верхнього провайдера навіть зізналася, чому я не можу відкрити необхідний мені не заборонений сайт. Я думаю що картинка вас розвеселить 🙂
Як виявилося, вони імена заборонених сайтів переводять в айпі адреси та блокують саме IP (не турбує їх те, що на цій IP-адресі може розміщуватися і 20 сайтів).
Провайдер 3
— пропускає трафік туди, але назад маршрутом його не пускає.
Провайдер 4
- Забороняє всі маніпуляції з пакетами у зазначеному напрямку.
А що робити з ВПН (браузеру Opera повага) та плагінами для браузерів? Граючи спочатку з вузловим Mikrotik у нас навіть з'явився ресурсомісткий рецепт на L7, від якого згодом довелося відмовитися (заборонених назв може бути і більше, сумно стає коли крім своїх прямих обов'язків за маршрутами, на 3х десятках виразів завантаження процесора PPC460GT йде в 100 %).
.
Що стало зрозуміло:
ДНС на 127.0.0.1 абсолютно не панацея, сучасні версії браузерів таки дозволяють оминати подібні трабли. Обмежити всіх користувачів урізаними правами не можна, і не можна забувати про величезну кількість альтернативних ДНР. Інтернет не статичний, і крім нових ДНЗ адрес, заборонені сайти купують нові адреси, змінюють домени верхнього рівня, можуть додати/видалити символ у своїй адресі. Але все ж таки має право жити щось типу:
ip route add blackhole 1.2.3.4
Цілком дієвим було б отримання списку IP адрес зі списку заборонених сайтів, але з вказаних вище міркувань ми перейшли до міркувань про Iptables. Існував вже живий балансувальник CentOS Linux release 7.5.1804.
Інтернет у користувача повинен бути швидким, а Браузер не повинен чекати півхвилини, тому що ця сторінка не доступна. Після довгих пошуків ми дійшли такої моделі:
Файл 1 -> /script/denied_host, список заборонених назв:
test.test
blablabla.bubu
torrent
porno
Файл 2 -> /script/denied_range, список заборонених адресних просторів та адрес:
192.168.111.0/24
241.242.0.0/16
Файл-скрипт 3 -> ipt.sh, що виконує роботу з ipables:
# считываем полезную информацию из перечней файлов
HOSTS=`cat /script/denied_host | grep -v '^#'`
RANGE=`cat /script/denied_range | grep -v '^#'`
echo "Stopping firewall and allowing everyone..."
# сбрасываем все настройки iptables, разрешая то что не запрещено
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
#решаем обновить информацию о маршрутах (особенность нашей архитектуры)
sudo sh rout.sh
# циклически обрабатывая каждую строку файла применяем правило блокировки строки
for i in $HOSTS; do
sudo iptables -I FORWARD -m string --string $i --algo bm --from 1 --to 600 -p tcp -j REJECT --reject-with tcp-reset;
sudo iptables -I FORWARD -m string --string $i --algo bm --from 1 --to 600 -p udp -j DROP;
done
# циклически обрабатывая каждую строку файла применяем правило блокировки адреса
for i in $RANGE; do
sudo iptables -I FORWARD -p UDP -d $i -j DROP;
sudo iptables -I FORWARD -p TCP -d $i -j REJECT --reject-with tcp-reset;
done
Застосування sudo обумовлено тим, що у нас є невеликий хак для керування через WEB інтерфейс, але як показав досвід використання такої моделі терміном більше року, то WEB не такий уже й потрібний. Після впровадження було бажання перелік сайтів завести до БД тощо. Кількість заблокованих хостів понад 250+десяток адресних просторів. Дійсно є проблема при переході на сайт по https з'єднанню, як і системного адміністратора у мене є претензії до браузерів :), але це окремі випадки, більшість спрацьовувань до відсутності доступу до ресурсу все-таки на нашій стороні, так само успішно блокуємо Opera VPN, плагіни типу friGate та телеметрію від Майкрософт.
Джерело: habr.com