iptablesオーナーモジュール(gid-owner)を操作できません

iptablesオーナーモジュール(gid-owner)を操作できません

iptables私のUbuntu 16.04ノートブックでは、デフォルトですべてのアプリケーションへのインターネットアクセスを拒否し、名前付きグループのみを許可するようにルールを設定しようとしていますinternet。代わりにグループを使用またはsudo -gアクセスします。必要に応じてインターネットsg。たとえば、

sudo -g internet firefox

または

sg internet -c "firefox"

しかし、このアプローチは効果がありませんでした。iptables私が追加したルールは次のとおりです。

/sbin/iptables -A OUTPUT -p tcp --dport 80  -m owner --gid-owner internet   -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 443  -m owner --gid-owner internet   -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --dport 53  -m owner --gid-owner internet   -j ACCEPT

上記のルールをテストしましたが、所有者モジュールを削除すると正常に動作し、すべてのアプリでインターネットを許可します。ただし、所有者モジュールとgid-ownerフィルタを追加すると、どのアプリケーションもインターネットにアクセスできなくなります(上記とsgコマンドsudo -gを使用しても)。

私は何が間違っていましたか?

ベストアンサー1

すでに解決されているとマークされていますが、この問題を経験している他の人々の健全な精神のために、ここで詳しく説明し、発見した問題の実際の原因を説明する必要があると思いました。問題はiptables。特に、人間が期待する方法でグループIDフィルタリングを処理しません。これがWADかバグかはわかりません。 IMHOこれは間違いですiptables -m owner拡張コード。

問題は処理にあります--gid-owner。そうだiptables 拡張コードはグループIDを文字通りフィルタリングしません(つまり、グループのユーザーはYesまたはNoです)。モジュールの動作を見ると、より深く掘り下げてユーザー名の設定を調べて、ユーザーの基本グループメンバーシップに基づいて決定を下すことが明らかです。これは、グループのメンバーリストを文字通りに確認するのとは異なります(自分自身とこの問題を経験した他の人が期待するもの)。この動作は関連するマニュアルページに文書化されていません。

つまり、Ubuntuのiptables実装は確認だけです。メイングループ現在のネットワークパケットの所有者です。特定のユーザーグループが使用される分割VPNを作成するとします。VPNトラフィックをVPNインターフェイスに強制します。

所有者固有を指定すると、拡張の下のパラメータは--uid-owner期待-m ownerどおりに機能します。次に、分岐したいユーザー名が複数あり、時間の経過とともにユーザーリストが変更される可能性があるとします。したがって、グループIDフィルタリングを使用する方が効率的であると判断します(--gid-owner)。すべてのVPNトラフィックユーザーVPNiptablesパラメータを--gid-owner vpn。ご覧のとおり、多くの場合、フィルタは期待どおりに機能しません。なぜ?

パケット所有者の基本/基本グループのみが比較されます。したがって、あなたが追加したすべてのユーザー名はVPNユーザーが作成された後、グループは次の場所になります。VPNセカンダリユーザーとしてグループ化グループに属していても分岐しません!

「root」ユーザーが機能しない理由は、デフォルト/基本グループが「root」であるためです。

例えば

ユーザー名があると仮定VPNジュニアグループでVPNとユーザー名テストダミージュニアグループでテストしかし、テストダミーやはりその組織の一員VPNグループ。到着テストダミーVPNマイナーグループだ。

このiptablesルールはVPNユーザーではありませんが、テストダミー両方のユーザーがグループに属しているため、両方のユーザーのパケットがタグ付けされると本能的に考える場合も同様です。VPN:

iptables -t mangle -A OUTPUT ! -d 192.168.1.1 -m owner --gid-owner vpn -j MARK --set-mark 0x1

問題を解決するには、次の回避策などの他のルールを作成する必要があります。

iptables -t mangle -A OUTPUT ! -d 192.168.1.1 -m owner --gid-owner vpn -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT ! -d 192.168.1.1 -m owner --uid-owner testdummy -j MARK --set-mark 0x1

おすすめ記事