プロセスへのインターネットアクセスを無効にし、localhostを許可する方法は?

プロセスへのインターネットアクセスを無効にし、localhostを許可する方法は?

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の利点は、より簡単で(このスクリプトが)アトミックであることです。

残りのテキストで言及していないので、コードのようにローカルネットワークを扱っていませんでした。

おすすめ記事