Блокировка интернета в МОС при помощи iptables: различия между версиями

Материал из IT в школе
Перейти к навигацииПерейти к поиску
нет описания правки
 
(не показано 5 промежуточных версий этого же участника)
Строка 2: Строка 2:




'''Эта статья относится только к МОС-12 и неприменима к МОС-10. В МОС-12 необходимо использовать аналогичную службу [[Блокировка интернета в МОС-12 при помощи nftables|nftables]].'''


Типичной задачей при проведении олимпиад, тестирований, экзаменов и т.д. является ограничение доступа в интернет, оставив доступ к одному или нескольким сайтам. Рассмотрим решение этой задачи с использованием iptables - стандартных для Linux правил обработки сетевых пакетов.
Типичной задачей при проведении олимпиад, тестирований, экзаменов и т.д. является ограничение доступа в интернет, оставив доступ к одному или нескольким сайтам. Рассмотрим решение этой задачи с использованием iptables - стандартных для Linux правил обработки сетевых пакетов.
Строка 31: Строка 32:
*Снаружи оставим доступ к данному компьютеру по SSH, чтобы сохранить возможность удалённого администрирования. SSH использует порт 22.
*Снаружи оставим доступ к данному компьютеру по SSH, чтобы сохранить возможность удалённого администрирования. SSH использует порт 22.
*Также оставим возможность использования протокола ICMP для работы ping, например, чтобы можно было "пинговать" наш компьютер.
*Также оставим возможность использования протокола ICMP для работы ping, например, чтобы можно было "пинговать" наш компьютер.
*Разрешим сетевые соединения с этим же компьютером (на адрес 127.0.0.1/8), что нужно для работы некоторых приложений.


Определим адрес сайта olympiads.ru при помощи команды host. Обратите внимание, у одного доменного имени может быть несколько IP-адресов (как, например, у google.com), тогда нужно будет добавить все эти IP-адреса в конфиг.
Определим адрес сайта olympiads.ru при помощи команды host. Обратите внимание, у одного доменного имени может быть несколько IP-адресов (как, например, у google.com), тогда нужно будет добавить все эти IP-адреса в конфиг.
Строка 39: Строка 41:
  -P DROP
  -P DROP
  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-s 127.0.0.1/8 -j ACCEPT
  -p tcp --dport 22 -j ACCEPT
  -p tcp --dport 22 -j ACCEPT
-p udp --dport 22 -j ACCEPT
  -p icmp -j ACCEPT
  -p icmp -j ACCEPT
Здесь первая строка "-P DROP" указывает политику обработки пакетов "по умолчанию" - входящие пакеты будут сброшены. Затем идёт набор правил, заканчивающихся действием "-j ACCEPT". Пакеты, удовлетворяющие этим правилам, будут приняты. Во второй строчке задаётся правило для принятия всех пакетов уже установленных соединений. В третьей и четвёртой строках - правила для входящих пакетов, отправленных по протоколам tcp и udp (опции -p tcp и -p udp) на порт 22 (опция --dport 22 задаёт порт назначения (destination) пакета). Пятая строка разрешает пакеты по протоколу icmp, то есть ping-запросы.
Здесь первая строка "-P DROP" указывает политику обработки пакетов "по умолчанию" - входящие пакеты будут сброшены. Затем идёт набор правил, заканчивающихся действием "-j ACCEPT". Пакеты, удовлетворяющие этим правилам, будут приняты. Во второй строчке задаётся правило для принятия всех пакетов уже установленных соединений. В третьей строке задано правило, разрешающее все пакеты, отправленные с этого же компьютера (опция -s задаёт источник (source) пакетов, с указанием адреса сети 127.0.0.1/8). Это разрешение нужно для корректной работы некоторых сред разработки (например, Wing IDE), которые взаимодействуют с отладчиком или интерпретатором посредством сетевых соединений. В четвёртой строке - правило для входящих пакетов, отправленных по протоколу tcp (опция -p tcp) на порт 22 (опция --dport 22 задаёт порт назначения (destination) пакета). Это правило мы оставим для возможности удалённого управления компьютером при помощи ssh. Пятая строка разрешает пакеты по протоколу icmp, то есть ping-запросы.


Запишем в файл  '''/etc/net/ifaces/default/fw/iptables/filter/OUTPUT''' следующий текст:
Запишем в файл  '''/etc/net/ifaces/default/fw/iptables/filter/OUTPUT''' следующий текст:
  -P DROP
  -P DROP
  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-d 127.0.0.1/8 -j ACCEPT
  -d 194.58.88.173 -j ACCEPT
  -d 194.58.88.173 -j ACCEPT
  -p tcp --dport 53 -j ACCEPT
  -p tcp --dport 53 -j ACCEPT
  -p udp --dport 53 -j ACCEPT
  -p udp --dport 53 -j ACCEPT
Здесь всё аналогично, в третьей строке мы разрешаем все исходящие пакеты на адрес 194.58.88.173. При необходимости открыть доступ к другим адресам добавьте аналогичные строчки. Можно также открыть доступ целиком к некоторой сети, например, -d 10.0.0.0/8 откроет доступ к группе локальных IP-адресов. В строках 4 и 5 откроем все исходящие соединения на порты 53 для того, чтобы работала служба DNS.
Здесь всё аналогично, в третьей строке разрешаем пакеты, отправляемые на этот же компьютер. В четвёртой строке мы разрешаем все исходящие пакеты на адрес 194.58.88.173 (опция -d задаёт адрес компьютера, на который отправляется пакет, или адрес сети). При необходимости открыть доступ к другим адресам добавьте аналогичные строчки. Можно также открыть доступ целиком к некоторой сети, например, -d 10.0.0.0/8 откроет доступ к группе локальных IP-адресов. В строках 5 и 6 откроем все исходящие соединения на порты 53 по протоколам tcp и udp для того, чтобы работала служба DNS.


Если хочется реализовать блокировку по "чёрному списку", то есь заблокировать доступ к нескольким IP-адресам, оставив открытые все остальные, то можно это реализовать при помощи -P ACCEPT в качестве политики по умолчанию и действий -j DROP для тех адресов, которые нужно заблокировать.
Если хочется реализовать блокировку по "чёрному списку", то есть заблокировать доступ к нескольким IP-адресам, оставив открытые все остальные, то можно это реализовать при помощи -P ACCEPT в качестве политики по умолчанию и действий -j DROP для тех адресов, которые нужно заблокировать.
 
Если необходимо разрешить обнаруживать локальные сетевые ресурсы при помощи службы [[Avahi]] (например, включить ресолвинг имён из домена .local в IP-адреса), необходимо разрешить UDP-запросы на порт 5353. Подробней в статье [[Avahi]].  


Для того, чтобы изменения вступили в силу, нужно перезагрузить компьютер или перезапустить поддержку сети:
Для того, чтобы изменения вступили в силу, нужно перезагрузить компьютер или перезапустить поддержку сети:
Строка 66: Строка 71:
  -P DROP  
  -P DROP  
  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT  
  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT  
-d 127.0.0.1/8 -j ACCEPT
  -p tcp --dport 22 -j ACCEPT  
  -p tcp --dport 22 -j ACCEPT  
-p udp --dport 22 -j ACCEPT
  -p icmp -j ACCEPT  
  -p icmp -j ACCEPT  
  END1
  END1
Строка 75: Строка 80:
  -P DROP  
  -P DROP  
  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-d 127.0.0.1/8 -j ACCEPT
  -d 194.58.88.173 -j ACCEPT
  -d 194.58.88.173 -j ACCEPT
  -p tcp --dport 53 -j ACCEPT
  -p tcp --dport 53 -j ACCEPT
Строка 83: Строка 89:
  systemctl restart network
  systemctl restart network


=== Отключение блокировки интернета ===
=== Отключение блокировки интернета===
Чтобы отключить блокировку, можно выполнить одно из двух действий.
Чтобы отключить блокировку, можно выполнить одно из двух действий.


Строка 90: Строка 96:
Можно сделать командой
Можно сделать командой
  sed 's/^CONFIG_FW=.*/CONFIG_FW=no/' -i /etc/net/ifaces/default/options
  sed 's/^CONFIG_FW=.*/CONFIG_FW=no/' -i /etc/net/ifaces/default/options
Тогда у вас сохранятся файлы с цепочками INPUT и OUTPUT, и вы можете не меняя конфигурацию iptables просто включать или выключать работу iptables, меняя параметр CONFIG_FW в указанном файле.
Тогда у вас сохранятся файлы с цепочками INPUT и OUTPUT, и вы можете не меняя конфигурацию iptables просто включать или выключать работу iptables, меняя параметр CONFIG_FW в указанном файле. После применения изменений перезапустите компьютер (просто перезапустить сеть недостаточно, потому что перезапуск сети не отключает файрвол, а просто не настраивает его, поэтому сохраняются старые настройки).


Второй способ. Не отключать фильтрацию как таковую, а просто очистить цепочки с правилами. Можно сделать командами
Второй способ. Не отключать фильтрацию как таковую, а просто очистить цепочки с правилами. Можно сделать командами
  echo -n > /etc/net/ifaces/default/fw/iptables/filter/INPUT
  echo -n > /etc/net/ifaces/default/fw/iptables/filter/INPUT
  echo -n > /etc/net/ifaces/default/fw/iptables/filter/OUTPUT
  echo -n > /etc/net/ifaces/default/fw/iptables/filter/OUTPUT
После применения изменений перезапустите компьютер.
В данном случае для применения новых правил достаточно просто перезапустить сеть командой systemctl restart network.


=== Известные проблемы ===
===Известные проблемы===
Перезапуск сети при помощи команды
Перезапуск сети при помощи команды
  # systemctl restart network
  # systemctl restart network
не позволяет отключить firefall или поменять правила фильтрации. Вероятно, перезапуск сети не сбратывает цепочки фильтрации. Поэтому если вы хотите изменить правила или отключить фильтрацию, то нужно перезагрузить компьютер.  
не позволяет отключить firewall, потому что при наличии опции CONFIG_FW=no скрипт просто не настраивает firewall, то есть установленные настройки не меняются (см. [https://www.altlinux.org/Etcnet_Firewall#%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81%D0%B5%D1%82%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE_%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0 статью о настройке firewall в etcnet]). Поэтому если вы хотите изменить правила или отключить фильтрацию, то нужно перезагрузить компьютер.  


В любой момент вы можете проверить содержимое текущих правил iptables при помощи команды  
В любой момент вы можете проверить содержимое текущих правил iptables при помощи команды  
  # iptables-save
  # iptables-save
Также рекомендуется вписать правила, разрешающие соединения на этот же компьютер (для сетевых адресов 127.0.0.1/8), так как некоторые программы (например, Wing IDE) используют подобные сетевые соединения и при их фильтрации они будут работать некорректно.
[[Категория:МОС]]
[[Категория:МОС]]

Навигация