[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 メーリングリストの案内