2

КОНТЕКСТ:

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

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

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

РЕЗУЛЬТАТЫ:

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

sudo groupadd internet

Shell Script:

#!/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/ ВЫХОД будет остановлен

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: хост / сеть 127.0.0.1 не найден Попробуйте 'ip6tables -h' или 'ip6tables --help' для получения дополнительной информации.

ip6tables v1.6.0: хост / сеть 198.168.0.1 не найден Попробуйте «ip6tables -h» или «ip6tables --help» для получения дополнительной информации.

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

  • Запустите Firefox, дважды щелкнув значок. Результат был, как и ожидалось, сразу же я получил ошибку Server not found , что было хорошим признаком
  • После этого я запустил команду sudo -g internet -s в терминале, а затем firefox . ТЕПЕРЬ ... когда я пытался загрузить сайт, он не показывал мне, что Сервер не найден , но он продолжал загружаться в течение длительного периода времени, очень долго. Это наводит меня на мысль, что, возможно, ответ на запрос был отправлен, НО вход был заблокирован.

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

0