Einschränkung der Anzahl von Verbindungen
Um sich vor Brute-Force-Angriffen (Passwort-Raten) zu schützen, kann die Anzahl der Verbindungen zum Port 22 von einer einzelnen IP-Adresse auf wenige Versuche pro Minute begrenzt werden, wonach Verbindungsversuche von dieser IP-Adresse blockiert werden.
## Создание цепочки правил sshguard
# Максимум 2 новых запроса в минуту для одного ip
/sbin/iptables -N sshguard
# Вкл. лог по желанию
#/sbin/iptables -A sshguard -m state --state NEW -m recent --name SSH --rcheck --seconds 60 --hitcount 2 -j LOG --log-prefix "SSH-shield: "
/sbin/iptables -A sshguard -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 2 -j DROP
/sbin/iptables -A sshguard -m state --state NEW -m recent --name SSH --set -j ACCEPT
/sbin/iptables -A sshguard -j ACCEPT
## Применение для трафика ssh цепочку sshguard
/sbin/iptables -A INPUT -p tcp --dport 22 -j sshguard
recent ist ein Kernel-Modul (Core Netfilter Configuration), das dynamische IP-Adresslisten erstellt. Das Modul unterstützt eine Reihe von Optionen.
-
--name name : Name der Liste, mit der der Befehl arbeitet. Standardmäßig wird für die Liste der Name DEFAULT verwendet.
-
--rcheck : Diese Option prüft, ob die Absenderadresse des Pakets in der Liste vorhanden ist. Wenn die Adresse nicht in der Liste vorhanden ist, wird false zurückgegeben.
-
--update : Diese Option prüft, ob die Absenderadresse des Pakets in der Liste vorhanden ist. Wenn die Adresse vorhanden ist, wird der entsprechende Eintrag aktualisiert. Wenn die Adresse nicht in der Liste vorhanden ist, wird false zurückgegeben.
-
--hitcount hits : Zähler, der true zurückgibt, wenn die Adresse in der Liste vorhanden ist und die Anzahl der empfangenen Pakete von dieser Adresse größer oder gleich dem angegebenen Wert ist. Wird zusammen mit rcheck oder update verwendet.
-
--seconds seconds : Definiert den Zeitraum (ab dem Zeitpunkt des Hinzufügens der Adresse zur Liste), in dem die Adresse in der Liste verbleiben kann.
-
--set : Dient zum Hinzufügen der Absenderadresse des Pakets zur Liste. Wenn diese Adresse bereits in der Liste vorhanden ist, wird der Eintrag aktualisiert.
-
--remove : Entfernt die Adresse aus der Liste. Wenn die Adresse nicht gefunden wird, wird false zurückgegeben.
Optionen können mit Invertierung (!) verwendet werden.
Eine kleine Regel für iptables, die hilft, Ports nicht unnötig offen zu halten.
Beispiel für den Zugriff auf SSH, obwohl Sie es natürlich nach Belieben verwenden können.
Die Regel ist einfach: Um Zugriff auf die Shell zu erhalten, müssen Sie zunächst den Port 1500 anfragen, z. B. per telnet:
telnet myserver 1500
oder über einen Browser:
http://192.168.0.100:1500
Wenn Sie stattdessen den Port 1499 anfragen, wird der Port geschlossen.
iptables -N sshguard # Если адрес в списке, то подключение разрешено iptables -A sshguard -m state --state NEW -m recent --rcheck --name SSH -j ACCEPT # Разрешить пакеты для уже установленных соединений iptables -A sshguard -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A sshguard -j DROP # Заносит адрес в список #iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1500 -j LOG --log-prefix "SSH-open: " iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1500 -m recent --name SSH --set -j DROP # Удаляет адрес из списка iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1499 -m recent --name SSH --remove -j DROP # Применение для трафика ssh цепочку sshguard iptables -A INPUT -p tcp --dport 22 -j sshguard
Öffnen des SSH-Ports für eine bestimmte Zeitdauer
Ein weiteres Beispiel zeigt, wie der SSH-Port für eine bestimmte IP-Adresse für eine festgelegte Zeitdauer geöffnet werden kann.
## определяем цепочку для SSH трафика
iptables -N sshguard
iptables -F sshguard
# Разрешить подключение если ip есть в списке и последнее подключение осуществлялось не позднее 108000 секунд (30 часов)
iptables -A sshguard -m state --state NEW -m recent --update --seconds 108000 --name SSH -j ACCEPT
# Разрешить пакеты для уже установленных соединений
iptables -A sshguard -m state --state ESTABLISHED,RELATED -j ACCEPT
# Заблокировать если нет в списке
iptables -A sshguard -j DROP
## Открытие SSH
iptables -A INPUT -m state --state NEW -p tcp --dport 222 -m recent --name SSH --set
## Фильтрация ssh трафика через цепочку sshguard
iptables -A INPUT -p tcp --dport 22 -j sshguard
Um nun SSH-Zugriff zu erhalten, müssen Sie zunächst den Port 222 anfragen, z. B. so:
ssh user@server.name -p 222
Anschließend wird der Zugriff auf Port 22 für Ihre IP-Adresse für die angegebene Zeitdauer erlaubt. Jeder neue SSH-Verbindungsversuch verlängert diese Zeitdauer. Wenn Sie keine Verlängerung wünschen, ersetzen Sie --update --seconds 108000 durch --rcheck.
