Сценарий 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 . СЕЙЧАС … когда я попытался загрузить сайт, он не показал мне, что сервер не найден , но он продолжает загружаться в течение длительного периода времени, очень долго. Это заставляет меня думать, что, возможно, выходной ответ был отправлен, НО вход блокировался.

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

  • Почему обновление EFI «BIOS» нарушает работу менеджера загрузки EFI?
  • Сделать grub сохранить загрузку по умолчанию под обновлениями ядра
  • Синхронизация удаленных папок в Linux
  • Файлы rsync более 1 недели
  • Как я могу возобновить остановленную работу в Linux?
  • Как узнать, какую версию Linux я запускаю?
  • Команда Mail не работает в Linux
  • Как копировать ввод-вывод, а не просто перенаправлять (Windows и Linux)
  • Почему sudo -n на Mac OS X всегда возвращает 0?
  • Как создать загрузочный USB из загрузочного ISO с командной строкой в ​​Linux?
  • Как выполнять команды на уровне root в Linux (Fedora) Live Media
  • Установка Java на Ubuntu?
  • Interesting Posts

    Могу ли я сохранить. И .. вне .. * расширение?

    Условное форматирование значений TRUE / FALSE в диапазоне Excel 2010

    Установка рабочего каталога для вставки изображения в PowerPoint

    Как добавить кучу WAV-файлов при сохранении (без нулевого заполнения) числового порядка?

    Как настроить ноутбук Windows 7 как точку доступа Bluetooth?

    Evolution Gmail Mashup + Фиксация метки времени

    Храните программы от использования My Documents

    Как проверить, что SNI поддерживается данным веб-браузером?

    Ubuntu не будет распознавать загрузочный USB или CD

    Как я могу заставить Thunderbird открыть приложение ICS непосредственно в календаре Lightning?

    Выделение наборов данных в Excel (как с уникальными ключами)

    Как синхронизировать SkyDrive / OneDrive в Windows 8.1 при входе на ПК с локальной учетной записью?

    Добавление элементов в / etc / hosts не блокирует Facebook в Windows 8

    Как я могу запустить Windows без загрузки проводника?

    Какие преимущества имеет конечная задача над процессом завершения?

    Давайте будем гением компьютера.