悪いホスト


「悪意のあるURL」データベースからIPアドレスリストとホスト名を抽出

URLhausが提供する「悪意のあるURL」データベースではマルウエアのあるページ(等)の迷惑ウェブページのURLを提供している。

PhishTankが提供するデータベースではフィッシングサイト(等)の迷惑ウェブページのURLを提供している。

おそらく提供されているデータ・ファイルをSnort/SuricataなどのIDSやSquidのようなプロクシサーバで利用すれば家庭や職場のLAN内のユーザーを悪意のあるページから守ることができるのだろうが、IDSやProxyは使いたくないという場合もあるかと思われる。
そこで、URLhausの提供する「悪意のあるURLリスト」からIPアドレスとホスト名を抽出し、ファイアウォールでそのIPアドレスをBanし、DNSキャッシュサーバでホスト名のIPアドレスを引けなくすることに。(2つをセットで使う)
なお、IPアドレス・ホスト名共にそのホスト全体がブロックされることになるので同ホストで提供されている正常なその他コンテンツも閲覧できなくなります。迷惑コンテンツを提供しているホストの提供するコンテンツは全て信用しないという考えの方が、このページで提供するブロック方法を採用すると良いかと考えます。

提供するファイル


マルウエア IPアドレスとホスト

フィッシングサイト IPアドレスとホスト

ファイルは毎日1:30頃と13:30頃に更新されます。

使い方


提供するIPアドレスは1行に1アドレスが書かれただけのシンプルなリスト。OpenBSDやFreeBSDのファイアウォールpfではこのファイルをテーブルとして読み込んでBanの対象としてそのテーブル名を指定するだけで簡単に利用できる。他のファイアウォールではリストをコマンドに埋め込むなど編集して使用する。その他のファイアウォールではリストを加工して使用する必要があるでしょう。

IPアドレスリストをファイアウォールで使う


pfの設定例
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
ext_if = "fxp0"
table <malware>  persist file "/etc/warui_malware_ipv4.txt"
table <phishing> persist file "/etc/warui_phish_hosts.txt"


priv_nets = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }" 
Icmp_types = "icmp-type { echoreq, unreach }"
TcpState ="flags S/SA keep state"
UdpState ="keep state"

set block-policy drop
set loginterface $ext_if
set skip on lo0
scrub in all

#pfでNATをやるならなら以下1行 (その場合は事前にint_net = "{ 192.168.0.0/24 }"のように指定)
nat on $ext_if from $int_net to any -> ($ext_if)

block all
block in  quick on $ext_if from $priv_nets to any
block out quick on $ext_if from any to $priv_nets

#warui,hogeテーブルをIn/Out共にブロック
block in  quick on $ext_if from { <malware>, <phishing> } to ($ext_if)
block out quick on $ext_if from ($ext_if) to { <malware>, <phishing> } 

#Inbound TCP/UDP
pass in on $ext_if inet proto tcp  from any to ($ext_if) port $tcp_services $TcpState
pass in on $ext_if inet proto udp  from any to ($ext_if) port $udp_services $UdpState

#Outbound TCP/UDP
pass out on $ext_if inet proto tcp $TcpState
pass out on $ext_if inet proto udp $UdpState

#ICMP
pass on $ext_if inet proto icmp all $icmp_types keep state

# service pf reload  #設定再読み込み

使い方についてはがとらぼの記事をご参照下さい。


ホストリストをunboundで使う


提供するホストファイルはUnboundでインクルードすることでそのまま利用可能。


unboundの設定例
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server:
    verbosity: 0
    interface: ::1		#IPv6
    interface: ::0		#IPv6
    interface: 127.0.0.1	#IPv4
    interface: 0.0.0.0	#IPv4

    #アクセスコントロール
    access-control: 0.0.0.0/0 refuse  #IPv4全拒否
    access-control: ::0/0 refuse      #IPv6全拒否
    access-control: 127.0.0.0/8 allow #許可(以下4行)
    access-control: ::1 allow
    access-control: 192.168.0.0/24 allow  #LAN (自分のLANアドレスに書き換え)
    access-control: 2001:xxxx:xxxx:xxxx/64 allow  # IPv6 LAN (自分のLANアドレスに書き換え)

    #インクルードするファイル指定 (server:の中でインクルードする場合)
    include: /usr/local/etc/unbound/warui_malware_hosts_unbound.txt
    include: /usr/local/etc/unbound/warui_phish_hosts_unbound.txt

forward-zone:
    name: "."
    forward-addr: 2001:4860:4860::8888 #or ISPのDNSサーバなど(IPv6)
    forward-addr: 2001:4860:4860::8844 #or ISPのDNSサーバなど(IPv6)
    forward-addr: 8.8.8.8   #or ISPのDNSサーバなど(IPv4) 
    forward-addr: 8.8.4.4   #or ISPのDNSサーバなど(IPv4)

# service unbound reload  #設定再読み込み

使い方についてはがとらぼの記事をご参照下さい。
WindowsでUnboundを利用する場合はWindowsでUnboundの記事をご参照下さい。