Сценарий Linux iptables для блокировки всего доступа в Интернет, за исключением желаемых приложений

КОНТЕКСТ:

Я хотел иметь сценарий оболочки, который блокировал бы весь входящий / исходящий трафик на мой компьютер, ЕСЛИ я не хочу использовать браузер или какое-либо другое приложение, и в этом случае я бы вызвал его, и будут запускаться только те приложения.

Я исследовал предыдущие сценарии, сделанные умными людьми (ссылки на источники в конце), а также инвестировал время, чтобы научиться самостоятельно использовать iptables (все еще работая на этом фронте).

Вот результат проделанной работы:

РЕЗУЛЬТАТЫ:

Перед запуском скрипта оболочки создается группа с именем internet :

sudo groupadd internet

Сценарий оболочки:

 #!/bin/sh #only allow apps run from "internet" group to run # clear previous rules sudo iptables -F # accept packets for internet group sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT sudo iptables -A OUTPUT -p udp -m owner --gid-owner internet -j ACCEPT # also allow local connections sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT # reject packets for other users sudo iptables -A OUTPUT -j REJECT # same process for IPv6: sudo ip6tables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT sudo ip6tables -A OUTPUT -p udp -m owner --gid-owner internet -j ACCEPT sudo ip6tables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT sudo ip6tables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT sudo ip6tables -A OUTPUT -j REJECT 

Это другая часть оболочки, над которой я сейчас работаю, а не на 100% уверен в:

 #DROPS ALL INPUT and FORWARD sudo iptables -A INPUT -j DROP sudo iptables -A FORWARD -j DROP #ONLY ACCEPTS INPUT THAT WAS INITIATED BY SOME OUTPUT sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #SAME REPEATED FOR IPv6 sudo ip6tables -A INPUT -j DROP sudo ip6tables -A FORWARD -j DROP sudo ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

После выполнения всего сценария выше, следующая команда откроет терминал, который будет частью internet группы, и, следовательно, любое приложение (например, firefox, например), открытое этим терминалом, будет иметь доступ в Интернет, тогда как все остальные INPUT / OUTPUT будет остановлен

 sudo -g internet -s 

ВОПРОС:

Является ли предыдущая логика в порядке? В настоящее время я работаю над тестированием всех функций, устанавливая программное обеспечение сетевого мониторинга (nethogs), тестируя каждую строку кода и видя, что результат такой же ожидаемый, НО в то же время я только начал изучать iptables 2 дня назад, Так что, хотя исходники исходного кода сделаны опытными кодерами, я не уверен на 100% в своей способности собрать все вместе, чтобы получить желаемый результат. Спасибо всем, кто нашел время, чтобы прочитать все это и принять участие в обсуждении !!!

источники:

Https://plus.google.com/+TobyKurien/posts/YZhZJCZmGgm https://serverfault.com/questions/429400/iptables-rule-to-allow-all-outbound-locally-originating-traffic

PS: Спасибо @dirkt за то, что помогли мне понять многие фундаментальные концепции iptables, а также ответить на некоторые из моих вопросов относительно исходного кода.


ОБНОВИТЬ:

Итак, после запуска кода, похоже, что-то не так. Что происходит, так это следующее. Я запускаю сценарий оболочки:

 bash myscript 

Я получаю 2 ошибки следующим образом:

Ip6tables v1.6.0: host / network 127.0.0.1 не найден. Попробуйте `ip6tables -h 'или' ip6tables -help 'для получения дополнительной информации.

Ip6tables v1.6.0: host / network 198.168.0.1 не найден. Попробуйте `ip6tables -h 'или' ip6tables -help 'для получения дополнительной информации.

Но все остальное работает хорошо, а когда я делаю sudo iptables -L я подтвердил, что все остальные правила действуют. ПОСЛЕ того, я попробовал следующее:

  • Запустите firefox вручную, дважды щелкнув значок. Результат был таким, как ожидалось, сразу же я получил ошибку « Сервер не найден» , что было хорошим знаком
  • После этого я запустил команду sudo -g internet -s в терминале, а затем firefox . СЕЙЧАС … когда я попытался загрузить сайт, он не показал мне, что сервер не найден , но он продолжает загружаться в течение длительного периода времени, очень долго. Это заставляет меня думать, что, возможно, выходной ответ был отправлен, НО вход блокировался.

Если кто-нибудь знает, почему это может произойти, я хотел бы узнать ваши отзывы!

  • Возможно ли иметь переменные среды на пути рабочего каталога: PS1?
  • Как проверить работоспособность жесткого диска
  • Как перенаправить только определенную подсеть (источник ip) на конкретный интерфейс?
  • Проверка целостности файла, который был перенесен с ненадежной среды
  • Минимальная установка emacs24 на ubuntu
  • Ext4 (dm-crypt) и NTFS (битлокатор) для общего раздела
  • Как отменить кластер NTFS как плохой?
  • OS X продолжает «проигрывать» мои акции Linux Samba
  • Cp: ​​чтение `filename ': ошибка ввода / вывода ПОЧЕМУ?
  • Почему «source <(cmd)» работает, но не «$ (cmd)»
  • Поделиться в Интернете в Linux
  • Установка Java на Ubuntu?
  • Давайте будем гением компьютера.