如果能夠推出,則過程:
1)使用LXC(Linux的容器)把應用程序在它自己的網絡命名空間。您可以爲該容器設置netfilter規則。哎呀,你可以給應用程序它自己的IP地址,如果你想。
/usr/bin/lxc-execute -n app_container -f my_net_lxc.conf your_application
2)正如Wu指出的那樣,您可以使用LD_PRELOAD來覆蓋標準庫。只需將它指向一些包裝函數,就可以攔截應用程序中的所有調用。
LD_PRELOAD=/usr/lib/mylib.so your_application
# See here for info: https://github.com/wh5a/ld_preload
3)正如Giles指出的那樣,您可以使用iptables。您將不得不爲該應用程序創建一個特殊用戶。
# Setup: Add a user and give him some rules
adduser --shell /bin/false --no-create-home tempuser
iptables -A OUTPUT -m owner --uid-owner tempuser -j ACCEPT
# Run your app
sudo -u tempuser your_application
4)你可以運行在虛擬機技術,如用戶模式Linux或QEMMU,這給應用程序一個整體的內核,你可以修改在多個級別/控制應用程序。
如果你沒有啓動進程,你仍然可以使用ptrace附加進程。這可以讓您檢查過程所做的每個系統調用。
您可以通過LD_PRELOAD技術或ptrace攔截系統調用send/recv。 iptables或pcap不捕獲進程信息。 – 2013-03-25 14:45:12
您不能使用netfilter過濾特定的過程,但可以過濾特定的用戶。請參閱http://unix.stackexchange.com/questions/68956/block-network-access-of-a-process,http://unix.stackexchange.com/questions/12499/iptables-pf-rule-to-only -allow-xy-application-user – Gilles 2013-03-25 15:39:36
謝謝,雍正和吉爾:) – 2013-03-28 06:39:11