Iniciando o processo dentro de um namespace de rede que só pode ver o desejado Endereço IP pode realizar algo semelhante. Por exemplo, supostamente eu só queria localhost disponível para um programa particular.
Primeiro, eu crio o namespace da rede:
ip netns add limitednet
Os namespaces têm uma interface de loopback por padrão, então, próximo, eu preciso trazê-la para cima:
sudo ip netns exec limitednet ip link set lo up
Agora, posso executar um programa usando ip netns exec limitednet
e ele só poderá ver a interface de loopback:
sudo ip netns exec limitednet ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
Se eu quisesse limitá-lo a um endereço diferente de localhost, eu poderia adicionar outras interfaces no namespace usando:
ip link set DEVICE_NAME netns NAMESPACE
Eu teria que experimentar um pouco mais para descobrir como adicionar um único endereço IP em um namespace no caso em que uma interface pode ter mais de um endereço IP
O artigo do LWN sobre namespaces também é útil.