
Ich arbeite an einer Ubuntu/Mint-Distribution, die live laufen soll. Es gibt mehrere Konten, die in drei allgemeine Gruppen fallen: Admin, Internet und Sicherheit.
- AdministratorEs ist offensichtlich, dass er die Befugnis hat, alles zu tun.
- InternetDas Konto dient der Nutzung des Internets.
Die anderen Konten sindSicherheitKonten. Unter keinen Umständen sind Netzwerk-Internet, Drucker, Bluetooth, WLAN-Geräte usw. erlaubt.
Ich möchte die Netzwerktreiber aus dem Kernel entfernen, aber dadurch würden die Konten deaktiviert, die Internet benötigen.
Was sind die einfachsten Möglichkeiten, das Internet für diese Sicherheitskonten zu deaktivieren? Ich suchekeine Verbindung möglichLösungen.
Antwort1
Das geht mit iptables
( ip6tables
).
Bis zum Neustart
Fügen Sie auf einem Terminal die Regel hinzu zuiptables
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
WoNutzernameist der Benutzer, für den Sie die Internetverbindung deaktivieren möchten. Speichern Sie die Datei und beenden Sie sie.
iptables
Dadurch wird ( ) eine Regel hinzugefügt ip6tables
, die besagt, dass alle ausgehenden Pakete, die vom angegebenen Benutzer erstellt werden, automatisch von ihm gelöscht werden.
Wenn Sie dasselbe für eine komplette Gruppe tun möchten, schlage ich vor, dass --uid username
Sie statt verwenden. --gid-owner groupname
Dies hat für eine komplette Benutzergruppe den gleichen Effekt.
Um beispielsweise der Gruppe security
den Zugriff auf das Internet zu verwehren, würde der Befehl etwa so aussehen:
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
Dauerhaft
Um die Regel dauerhaft zu machen, können Sie in ein Skript erstellen /etc/network/if-up.d/
, die erforderlichen Zeilen hinzufügen und es ausführbar machen.
Verwenden Sie optional iptables-save
( ip6tables-save
), um Ihre aktuellen Regeln zu speichern und sie beim Booten wiederherzustellen.
Aktuelle iptables
Regeln speichern
sudo iptables-save > /etc/iptables_rules
sudo ip6tables-save > /etc/ip6tables_rules
Öffnen Sie die Datei /etc/rc.local
mit Ihrem bevorzugten Texteditor und fügen Sie am Ende der Datei hinzu
/sbin/iptables-restore < /etc/iptables_rules
/sbin/ip6tables-restore < /etc/ip6tables_rules
Dadurch werden die gespeicherten Regeln bei jedem Bootvorgang wiederhergestellt. Beachten Sie, dassBenutzer, für die Sie nur IPv4-Verbindungen blockiert haben, können weiterhin eine Verbindung zum Internet herstellen.
Weitere Informationen und weitere iptables
Optionen finden Sie in dermanpage.
Antwort2
Brunos Lösung ist gut: Meiner Meinung nach wahrscheinlich die beste in sich geschlossene Lösung.
Eine weitere Option, die Sie in Betracht ziehen können, ist die Einrichtung einer Firewall/eines Proxys auf einem separaten Computer als Gateway zum Internet, der nur Verbindungen zulässt, die eine Authentifizierung pro Benutzer ermöglichen. Sie können beides zusammen für zusätzlichen Schutz verwenden.
Antwort3
WennFirewallTeil Ihres Setups ist, können Sie den Netzwerkzugriff für einen bestimmten Benutzer mithilfe einer direkten Regel blockieren, z. B.:
/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>
Vergessen Sie nicht, nachzuladen mit
# firewall-cmd --reload