Ryuji MATSUMOTO <matum...@pluto.ai.kyutech.ac.jp> wrote
  in <20170307.182632.2029998101879781962.matum...@pluto.ai.kyutech.ac.jp>:

ma> > 12340 allow tcp from LOCAL-IP to 192.0.2.1 dst-port 993
ma> > 12341 allow tcp from LOCAL-IP to 192.0.2.2 dst-port 993

(snip)

ma> while(1)
ma> {
ma>     sleep(1時間ぐらい);
ma>
ma>     dig +short imap.example.com > ip-list.txt
ma>
ma>     if(ip-list.txtの中身が変動した)
ma>     {
ma>             ipfwルール番号 12340-12341を削除する.
ma>             ipfwルール番号 12340-12341の所に新しいルールを追加する.
ma>     }
ma> }
ma>
ma> こういう事をやってくれるツールがどこかにありそうな気がするのですが.

 12340 allow tcp from LOCAL-IP to table(1) dst-port 993

 というようなルールを定義して、添付のようなスクリプトを
 cron でまわすのはいかがでしょうか。

-- Hiroki
#!/bin/sh
TARGET=${1:-imap.example.com}
TBLNUM=1

fifo1="/tmp/ipfwtbl_dns1.$$"
fifo2="/tmp/ipfwtbl_dns2.$$"
rm -f $fifo1 $fifo2
mkfifo -m 0600 $fifo1 $fifo2 || exit 1

host -t A $TARGET | while read d d TYPE IPADDR; do
        case $TYPE in
        address) echo $IPADDR HOST ;;
        esac
done | sort > $fifo1 &
ipfw table $TBLNUM list | while read IPADDR d; do
        case $IPADDR in
        -*)     ;;
        */32)   echo ${IPADDR%/32} IPFW ;;
        esac
done | sort > $fifo2 &
join -v 1 -v 2 $fifo1 $fifo2 | while read IPADDR MODE; do
        case $MODE in
        HOST)   # found in DNS but not found in IPFW table
                ipfw table $TBLNUM add $IPADDR/32
        ;;
        IPFW)   # found in IPFW table but not found in DNS
                ipfw table $TBLNUM delete $IPADDR/32
        ;;
        esac
done
rm -f $fifo1 $fifo2

Attachment: pgpvA4whcl_m_.pgp
Description: PGP signature

メールによる返信