質問: 特定のホスト/ダイナミックdnsのufwルール 特定のホストのルールを追加するためにufw(uncomplicated firewall)を設定するにはどうすればよいですか?例えば。 yourpc.no-ip.orgからのみsshを許可したいですか?
回答: 特定のホストのルールを動的に作成する非常に便利なスクリプトを見つけました このブログで 。スクリプトは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="${port}\/${proto}.*allow.*in.*${ip}" local rule=$(ufw status numbered | grep $regex) if [ -z "$rule" ]; then 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="${port}\/${proto}.*allow.*in.*${ip}" local rule=$(ufw status numbered | grep $regex) if [ -n "$rule" ]; then ufw delete allow proto ${proto} from ${ip} to any port ${port} else echo "rule does not exist. nothing to do." fi } sed '/^[[:space:]]*$/d' ${hosts_allow} | sed '/^[[:space:]]*#/d' | while read line 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 "${old_ip}" ]; then delete_rule $proto $port $old_ip fi echo "failed to resolve the ip address of ${host}." 1>&2 exit 1 fi if [ -n "${old_ip}" ]; then 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 /^${host}*/d ${ips_allow} fi echo "${host}:${ip}" >> ${ips_allow} done /etc/ufw-dynamic-hosts.allowの内容は次のようになります。tcp:22:yourpc.no-ip.org また、5分ごとにスクリプトを実行するためのcrontabエントリは次のようになります。*/5 * * * * /usr/local/sbin/ufw-dynamic-host-update > /dev/null