from: cgroup-iptables-disable-app_copyq-net.md

#[功能] 挂载、创建 cgroup(名为disable_net) ,设置其class_id, 令iptables丢弃该class_id的网络包

function mountCreateCgroup__disable_net__my_classid__iptables_drop(){
set -e -u

[[ $# -lt 1 ]] && return 41
local my_classid="$1"
##local my_classid=123 #命令展开形式(例)

local net_cls_d="/sys/fs/cgroup/net_cls"
#挂载cgroup的net_cls
sudo mkdir -p $net_cls_d
##sudo mkdir -p /sys/fs/cgroup/net_cls #命令展开形式
sudo mount | grep  $net_cls_d ||  sudo mount -t cgroup -onet_cls net_cls $net_cls_d
##............................||  sudo mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls  #命令展开形式

#查看已挂载的cgroup
sudo mount | grep  cgroup
#cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
#net_cls on /sys/fs/cgroup/net_cls type cgroup (rw,relatime,net_cls)

#新建cgroup (名为disable_net)
sudo cgcreate -g net_cls:/disable_net

#默认classid为0
cat  $net_cls_d/disable_net/net_cls.classid # == 0

#修改classid为123(例)
echo $my_classid | sudo tee   $net_cls_d/disable_net/net_cls.classid  # == 123(例)
##echo 123 | sudo tee   /sys/fs/cgroup/net_cls/disable_net/net_cls.classid  # == 123(例) #命令展开形式(例)


cat  $net_cls_d/disable_net/net_cls.classid  # == 123(例)

#令iptables丢弃 classid==123(例) 的 网络包裹, 从而达到禁止网络访问的效果
sudo iptables -A OUTPUT -m cgroup --cgroup $my_classid  -j DROP
##sudo iptables -A OUTPUT -m cgroup --cgroup 123  -j DROP #命令展开形式(例)
} #end_func

使用举例

#挂载、创建 cgroup(名为disable_net) ,设置其class_id, 令iptables丢弃该class_id的网络包
my_classid=123
mountCreateCgroup__disable_net__my_classid__iptables_drop $my_classid


#获得域名163.com对应的ip
site_domain="163.com"
site_ip=$(dig +short "$site_domain") # == 59.111.160.244
web_url="http://${site_ip}" # == http://59.111.160.244

#普通curl正常访问网络
curl  "${web_url}"

#实测 经过 该net_cls 的 curl命令确实不能访问网络  
sudo cgexec -g net_cls:disable_net curl --verbose  "${web_url}"
#*   Trying 59.111.160.244:80...  #停在这里

#运行copyq但不允许其访问网络
sudo  cgexec -g net_cls:disable_net /usr/bin/copyq
##sudo DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY cgexec -g net_cls:disable_net /usr/bin/copyq  #备用命令

参考:

cgroup 子系统之 net_cls 和 net_prio

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部