UFW-Regeln für bestimmte Host- / dynamische DNS

2396
Force

Wie kann ich UFW (Unkomplizierte Firewall) einrichten, um Regeln für bestimmte Hosts hinzuzufügen? Z.B. Ich möchte SSH nur von yourpc.no-ip.org zulassen?

1

1 Antwort auf die Frage

4
Force

In diesem Blog habe ich ein sehr nützliches Skript gefunden, das Regeln für bestimmte Hosts dynamisch erstellt . Das Skript muss mit cron ausgeführt werden, damit es nach einem Hostnamen suchen und Regeln hinzufügen oder löschen kann, falls sich die IP-Adresse geändert hat.

#!/bin/bash   HOSTS_ALLOW=/etc/ufw-dynamic-hosts.allow IPS_ALLOW=/var/tmp/ufw-dynamic-ips.allow  add_rule() { local proto=$1 local port=$2 local ip=$3 local regex="$\/$.*ALLOW.*IN.*$" local rule=$(ufw status numbered | grep $regex) if [ -z "$rule" ]; then ufw allow proto $ from $ to any port $ else echo "rule already exists. nothing to do." fi }  delete_rule() { local proto=$1 local port=$2 local ip=$3 local regex="$\/$.*ALLOW.*IN.*$" local rule=$(ufw status numbered | grep $regex) if [ -n "$rule" ]; then ufw delete allow proto $ from $ to any port $ else echo "rule does not exist. nothing to do." fi }   sed '/^[[:space:]]*$/d' $ | sed '/^[[:space:]]*#/d' | while read line do proto=$(echo $ | cut -d: -f1) port=$(echo $ | cut -d: -f2) host=$(echo $ | cut -d: -f3)  if [ -f $ ]; then old_ip=$(cat $ | grep $ | cut -d: -f2) fi  ip=$(dig +short $host | tail -n 1)  if [ -z $ ]; then if [ -n "$" ]; then delete_rule $proto $port $old_ip fi echo "Failed to resolve the ip address of $." 1>&2 exit 1 fi  if [ -n "$" ]; then if [ $ != $ ]; then delete_rule $proto $port $old_ip fi fi add_rule $proto $port $ip if [ -f $ ]; then sed -i.bak /^$*/d $ fi echo "$:$" >> $ done 

Der Inhalt /etc/ufw-dynamic-hosts.allowkönnte so aussehen:

tcp:22:yourpc.no-ip.org 

und ein crontab-Eintrag für die Ausführung des Skripts alle fünf Minuten könnte folgendermaßen aussehen:

*/5 * * * * /usr/local/sbin/ufw-dynamic-host-update > /dev/null 
+1 - In meinem Fall verwende ich in Zeile 12 "ufw status" statt "ufw status numbered", da in einigen Fällen ein Fehler mit dem Namen "falscher Variablenname" aufgetreten ist. Auch auf root crontab musste ich 'sudo sh / usr / local / sbin / ufw-dynamic-host-update> / dev / null' verwenden. Für das Debuggen sollten Sie es in einer Datei wie 'sudo sh / usr / local / sbin / ufw-dynamic-host-update >> / etc / ufw-custom-log' angeben. giannis.epp vor 8 Jahren 0