Автор Тема: Блокировка доступ к сайтам по доменным именам и по ip  (Прочитано 6075 раз)

Оффлайн Cool_Lamer

  • Участник
  • *
  • Сообщений: 473
Вообщем пришло указание от министерства блокировать сайты соглассно их списка.
Записей в списке на данный момент уже 176.
Идентификатор интернет-ресурсов, доступ к которым может быть ограничен
IP-адрес         Доменное имя            URL

Делаться это будет на nat-сервере. На нём Кентавр 7-ой.
Насчёт ip-адресов подозреваю, что блокировать можно с помощью iptables (как?). Как поступить с доменными именами (DNS локального увы нет).
Если что-то нужно доустановить или пересобрать, то как это сделать безболезненно, не останавливая работу сети?

P.S. То что все эти блокировки бесполезны и так понятно, давайте не будем это обсуждать в теме.
« Последнее редактирование: 25.03.2015 21:23:12 от Cool_Lamer »

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Насчёт ip-адресов подозреваю, что блокировать можно с помощью iptables (как?).
Можно накорябать простой скрипт где в цикле к каждому прочитанному из файла ip адресу будет применяться правило вроде iptables -A INPUT -p tcp -s $ip -j REJECT --reject-with tcp-reset

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Например, для входящих с блокируемых ip адресов пакетов делаем блокировку в цепочке INPUT внешнего интерфейса (тогда в правиле из примера это можно отразить):
#!/bin/sh
while read ip; do
iptables -A INPUT -p tcp -s $ip -j REJECT --reject-with tcp-reset
done < /root/ip_ban.txt
Подобным образом можно сделать правило и для цепочки OUTPUT. Но это будет зависеть от того, какие у вас политики в фаерволе  заданы.
Файл ip_ban.txt содержит список ip адресов в столбик (по одному адресу на строку). В конце файла обязательно должна быть пустая строка.

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Для доменов можно похожий скрипт накорябать, только добавить предварительно команду, которая будет резрешать имена в ip адреса (и эти ip адреса вычленить из результата вывода команды, которую вы примените для резрешения имен в ip адреса). То есть, фактически блокировка будет по ip адресам, которые будут соответствовать доменным именами из некоторого файла со схожим форматом из примера выше.

Оффлайн Cool_Lamer

  • Участник
  • *
  • Сообщений: 473
С автоматизированием понятно что нужно будет писать скрипт, а не сверять в ручную список каждый день.

Разобраться бы как блокировать.
Начал делать через FORWARD.
Спойлер
1) Создаю новую цепочку
iptables -N sait_filter
2) Добавляею в неё правила.
iptables -A sait_filter -s  10.0.0.0/24 -o eth1 -d www.sait.org -j REJECT
3) Потом отправляем трафик в эту цепочку
iptables -A FORWARD -j  sait_filter
Вроде правила на месте, вроде фильтрует, но не блокирует.

Пробую проще, к примеру
iptables -I INPUT -s 178.124.173.111 -j DROPили из вашего
iptables -A INPUT -p tcp -s 178.124.173.111 -j REJECT --reject-with tcp-reset
Всё равно без проблем захожу как по имени так и по ip.


Если интересно, действующий iptables
iptables
# Generated by iptables-save v1.4.10 on Wed Mar 25 19:02:40 2015
*mangle
:PREROUTING ACCEPT [1179946:862352837]
:INPUT ACCEPT [38727:2266458]
:FORWARD ACCEPT [1141132:860079272]
:OUTPUT ACCEPT [38530:2830713]
:POSTROUTING ACCEPT [1179662:862909985]
COMMIT
# Completed on Wed Mar 25 19:02:40 2015
# Generated by iptables-save v1.4.10 on Wed Mar 25 19:02:40 2015
*nat
:PREROUTING ACCEPT [55497:3816702]
:INPUT ACCEPT [28421:1649210]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE.
COMMIT
# Completed on Wed Mar 25 19:02:40 2015
# Generated by iptables-save v1.4.10 on Wed Mar 25 19:02:40 2015
*filter
:INPUT ACCEPT [23:1285]
:FORWARD ACCEPT [16167:1164037]
:OUTPUT ACCEPT [14101:1045288]
:sait_filter - [0:0]
-A INPUT -p udp -m udp --dport 1024:65535 -j ACCEPT.
-A INPUT -p tcp -m tcp --dport 1024:65535 -j ACCEPT.
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT.
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT.
-A INPUT -p udp -m udp --dport 123 -m comment --comment "ntp local" -j ACCEPT.
-A INPUT -p udp -m udp --dport 53 -j ACCEPT.
-A INPUT -i eth1 -j DROP.
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT.
-A FORWARD -j sait_filter.
-A sait_filter -s 10.0.0.0/24 -d 54.78.43.123/32 -o eth1 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Wed Mar 25 19:02:40 2015

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Мне малопонятен вывод в спойлере (привычнее обычные строковые записи), но как вы собрались блокировать, если у вас политики всех цепочек выставлены в ACCEPT ? Какой вообще смысл было городить нат, если трафику разрешено всюду ходить ?

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Вообщем пришло указание от министерства блокировать сайты соглассно их списка.
Записей в списке на данный момент уже 176.
Извиняюсь, что вмешиваюсь со своим нумбизмом, но разве не проще в настройках брандмауэра в "центре управления системой" вписать блокируемые домены или ip?

Оффлайн Cool_Lamer

  • Участник
  • *
  • Сообщений: 473
Мне малопонятен вывод в спойлере (привычнее обычные строковые записи),
Это как, так? (а выше это содержание конфига /etc/sysconfig/iptables)
iptables -L -v
[root@nat sysconfig]# iptables -L -v
Chain INPUT (policy ACCEPT 6562 packets, 420K bytes)
 pkts bytes target     prot opt in     out     source               destination
   27  1434 DROP       all  --  any    any     ipoe-static.178.124.173.218.telecom.mogilev.by  anywhere
1138K   78M ACCEPT     udp  --  any    any     anywhere             anywhere            udp dpts:1024:65535
1127K   57M ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpts:1024:65535
 1025 74589 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:http
  310 16177 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:https
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere            udp dpt:ntp /* ntp local */
 1988  126K ACCEPT     udp  --  any    any     anywhere             anywhere            udp dpt:domain
   75  3794 DROP       all  --  eth1   any     anywhere             anywhere

Chain FORWARD (policy ACCEPT 2964K packets, 209M bytes)
 pkts bytes target     prot opt in     out     source               destination
  73M   54G ACCEPT     all  --  any    any     anywhere             anywhere            ctstate RELATED,ESTABLISHED
3055K  216M sait_filter  all  --  any    any     anywhere             anywhere

Chain OUTPUT (policy ACCEPT 2191K packets, 157M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain sait_filter (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     all  --  any    eth1    10.0.0.0/24          ec2-54-78-43-123.eu-west-1.compute.amazonaws.com reject-with icmp-port-unreachable
но как вы собрались блокировать, если у вас политики всех цепочек выставлены в ACCEPT ? Какой вообще смысл было городить нат, если трафику разрешено всюду ходить ?
Как всех, а "-A INPUT -i eth1 -j DROP". Смысл городить нат для маскарада и серых абонентских адресов, зачем же ещё.
Извиняюсь, что вмешиваюсь со своим нумбизмом, но разве не проще в настройках брандмауэра в "центре управления системой" вписать блокируемые домены или ip?
Это решение через задний проход. Придётся, каждый день, утром, скачивать новый список адресов, сверять его со старым (вчерашним), затем искать в "центре управления системой" в списке, ненужный адрес, удалять и вписывать новые.
« Последнее редактирование: 25.03.2015 21:25:51 от Cool_Lamer »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Вообщем пришло указание от министерства блокировать сайты
C IP всё просто. На форвард вешается цепочка первым правилом. Или не первым, если надо что-то главнее - белый список, файрвол, разное. Далее, эта цепочка просто обновляется. Скрипт по работае с цепочкой - строк с полтора десятка:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

iptables -F F_ZAPRETINFO

IP_LIST=/tmp/ip.txt
SUB_LIST=/tmp/subnet.txt

cd /tmp

[ -f $SUB_LIST ] && rm -f $SUB_LIST
[ -f $IP_LIST ] && rm -f $IP_LIST

sleep $[$RANDOM/555] # randomize time for access to ftp server

wget bla-bla ftp:...subnet.txt
wget bla-bla ftp:...ip.txt

[ -f $SUB_LIST ] || exit 0
[ -f $IP_LIST ] || exit 0

for IP in `cat $SUB_LIST | sort | uniq | sort -n`; do
        iptables -A F_ZAPRETINFO -d $IP -j REJECT
done

for IP in `cat $IP_LIST | sort | uniq | sort -n`; do
        iptables -A F_ZAPRETINFO -d $IP -j REJECT
done


Тут под работу с выгрузкой из базы связьнадзора, но примерно то же самое должно быть.

Можно сделать, кстати в nat prerouting, с форвардом на страничку с пояснением.

Это что касается IP. Если анализировать содержимое пакета (URL), надо заморачиваться с модулями dpi, поддержка которых давно заброшена.
« Последнее редактирование: 25.03.2015 23:35:01 от asy »

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 242
Вообщем пришло указание от министерства блокировать сайты соглассно их списка.
из какого министерства?
Роскомнадзор обычно так же не выдает, новый источник блокировок отрылся?

Оффлайн Cool_Lamer

  • Участник
  • *
  • Сообщений: 473
C IP всё просто. На форвард вешается цепочка первым правилом. Или не первым, если надо что-то главнее - белый список, файрвол, разное. Далее, эта цепочка просто обновляется.
Об этом и толкую. Но почему-то блокировать не хочет. Где я то не так написал?
/etc/sysconfig/iptables
*nat
-A POSTROUTING -o eth0 -j MASQUERADE

*filter
-A INPUT -p udp -m udp --dport 1024:65535 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1024:65535 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p udp -m udp --dport 123
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i eth1 -j DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j sait_filter
-A sait_filter -s 10.0.0.0/8 -d 54.78.43.123/32 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A sait_filter -s 10.0.0.0/8 -d 54.155.91.81/32 -o eth1 -j REJECT --reject-with icmp-port-unreachable
и т.д.
eth1 - внешний интерфейс, 10.0.0.0/8 абонентская подсеть

из какого министерства?
По надзору за электросвязью, Беларусь.

Оффлайн stranger573

  • Мастер
  • ***
  • Сообщений: 1 567
Об этом и толкую. Но почему-то блокировать не хочет. Где я то не так написал?
Внутри одной цепочки reject (drop), должны быть до accept. После accept в этой же цепочке правила для уже разрешённого пакета не проверяются.
Вы ведь в форварде фильтруете? Так? Ну и поставьте все правила в forward с accept после reject (т.е. после вашего sait_filter).
« Последнее редактирование: 26.03.2015 01:43:43 от stranger573 »

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Это как, так?
По типу "iptables -A INPUT ..." :) а всякие двоеточия, скобочки и прочее напрочь отбивают желание вчитываться после трудного рабочего дня.

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 242
Неправильно блокировать по ip, так под раздачу попадут тысячи нормальных сайтов ( http://reestr.rublacklist.net/visual ).
Если уж приходится таким заниматься, то такие ip надо заворачивать на squid и он заблокирует конкретный URL.
http://habrahabr.ru/post/219435/
http://www.ps-ax.ru/2013/10/20/реестр-роскомнадзора/
http://blogzadrota.ru/блокировка-сайтов-из-реестра-роскомн/

Оффлайн speccyfan

  • Участник
  • *
  • Сообщений: 522
  • CCNA
    • speccyfan (Примеры различных конфигураций сетевых сервисов)
Правильней поднять прозрачный прокси (squid) и им уже блокировать, т.е. не нужно ничего резолвить , блокируем прямо по именам и к тому же показываем пользователю страницу, что мол заблокировано потому что...
With best regards, Yury Konovalov aka 2:453/53