
我正在開發旨在即時運行的 Ubuntu/Mint 發行版。有多個帳戶分為三個常規群組:管理、Internet 和安全性。
- 行政顯然擁有為所欲為的權力。
- 網際網路帳號用於使用網際網路。
其他帳戶是安全帳戶。在任何情況下都不允許使用任何網路網路、印表機、藍牙、WiFi 裝置等。
我想做的是從核心中刪除網路驅動程序,但這會禁用需要互聯網的帳戶。
禁用這些安全帳戶的互聯網的最低級別方法是什麼?我在找無法連接解決方案。
答案1
您可以使用iptables
( ip6tables
) 來做到這一點。
直到重新啟動
在終端機上將規則新增至iptables
sudo iptables -A OUTPUT -p all -m owner --uid-owner username -j DROP
sudo ip6tables -A OUTPUT -p all -m owner --uid-owner username -j DROP
在哪裡使用者名稱是您要停用 Internet 連線的使用者。儲存文件並退出。
這將會在iptables
( ip6tables
) 中新增一條規則,表示指定使用者建立的任何傳出套件將會自動刪除。
如果您想對完整的群組執行相同的操作,我建議您不要--uid username
使用--gid-owner groupname
,這對於完整的使用者群組具有相同的效果。
例如,為了阻止該群組security
訪問互聯網,命令將如下所示
sudo iptables -A OUTPUT -p all -m owner --gid-owner security -j DROP
sudo ip6tables -A OUTPUT -p all -m owner --gid-owner security -j DROP
永恆的
若要使規則永久化,您可以在 中建立腳本/etc/network/if-up.d/
,向其中新增必要的行並使其可執行。
作為一個選項,使用iptables-save
( ip6tables-save
) 保存當前規則並在啟動時恢復它們。
儲存目前iptables
規則
sudo iptables-save > /etc/iptables_rules
sudo ip6tables-save > /etc/ip6tables_rules
使用您喜歡的文字編輯器開啟/etc/rc.local
並在文件末尾添加
/sbin/iptables-restore < /etc/iptables_rules
/sbin/ip6tables-restore < /etc/ip6tables_rules
這將在每次啟動時恢復已儲存的規則。小心注意這一點您僅阻止其 ipv4 連線的使用者仍將能夠連接到網路。
欲了解更多資訊和更多iptables
選項,請諮詢其線上說明頁。
答案2
布魯諾的解決方案很好:我認為可能是最好的獨立解決方案。
您可以考慮的另一個選項是在單獨的電腦上設定防火牆/代理,作為網際網路的網關,它只允許提供每位使用者身份驗證的連線。您可以將兩者一起使用以獲得額外的保護。
答案3
如果防火牆是您設定的一部分,您可以使用直接規則阻止特定使用者的網路訪問,例如:
/etc/firewalld/direct.xml
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
<?xml version="1.0" encoding="utf-8"?>
<direct>
<chain ipv="ipv4"
table="filter"
chain="restrict_user_ipv4"/>
<rule ipv="ipv4"
table="filter"
chain="OUTPUT"
priority="1">-m owner --uid-owner user -j restrict_user_ipv4</rule>
<rule ipv="ipv4"
table="filter"
chain="restrict_user_ipv4"
priority="3">-j DROP</rule>
<chain ipv="ipv6"
table="filter"
chain="restrict_user_ipv6"/>
<rule ipv="ipv6"
table="filter"
chain="OUTPUT"
priority="1">-m owner --uid-owner user -j restrict_user_ipv6</rule>
<rule ipv="ipv6"
table="filter"
chain="restrict_user_ipv6"
priority="3">-j DROP</rule>
</direct>
不要忘記重新加載
# firewall-cmd --reload