Полный сценарий:

КСТ:

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

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

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

РЕЗУЛЬТАТЫ:

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

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 group, и, следовательно, любое приложение (например, 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

P.S .: Спасибо @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, дважды щелкнув по значку вручную. Результат был, как и ожидалось, сразу же я получилСервер не найден ошибка, которая была хорошим знакомПосле этого я запустил командуsudo -g internet -s в терминале, а затемfirefox. СЕЙЧАС... когда я пытался загрузить сайт, он не показывал мнеСервер не найден, но он продолжает загружаться в течение длительного периода времени, очень долго. Это заставляет меня поверить, что, возможно, ответ был отправлен, но вход был заблокирован.

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

Ответы на вопрос(1)

Ваш ответ на вопрос