
Aktualisieren:
Ich habe es versucht sudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4,11.22.33.44 -j DROP
, es funktioniert nicht und ich bekomme eine Fehlermeldung
iptables v1.8.2 (nf_tables): ! nicht zulässig mit mehreren Quell- oder Ziel-IP-Adressen
Mein Ziel ist beispielsweise, nur SSH (Port 22) meines Servers zuzulassen 1.2.3.4
und eine Verbindung herzustellen.11.22.33.44
Und ich bevorzuge diesen Ansatz/Befehl gegenüber anderen.
sudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4 -j DROP
Aber ich weiß nicht, wie ich 11.22.33.44
diesem Befehl eine weitere zulässige IP-Adresse hinzufügen kann.
Könnt ihr mir ein wenig weiterhelfen oder Tipps geben?
Danke.
Antwort1
DefinierenmehrereAdressen nur miteins iptables
Die Verwendung eines Befehls ! --source
ist nicht möglich.
Eine Adresse kann entweder ein Netzwerkname, ein Hostname (wahrscheinlich ist es wirklich keine gute Idee, Hostnamen zu verwenden), eine Netzwerk-IP-Adresse (mit /mask) oder eine einfache IP-Adresse sein. Die Maske kann entweder eine Netzwerkmaske oder eine einfache Zahl sein.
Sie könnten erwägen, den Standardregelsatz von „Zulassen“ auf „Abweisen“ zu ändern. Auf diese Weise könnten Sie nur das definieren, was erlaubt sein soll, etwa so:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
... your other rules goes here ...
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -s 1.2.3.4,11.22.33.44 -j ACCEPT
iptables -P INPUT DROP
Der Vorteil/die Schönheit besteht darin, dass ein solcher Regelsatz viel leistungsfähiger wäre, da der Status der Pakete berücksichtigt wird. Außerdem ermöglicht es die gewünschte Syntax. Außerdem ist es die empfohlene Methode zum Definieren von Firewall-Regeln.
Beachten Sie jedoch, dass bei Verwendung einer Syntax wie oben gezeigt: -s 1.2.3.4,11.22.33.44
dennoch zwei einzelne Tabelleneinträge erstellt werden, wie Sie anhand des Befehls sehen können iptables -L INPUT
. Außerdem funktioniert es nicht mit allen Versionen von iptables. Außerdem finde ich es persönlich schwer zu lesen oder zu warten. Aus diesem Grund versuche ich, es zu vermeiden und verwende lieber zwei separate Befehle.
Wenn Sie die Anzahl der Regeln minimieren möchten, können Sie am ehesten Folgendes tun:eins iptables
Regel verwenden . --match
Allerdings --source
müssen Sie die Übereinstimmung trotzdem mit zusätzlichen Befehlen definieren. Wie das funktioniert, wurde im anderen Kommentar, der sich mit ipset beschäftigt, perfekt erklärt.
Antwort2
Sie können einIP-Adresse festgelegt.
Abhängig von Ihrer Distribution müssen Sie möglicherweise ipset
zuerst das Dienstprogramm installieren.
#(For Debian and Debian-derived distros)
sudo apt install ipset-persistent
Anschließend erstellen Sie ein Set mit einem benutzerfreundlichen Namen.
sudo ipset create ssh_friends iphash
Sobald Sie einen Satz haben, können Sie ihm IPs hinzufügen.
sudo ipset add ssh_friends 1.2.3.4
sudo ipset add ssh_friends 11.22.33.44
Jetzt können Sie das von Ihnen erstellte Set in einer iptables
Regel anstelle einzelner IPs verwenden.
sudo iptables -A INPUT -p tcp --destination-port 22 -m set ! --match-set ssh_friends src -j DROP