script:dynamichostsufw
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anteriorRevisão anterior | |||
| script:dynamichostsufw [2025/04/16 14:31] – edição externa 127.0.0.1 | script:dynamichostsufw [2026/01/27 02:44] (atual) – removida gabrielovsky | ||
|---|---|---|---|
| Linha 1: | Linha 1: | ||
| - | <note important> | ||
| - | < | ||
| - | #!/bin/bash | ||
| - | |||
| - | HOSTS_ALLOW=/ | ||
| - | IPS_ALLOW=/ | ||
| - | |||
| - | add_rule() { | ||
| - | local proto=$1 | ||
| - | local port=$2 | ||
| - | local ip=$3 | ||
| - | local regex=" | ||
| - | local rule=$(ufw status numbered | grep $regex) | ||
| - | if [ -z " | ||
| - | ufw allow proto ${proto} from ${ip} to any port ${port} | ||
| - | else | ||
| - | echo "rule already exists. nothing to do." | ||
| - | fi | ||
| - | } | ||
| - | |||
| - | delete_rule() { | ||
| - | local proto=$1 | ||
| - | local port=$2 | ||
| - | local ip=$3 | ||
| - | local regex=" | ||
| - | local rule=$(ufw status numbered | grep $regex) | ||
| - | if [ -n " | ||
| - | ufw delete allow proto ${proto} from ${ip} to any port ${port} | ||
| - | else | ||
| - | echo "rule does not exist. nothing to do." | ||
| - | fi | ||
| - | } | ||
| - | |||
| - | |||
| - | sed '/ | ||
| - | do | ||
| - | proto=$(echo ${line} | cut -d: -f1) | ||
| - | port=$(echo ${line} | cut -d: -f2) | ||
| - | host=$(echo ${line} | cut -d: -f3) | ||
| - | |||
| - | if [ -f ${IPS_ALLOW} ]; then | ||
| - | old_ip=$(cat ${IPS_ALLOW} | grep ${host} | cut -d: -f2) | ||
| - | fi | ||
| - | |||
| - | ip=$(dig +short $host | tail -n 1) | ||
| - | |||
| - | if [ -z ${ip} ]; then | ||
| - | if [ -n " | ||
| - | delete_rule $proto $port $old_ip | ||
| - | fi | ||
| - | echo " | ||
| - | exit 1 | ||
| - | fi | ||
| - | |||
| - | if [ -n " | ||
| - | if [ ${ip} != ${old_ip} ]; then | ||
| - | delete_rule $proto $port $old_ip | ||
| - | fi | ||
| - | fi | ||
| - | add_rule $proto $port $ip | ||
| - | if [ -f ${IPS_ALLOW} ]; then | ||
| - | sed -i.bak / | ||
| - | fi | ||
| - | echo " | ||
| - | done | ||
| - | </ | ||
| - | |||
| - | The sample hosts file: / | ||
| - | |||
| - | < | ||
| - | tcp: | ||
| - | </ | ||
| - | |||
| - | The crontab which execute the script every 5 minutes to update the rules: | ||
| - | |||
| - | < | ||
| - | # m h dom mon dow | ||
| - | */5 * * * * / | ||
| - | </ | ||
script/dynamichostsufw.1744813880.txt.gz · Última modificação: por 127.0.0.1