Quantcast
Channel: bogamp’s blog
Viewing all articles
Browse latest Browse all 39

nftablesでTor以外の通信をブロックする

$
0
0

nftablesを用いて、OS全体でTorを使用しない通信を遮断するようにしてみた。

コマンド

sudo nft flush ruleset
sudo nft add table inet filter
sudo nft add chain inet filter output {type filter hook output priority filter \; policy drop \;}
sudo nft add rule inet filter output oifname lo accept
sudo nft add rule inet filter output skuid debian-tor accept
sudo nft add rule inet filter output drop

sudo nft add chain inet filter input {type filter hook input priority filter \; policy drop \;}
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input ct state invalid drop
sudo nft add rule inet filter input iif lo accept

sudo nft add chain inet filter forward {type filter hook forward priority filter \; policy drop \;}

設定ファイル

上のコマンドではわかりにくいので、設定ファイルも書いてみた(中身は同じ)。
sudo nft -fで設定ファイルを読み込める。
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
	chain input {type filter hook input priority filter;policy drop;
		ct state established,related accept
		ct state invalid drop
		iifname lo accept
	}
	chain forward {type filter hook forward priority filter;policy drop;}
	chain output {type filter hook output priority filter;policy drop;
                oifname lo accept
		skuid debian-tor accept
		drop
	}}

ルールの説明

inputとforwardのルールは、本題には無関係なのでここでは説明しない。outputのルールについてだけ説明しておく。
oifname lo acceptでローカル内での通信を許可している。
DebianUbuntu系のOSでは、sudo systemctl start torでtorを起動した場合、debian-torというユーザー名でtorが実行されるようになっている。skuidはパケットを送ったユーザー名でフィルタリングするワードであり、これでdebian-torを指定することでtorによる通信を許可している。(よって、DebianUbuntu系以外のLinuxでは機能しない)
それ以外はdropで通信を弾いている。

その他

上のルールではDNSもブロックされるため、たとえばcurl --proxy socks5://localhost:9050 http://example.comのようなコマンドだと名前解決に失敗する。torsocksコマンドを使ってtorsocks curl http://example.comとすれば、DNSもtorを経由するため成功する。

また、上のルールで通信できるtorはあくまでシステム側のtorである。Tor Browserは通常、システム側のtorを用いずに自分で別のtorを起動するため、上のルールでは通信することができない。~/.local/share/torbrowser/tbb/x86_64/tor-browser/Browser/start-tor-browserの中には"Using a system-installed Tor process with Tor Browser"という箇所があり、そこを読んでいくとTor Browserにシステム側のTorを使用させることができる。

ちなみに透過プロキシ(全通信を自動でTor経由にする)も設定することができるが、torprojectの公式サイト(https://gitlab.torproject.org/legacy/trac/-/wikis/doc/TransparentProxyhttps://gitlab.torproject.org/legacy/trac/-/wikis/doc/TransparentProxyLeaks)によると、透過プロキシがセキュリティ的に優れているかというと微妙なところらしい。

参考リンク

nftables wiki
nftables - ArchWiki

Viewing all articles
Browse latest Browse all 39

Trending Articles