Blockieren Sie den Netzwerkzugriff des Benutzers, außer zurück zur Adresse des SSH-Clients

Blockieren Sie den Netzwerkzugriff des Benutzers, außer zurück zur Adresse des SSH-Clients

Wie kann ich auf einem Linux-Server Berechtigungen einrichten, sodass sich eine bestimmte Gruppe von Benutzern per SSH anmelden darf, aber alle Netzwerkverbindungen ihrer Prozesse blockiert werden, sofern die Verbindung nicht zurück zur SSH-Clientadresse geht? Ich möchte beispielsweise einem Benutzer in der Gruppe erlauben, sich per SSH anzumelden und einen HTTP-Server (auf einem hohen Port) zu starten und dann von dem Computer aus, auf dem der SSH-Client ausgeführt wird, eine Verbindung zu ihm herzustellen, aber jeder andere Client im Internet darf nicht auf den HTTP-Server zugreifen können.

Ich weiß, dass ich den Netzwerkzugriff eines Benutzers mit iptables vollständig blockieren kann, aber wie lasse ich Datenverkehr zu, der von oder zu einem bestimmten Wert kommt oder geht $SSH_CLIENT?

Antwort1

Sie könnten beispielsweise ein Suid-Skript ausführen lassen, das iptables beim Login ändert. Sie müssen ihm keine Argumente übergeben, sondern es einfach aufrufen. Und .bash_login kann es automatisch aufrufen. Es kann lsof ausführen, um die IP der SSH-Verbindung abzurufen, die mit der UID des übergeordneten Elements verknüpft ist, die verbundene IP abzurufen und diese IP dann mit Regeln wie diesen auf die Whitelist zu setzen.

iptables -w -A users_input -p tcp -s $ip -m owner --owner-uid $owner -j ACCEPT
iptables -w -A users_output -p tcp -d $ip -m owner --owner-uid $owner -j ACCEPT

Wo diese Ketten an den entsprechenden Stellen in den Filter-INPUT- und OUTPUT-Ketten platziert werden. Und natürlich werden mit dieser --owner-uid auch alle vorherigen Regeln entfernt. Und Sie können, wenn Sie möchten, nur bestimmte Ports zulassen.

Perl mit Taint-Modus sollte für ein solches Skript geeignet sein.

Dadurch könnte das Netzwerk für diesen Benutzer bestehen bleiben, nachdem die SSH-Verbindung unterbrochen wurde. Wenn das ein Problem darstellt, können Sie es mit einem Cronjob oder einem Daemon lösen, der regelmäßig bestehende SSH-Verbindungen überprüft und dann alle Regeln entfernt, die nicht mit ihnen verknüpft sind.

Mir ist klar, dass diese Antwort viel enthält, was man tun könnte, aber das meiste davon ist Fleißarbeit. Machen Sie einfach das -m-Eigentümer-Zeug richtig.

verwandte Informationen