Simplified Policyのネットワーク設定

ネットワークパーミッション統合の考察から、
Simplified Policyのallownet設定要素を根本的に作りなおした。
次のような設定項目を実装した。
これで、ネットワーク制御が、かなり使えるものになっている。
refpolicyのマクロより全然使いやすいはず。
audit2spdlを使えば、以下の設定要素を使ったポリシをログから生成可能だし。
Simplified Policyも、ようやく一つの区切りが見えてきた…

ソケットの利用を制御

allownet -protocol tcp|udp|raw|* -domain <domain> use;
-domain <domain>は省略可能。

これはTCP/UDP/RAWソケットの使用を許可する。
"-domain"は省略可能(通常は省略)だが、これを使うと、
「あるドメインから引き継いだソケットだけを利用可能」のような設定ができる。

ポート番号の利用制御

allownet -protocol <protocol> -port <port number> <usage>;
<protocol>はtcp,udpをコンマ区切りで指定可能。
-1023で,使われてないwellknownポート、
1024-で、非特権ポート全部、*で、全ポート、という指定が可能。
<usage>は、server,clientをコンマ区切りで指定。

例:
domain httpd_t;
allownet -protocol tcp -port 80,443 server;
→ httpd_tドメインがTCP80,443ポートでサーバとして振る舞うことが可能
domain hoge_t;
allownet -protocol udp,tcp -port * client;
hoge_tドメインが、全てのTCP/UDPポートのサービスにTCPクライアントとして接続可。

NICの利用制御

「あるNICだけに接続可能」という設定ができる。

allownet -protocol <プロトコル> -netif <NICの名前> <permission>;
<permission>はsend,recv(送信、受信)

この設定要素はオプショナルで、デフォルト無効(つまり、NICベースのアクセス制御はデフォルトでは無効)
NICベースのアクセス制御をデフォルト有効にすると、カスタマイズが多く必要になってしまうので。
この設定要素を記述したドメインにだけ、NICベースのアクセス制御が有効になるようにしている。
例:
domain hoge_t;
allownet -protocol tcp,udp -netif eth0 send,recv;

hoge_tは、eth0にパケットを送受信可能。eth1,loには送受信不可能。
なお、他のドメインには、NICベースのアクセス制御は働いてない。

node(IPアドレスのアクセス制御)

「あるIPアドレスだけにパケット送受信可能」という設定ができる。

allownet -protocol <プロトコル> -node <ipaddress> <permission>;
<permission>はsend,recv,bind(送信、受信, bind(サーバとして振る舞うときに、bindシステムコールでアドレスを利用)
<ipadress>は、<IPアドレス>/<ネットマスク>という書式。

この設定要素もオプショナルで、デフォルト無効。
例:
domain hoge_t;
allownet -protocol tcp,udp -node 192.168.0.0/255.255.255.0 send,recv;
hoge_tは、192.168.0ネットワークにだけパケットを送受信可。
なお、他のドメインには、IPアドレスベースのアクセス制御は働いてない。

NIC/nodeのアクセス制御の課題

上記の振舞いだと、厳しい設定が書きにくい(hoge_tドメインだけが、eth0にアクセスできる、みたいな設定が書きにくい)
例えば、globalドメインに、
allownet netifenable;
allownet nodeenable;
とすることで、NIC/nodeベースのアクセス制限を
デフォルト有効にできる必要がある。