Это возможно с помощью iptables и пользовательского модуля.
Поскольку демон tor обычно запускается от имени пользователя "tor", мы можем использовать владельца модуля iptables для фильтрации исходящего трафика на основе пользовательского uid.
В этом примере мы отбросим весь трафик, который не инициирован пользователем, который запускает демон tor.
Во-первых, давайте предположим, что вы начинаете с пустой политики брандмауэра.
Вы хотите, чтобы у этого была политика по умолчанию, чтобы отбросить весь трафик.
iptables -P INPUT drop
iptables -P OUTPUT drop
iptables -P FORWARD drop
Теперь вы хотите принять входящий трафик, связанный с установленным соединением. Обратите внимание, что вы можете выполнять фильтрацию только по имени пользователя в исходящем трафике. Вы не можете контролировать пакеты, отправленные из Интернета.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Разрешить трафик в интерфейсе обратной связи. Это позволит вам подключиться к демону tor socks, работающему через порт 9050.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
И, наконец, вам придется разрешить трафик от пользователя "тор".
iptables -A OUTPUT -o inet-iface -m owner --uid-owner tor-uid -j ACCEPT
Замените inet-iface и tor-uid на интерфейс, к которому вы подключаетесь к интернету, и uid своего пользователя tor.
Вуаля, весь трафик, не связанный с Tor, теперь должен быть заблокирован.