Правила UFW для конкретного хоста / динамического днс

2283
Force

Как настроить UFW (несложный брандмауэр) для добавления правил для определенных хостов? Например. Я хочу разрешить SSH только с yourpc.no-ip.org?

1

1 ответ на вопрос

4
Force

Я нашел очень полезный скрипт, который динамически создает правила для конкретных хостов в этом блоге . Сценарий необходимо запустить с помощью cron, чтобы он мог искать имя хоста и добавлять / удалять правила в случае изменения IP-адреса.

#!/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 

Содержание /etc/ufw-dynamic-hosts.allowможет выглядеть так:

tcp:22:yourpc.no-ip.org 

и запись в crontab для выполнения скрипта каждые пять минут может выглядеть так:

*/5 * * * * /usr/local/sbin/ufw-dynamic-host-update > /dev/null 
+1 - В моем случае я использую «ufw status» вместо «ufw status numbered» в строке 12 из-за ошибки «неправильное имя переменной» в некоторых случаях. Также в корне crontab я вынужден использовать 'sudo sh / usr / local / sbin / ufw-dynamic-host-update> / dev / null'. Для отладки вы должны сделать так, чтобы он указывал на файл вроде 'sudo sh / usr / local / sbin / ufw-dynamic-host-update >> / etc / ufw-custom-log'. giannis.epp 8 лет назад 0

Похожие вопросы