Ubuntu 17.04では、IPテーブルを使用してプロセスのインターネット接続をブロックしようとしましたが、localhost、特に127.0.0.1:5500(プロセスが作成したサーバー)は許可しました。
プロセスはインターネットにアクセスできませんが、127.0.0.1:5500へのアクセスがタイムアウトしました。 127.0.0.1でpingを試みると"ping: sendmsg: Operation not permitted"
。
私は次のステップに従いました。 https://ubuntuforums.org/showthread.php?t=1188099。
私のIPテーブルファイルは次のとおりです。
#!/bin/bash
iptables -A OUTPUT -m owner --gid-owner no-internet -d 192.168.1.0/24 -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner no-internet -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
私はそれを実行するために使用sudo -g no-internet <command>
しますsudo -g no-internet firefox
。
私が何か間違っているのか、それとも単に不可能なのでしょうか?もっと良い方法がありますか?
答え1
これが新しいnftablesソリューションです。しかし、Ubuntu 17.04は古すぎるかもしれません。 Debian には、最新バージョンでデフォルトで nftables のみがインストールされています。
それは私のシステムに似たものから適応されました。現状のままテストしていませんが(特に次の行dport
: I don't have this)、うまくいくはずです。
#!/usr/sbin/nft -f
table ip my_table {}
flush table my_table
table ip my_table {
chain output {
type filter hook output priority 0; policy accept;
skuid "other" jump restrict_chain; #user to restrict
}
chain restrict_chain {
counter;
oifname != "lo" jump reject_chain;
tcp dport != 5500 jump reject_chain; #line not tested
accept;
}
}
nftablesの利点は、より簡単で(このスクリプトが)アトミックであることです。
残りのテキストで言及していないので、コードのようにローカルネットワークを扱っていませんでした。