[FreeBSD-users-jp 96056] Re: DNSを監視して動的にipfwのルールを追加/削除するツール.
Hiroki Sato
hrs @ allbsd.org
2017年 3月 7日 (火) 10:50:38 UTC
Ryuji MATSUMOTO <matumoto @ pluto.ai.kyutech.ac.jp> wrote
in <20170307.182632.2029998101879781962.matumoto @ 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
-------------- next part --------------
#!/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
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: 無し
型: application/pgp-signature
サイズ: 181 バイト
説明: 無し
URL: <http://lists.freebsd.org/pipermail/freebsd-users-jp/attachments/20170307/e5b44a21/attachment-0001.sig>
freebsd-users-jp メーリングリストの案内