146
правок
Dkirienko (обсуждение | вклад) |
Dkirienko (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 2: | Строка 2: | ||
'''Эта статья относится только к МОС-12 и неприменима к МОС-10. В МОС-12 необходимо использовать аналогичную службу [[Блокировка интернета в МОС-12 при помощи nftables|nftables]].''' | |||
Типичной задачей при проведении олимпиад, тестирований, экзаменов и т.д. является ограничение доступа в интернет, оставив доступ к одному или нескольким сайтам. Рассмотрим решение этой задачи с использованием iptables - стандартных для Linux правил обработки сетевых пакетов. | Типичной задачей при проведении олимпиад, тестирований, экзаменов и т.д. является ограничение доступа в интернет, оставив доступ к одному или нескольким сайтам. Рассмотрим решение этой задачи с использованием iptables - стандартных для Linux правил обработки сетевых пакетов. | ||
Строка 32: | Строка 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-адреса в конфиг. | ||
Строка 40: | Строка 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 icmp -j ACCEPT | -p icmp -j ACCEPT | ||
Здесь первая строка "-P DROP" указывает политику обработки пакетов "по умолчанию" - входящие пакеты будут сброшены. Затем идёт набор правил, заканчивающихся действием "-j ACCEPT". Пакеты, удовлетворяющие этим правилам, будут приняты. Во второй строчке задаётся правило для принятия всех пакетов уже установленных соединений. В третьей | Здесь первая строка "-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-адресов. В строках | Здесь всё аналогично, в третьей строке разрешаем пакеты, отправляемые на этот же компьютер. В четвёртой строке мы разрешаем все исходящие пакеты на адрес 194.58.88.173 (опция -d задаёт адрес компьютера, на который отправляется пакет, или адрес сети). При необходимости открыть доступ к другим адресам добавьте аналогичные строчки. Можно также открыть доступ целиком к некоторой сети, например, -d 10.0.0.0/8 откроет доступ к группе локальных IP-адресов. В строках 5 и 6 откроем все исходящие соединения на порты 53 по протоколам tcp и udp для того, чтобы работала служба DNS. | ||
Если хочется реализовать блокировку по "чёрному списку", то есть заблокировать доступ к нескольким IP-адресам, оставив открытые все остальные, то можно это реализовать при помощи -P ACCEPT в качестве политики по умолчанию и действий -j DROP для тех адресов, которые нужно заблокировать. | |||
Если | Если необходимо разрешить обнаруживать локальные сетевые ресурсы при помощи службы [[Avahi]] (например, включить ресолвинг имён из домена .local в IP-адреса), необходимо разрешить UDP-запросы на порт 5353. Подробней в статье [[Avahi]]. | ||
Для того, чтобы изменения вступили в силу, нужно перезагрузить компьютер или перезапустить поддержку сети: | Для того, чтобы изменения вступили в силу, нужно перезагрузить компьютер или перезапустить поддержку сети: | ||
Строка 67: | Строка 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 icmp -j ACCEPT | -p icmp -j ACCEPT | ||
END1 | END1 | ||
Строка 76: | Строка 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 | ||
Строка 84: | Строка 89: | ||
systemctl restart network | systemctl restart network | ||
=== Отключение блокировки интернета === | === Отключение блокировки интернета=== | ||
Чтобы отключить блокировку, можно выполнить одно из двух действий. | Чтобы отключить блокировку, можно выполнить одно из двух действий. | ||
Строка 91: | Строка 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 | ||
Строка 105: | Строка 110: | ||
В любой момент вы можете проверить содержимое текущих правил iptables при помощи команды | В любой момент вы можете проверить содержимое текущих правил iptables при помощи команды | ||
# iptables-save | # iptables-save | ||
Также рекомендуется вписать правила, разрешающие соединения на этот же компьютер (для сетевых адресов 127.0.0.1/8), так как некоторые программы (например, Wing IDE) используют подобные сетевые соединения и при их фильтрации они будут работать некорректно. | |||
[[Категория:МОС]] | [[Категория:МОС]] |