КОНТЕКСТ:
Я хотел иметь оболочку script, которая блокировала бы весь входящий/исходящий трафик на мой компьютер, ЕСЛИ я не хочу использовать браузер или какое-либо другое приложение, и в этом случае я бы вызвал его, и только эти приложения работать.
Я исследовал предыдущие сценарии, сделанные умными людьми (ссылки на источники в конце), а также потратил время, чтобы научиться самому использовать iptables (все еще работая на этом фронте).
Вот результат выполненной работы:
Результаты:
до запуска оболочки script создается группа с именем Интернет:
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
после выполнения всего script выше, следующая команда откроет терминал, который будет частью группы internet
, и, следовательно, любое приложение (например, firefox, например), открытое этим терминалом, будет иметь интернет доступ, в то время как все остальные INPUT/OUTPUT будут остановлены
sudo -g internet -s
Вопрос:
Является ли предыдущая логика в порядке? В настоящее время я работаю над тестированием всех функций, устанавливая программное обеспечение сетевого мониторинга (nethogs), проверяя каждую строку кода и проверяя, соответствует ли результат, как ожидалось, НО > , я только начал узнав об iptables 2 дня назад, поэтому, несмотря на то, что исходники исходного кода сделаны опытными кодерами, я не уверен на 100% в своей способности собрать все вместе, чтобы получить желаемый результат. Спасибо всем, кто нашел время, чтобы прочитать все это и принять участие в обсуждении !!!
Источники:
https://plus.google.com/+TobyKurien/posts/YZhZJCZmGgm https://serverfault.com/info/429400/iptables-rule-to-allow-all-outbound-locally-originating-traffic
P.S.: Спасибо @dirkt за то, что помогли мне понять многие фундаментальные концепции iptables, а также ответить на некоторые из моих вопросов относительно исходного кода.
UPDATE:
Итак, после запуска кода, похоже, что-то не так. Что происходит, так это следующее. Я запустил оболочку Script:
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
. СЕЙЧАС..., когда я пытался загрузить сайт, он не показывал мне, что сервер не найден, но он продолжает загружаться в течение длительного периода времени, очень долго. Это заставляет меня думать, что, возможно, выходной ответ был отправлен, НО вход блокировался.
Если кто-нибудь знает, почему это может произойти, я хотел бы знать ваши отзывы!