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

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


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


Типичной задачей при проведении олимпиад, тестирований, экзаменов и т.д. является ограничение доступа в интернет, оставив доступ к одному или нескольким сайтам. Рассмотрим решение этой задачи с использованием iptables - стандартных для Linux правил обработки сетевых пакетов.
Типичной задачей при проведении олимпиад, тестирований, экзаменов и т.д. является ограничение доступа в интернет, оставив доступ к одному или нескольким сайтам. Рассмотрим решение этой задачи с использованием iptables - стандартных для Linux правил обработки сетевых пакетов.
Строка 29: Строка 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-адреса в конфиг.
Строка 37: Строка 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]].  


Для того, чтобы изменения вступили в силу, нужно перезагрузить компьютер или перезапустить поддержку сети:
Для того, чтобы изменения вступили в силу, нужно перезагрузить компьютер или перезапустить поддержку сети:
  # systemctl restart network
  # systemctl restart network
Если настройка выполняется удалённо, то может быть полезен скрипт, который выполняет все указанные выше действия. Слово "END" в этом скрипте - это указатель на конец выводимого текста, оно не будет записано в данные файлы.
Если настройка выполняется удалённо, то может быть полезен скрипт, который выполняет все указанные выше действия. Слова "END1" и "END2" в этом скрипте - это указатели на конец выводимого текста, они не будет записаны в данные файлы.
  #!/bin/bash
  #!/bin/bash
   
   
Строка 61: Строка 68:
   
   
  # Записываем настройки в цепочку INPUT
  # Записываем настройки в цепочку INPUT
  cat << END > /etc/net/ifaces/default/fw/iptables/filter/INPUT  
  cat << END1 > /etc/net/ifaces/default/fw/iptables/filter/INPUT  
  -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  
  END
  END1
    
    
  # Записываем настройки в цепочку OUTPUT
  # Записываем настройки в цепочку OUTPUT
  cat << END > /etc/net/ifaces/default/fw/iptables/filter/OUTPUT  
  cat << END2 > /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
  END
  END2
   
   
  # Перезапускаем сеть
  # Перезапускаем сеть
  systemctl restart network
  systemctl restart network


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


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

Навигация