■たくさんのブロックリストURLをワンライナーでFortigateのfirewallに適用する。
■例えば以下のサイト一覧をFortigateのアドレスグループに変換してみる。
消費者庁の「悪質な海外ウェブサイト一覧」からURL一覧を取得してみた。
http://labunix.hateblo.jp/entry/20141126/1417013113
■必要なパッケージはpdfgrep、wget。
$ sudo apt-get install -y pdfgrep
■「awk '{if(NR<6){print}else{tmp=$NR}};END{print}'」は
先頭のセクションのみを切り出すため。
$ test -f 141031adjustments_1.pdf || \
wget "http://www.caa.go.jp/adjustments/pdf/141031adjustments_1.pdf"; \
pdfgrep "http" "141031adjustments_1.pdf" | \
tr ' ' '\n' | awk '/http/{print $NF}' | sort -u | sed -e 's%http:\|/%%g'| \
awk 'BEGIN{print "config firewall address"}; \
/^[a-z]/ {print " edit \""$1"\"\n" \
" set type fqdn\n" \
" set fqdn \""$1"\"\n" \
" next"}; \
END{print "end"}' | \
awk '{if(NR<6){print}else{tmp=$NR}};END{print}'
config firewall address
edit "asazunet.com"
set type fqdn
set fqdn "asazunet.com"
next
end
■グループメンバーとなる数を確認。
$ test -f 141031adjustments_1.pdf || \
wget "http://www.caa.go.jp/adjustments/pdf/141031adjustments_1.pdf"; \
pdfgrep "http" "141031adjustments_1.pdf" | \
tr ' ' '\n' | awk '/http/{print $NF}' | sort -u | sed -e 's%http:\|/%%g'| \
awk 'BEGIN{print "config firewall address"}; \
/^[a-z]/ {print " edit \""$1"\"\n" \
" set type fqdn\n" \
" set fqdn \""$1"\"\n" \
" next"}; \
END{print "end"}' | awk '/set fqdn /{count+=1};END{print count}'
222
■上記の中身も確認出来たら、直接sshで流し込む。
$ test -f 141031adjustments_1.pdf || \
wget "http://www.caa.go.jp/adjustments/pdf/141031adjustments_1.pdf"; \
pdfgrep "http" "141031adjustments_1.pdf" | \
tr ' ' '\n' | awk '/http/{print $NF}' | sort -u | sed -e 's%http:\|/%%g'| \
awk 'BEGIN{print "config firewall address"}; \
/^[a-z]/ {print " edit \""$1"\"\n" \
" set type fqdn\n" \
" set fqdn \""$1"\"\n" \
" next"}; \
END{print "end"}' | ssh 172.31.31.252
■アドレスグループ名は「141031adjustments_1」とした。
$ test -f 141031adjustments_1.pdf || \
wget "http://www.caa.go.jp/adjustments/pdf/141031adjustments_1.pdf"; \
pdfgrep "http" "141031adjustments_1.pdf" | \
tr ' ' '\n' | awk '/http/{print $NF}' | sort -u | sed -e 's%http:\|/%%g'| \
awk 'BEGIN{print "config firewall addrgrp"; \
print " edit \"141031adjustments_1\""; \
printf " set member "}; \
/^[a-z]/{printf "\"%s\" ",$1}; \
END{print "\n next";print "end"}' | ssh 172.31.31.252
■「firewall policy」を流し込む。
$ echo -e 'config firewall policy
edit 0
set srcintf "internal" "dmz"
set dstintf "wan1"
set srcaddr "internal-seg" "dmz-seg"
set dstaddr "141031adjustments_1"
set schedule "always"
set service "ALL"
set logtraffic all
next\nend' | ssh 172.31.31.252
■後はmoveするかWeb管理画面で先頭に移動すると、
222メンバーが所属するグループは真っ先にブロックされる。
■SquidGuardに蓄積した個人用domainsルールに
「*.」を先頭につけて追加する場合も少し変えるだけ。
$ sudo awk 'BEGIN{print "config firewall address"}; \
/^[a-z]/ {print " edit \"*."$1"\"\n" \
" set type fqdn\n" \
" set fqdn \"*."$1"\"\n" \
" next"}; \
END{print "end"}' \
/var/lib/squidguard/db/personal/domains
■一つだけ切り出すと例えば以下のようになる。
$ sudo awk 'BEGIN{print "config firewall address"}; \
/^[a-z]/ {print " edit \"*."$1"\"\n" \
" set type fqdn\n" \
" set fqdn \"*."$1"\"\n" \
" next"}; \
END{print "end"}' \
/var/lib/squidguard/db/personal/domains | awk '{if(NR<6){print}else{tmp=$NR}};END{print}'
config firewall address
edit "*.accesstrade.ne.jp"
set type fqdn
set fqdn "*.accesstrade.ne.jp"
next
end
■アドレスグループ「PersonalBlocked」にメンバーとして設定
$ sudo awk 'BEGIN{print "config firewall addrgrp"; \
print " edit \"PersonalBlocked\""; \
printf " set member "}; \
/^[a-z]/{printf "\"*.%s\" ",$1}; \
END{print "\n next";print "end"}' /var/lib/squidguard/db/personal/domains
■内部から外部への通信について、グループに所属する
27メンバーを拒否するよう設定。
dmz -> wan1
internal -> wan1
$ show firewall policy 9
config firewall policy
edit 9
set srcintf "internal" "dmz"
set dstintf "wan1"
set srcaddr "internal-seg" "dmz-seg"
set dstaddr "PersonalBlocked"
set schedule "always"
set service "ALL"
set logtraffic all
next
end