Iptables та фільтрація трафіку від бідних та лінивих інакодумців

Актуальність блокування відвідувань заборонених ресурсів стосується будь-якого адміна, якому можуть офіційно пред'явити невиконання закону або розпорядження відповідних органів.

Iptables та фільтрація трафіку від бідних та лінивих інакодумців

Навіщо винаходити велосипед тоді, коли є спеціалізовані програми та дистрибутиви для наших завдань, наприклад Zeroshell, pfSense, ClearOS.

Ще одне питання виявилося у начальства: А чи має продукт, що використовується, сертифікат безпеки нашої держави?

У нас був досвід роботи з перерахованими дистрибутивами:

  • Zeroshell — розробники навіть подарували на 2 роки ліцензію, але виявилося, що дистрибутив, що цікавить, нелогічно для нас виконував критичну для нас функцію;
  • pfSense - повага і шана, одночасно нудно, звикання до командного рядка файрвола FreeBSD і не досить зручно для нас (думаю справу звички, але це виявилося не "тим шляхом");
  • ClearOS - на нашому залозі виявилося дуже повільно, до серйозного тестування не змогли дійти, ось навіщо такі важкі інтерфейси?
  • Ideco SELECTA. Про продукт «Айдеко» окрему розмову, цікавий продукт, але з політичних міркувань не для нас, а ще хочеться «вкусити» їх з приводу ліцензії на той самий лінукс, Roundcube тощо. З чого вони взяли, що «напив» інтерфейс в Python і відібравши права суперкористувача вони можуть продавати закінчений продукт, складений з розроблених і доопрацьованих модулів інтернет спільноти, що розповсюджуються по GPL&etc.

Розумію, що зараз у мій бік посипляться негативні вигуки з вимогами детально обґрунтувати свої суб'єктивні відчуття, але хочу сказати, що цей вузол мережі також є балансувальником трафіку на 4 зовнішні канали до мережі Інтернет, причому кожен канал має свої особливості. Ще наріжним каменем стала необхідність працювати одному з кількох мережних інтерфейсів у різних адресних просторах, і я готовий визнати, що застосовувати скрізь де треба і не треба VLANи я не готовий. У користуванні є пристрої типу TP-Link TL-R480T+ - поводяться не ідеально, загалом зі своїми нюансами. Цю частину на Linux вдалося настроїти завдяки оф.сайту Ubuntu IP-Балансування: об'єднуємо кілька інтернет-каналів в один. Причому кожен із каналів може «впасти» будь-якої миті, як і піднятися. Якщо цікавить скрипт, який працює зараз (а це коштує окремої публікації) — пишіть у коментарях.

Рішення, що розглядається, не претендує на унікальність, але хочеться поставити запитання: «А навіщо на підприємстві пристосовуватися під сторонні сумнівні продукти з серйозними апаратними вимогами, коли можна розглянути альтернативний варіант?».

Якщо в РФ є список Роскомнагляду, в Україні – додаток до Рішення Ради НацБезпеки (напр. ось), то на місцях керівники теж не сплять. Наприклад, нам було передано список заборонених сайтів, які на думку керівництва погіршують продуктивність праці на робочому місці.

Спілкуючись з колегами на інших підприємствах, на яких за замовчуванням заборонені всі сайти і лише за запитом з дозволу начальника можна отримати доступ до конкретного сайту, шанобливо посміхнувшись, подумавши і «покуривши над проблемою», прийшло розуміння того, що життя все-таки гарне і ми розпочали свій пошук.

Маючи можливість не тільки аналітично подивитися, що пишуть у «книгах домогосподарок» про фільтрацію трафіку, а й подивитися, що відбувається на каналах різних провайдерів, ми помітили наступні рецепти (будь-які скрини трохи обрізані, прошу зрозуміти просити):

Провайдер 1
— не морочиться і нав'язує власні ДНС сервери та прозорий проксі-сервер. Ну що?.. зате ми маємо доступ туди куди треба (якщо нам це треба :))

Провайдер 2
— вважає, що його верхній провайдер повинен про це думати, техпідтримка верхнього провайдера навіть зізналася, чому я не можу відкрити необхідний мені не заборонений сайт. Я думаю що картинка вас розвеселить 🙂

Iptables та фільтрація трафіку від бідних та лінивих інакодумців

Як виявилося, вони імена заборонених сайтів переводять в айпі адреси та блокують саме IP (не турбує їх те, що на цій IP-адресі може розміщуватися і 20 сайтів).

Провайдер 3
— пропускає трафік туди, але назад маршрутом його не пускає.

Провайдер 4
- Забороняє всі маніпуляції з пакетами у зазначеному напрямку.

А що робити з ВПН (браузеру Opera повага) та плагінами для браузерів? Граючи спочатку з вузловим Mikrotik у нас навіть з'явився ресурсомісткий рецепт на L7, від якого згодом довелося відмовитися (заборонених назв може бути і більше, сумно стає коли крім своїх прямих обов'язків за маршрутами, на 3х десятках виразів завантаження процесора PPC460GT йде в 100 %).

Iptables та фільтрація трафіку від бідних та лінивих інакодумців.

Що стало зрозуміло:
ДНС на 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 та телеметрію від Майкрософт.

Iptables та фільтрація трафіку від бідних та лінивих інакодумців

Джерело: habr.com

Додати коментар або відгук