GeoIP 簡単検索 Maxmind GeoLite2
目的
自動アップデートされる GeoIP データベースを無料で利用する
事前準備
GeoLite2 DB 自動アップデートと検索
パブリッククラウドのサーバに DNS を設定した場合の注意点(Let's get rid of unnecessary DNS records..)
AWS などのパブリッククラウドで一時的にサーバを立て、DNS レコードを登録した場合は、サーバのシャットダウン時に DNS レコードの削除も忘れないこと。
背景
パブリッククラウドで一時的に付与されたグローバル IP アドレスは他のアカウントと共有のため、サーバシャットダウン後に使い回される。
パブリック IP アドレスは、Amazon のパブリック IPv4 アドレスプールからインスタンスに割り当てられ、お客様の AWS アカウントには関連付けられません。パブリック IP アドレスをインスタンスから割り当て解除すると、そのパブリック IPv4 アドレスはパブリック IP アドレスプールに戻され、再利用することはできません。
手動でパブリック IP アドレスをインスタンスに関連付けること、また、手動でインスタンスから割り当て解除することはできません。場合によって、パブリック IP アドレスはインスタンスから解放されたり、新しいインスタンスに割り当てられたりします
・インスタンスのパブリック IP アドレスが停止または終了すると、インスタンスのパブリック IP アドレスが解放されます。停止していたインスタンスが再起動されると、そのインスタンスには新しいパブリック IP アドレスが送信されます。
テスト
- AWS( ap-northeast )に連続してインスタンスを建てる(1,000インスタンス)
- 付与された IP アドレスについて、実際に DNS に登録があるかを確認( PDNS を利用)
- テスト時間:スクリプトは適当に sleep を入れてゆっくり実施し、5時間程度で終了
結果
IP address , FQDN
54. ***.**.*** , ***.jp
3.***.***.*** , *************.****.link
54.***.***.** , ***.****.biz
3.***.***.** , *********.com
13.***.***.*** , *******.***.net
:
:
まとめ
- 管理者は不要な DNS レコードを消す仕組みを作る。
- サーバ証明書の取得など、悪用の可能性あり。
- サーバを継続利用する場合は Elastic IP を使うなど、IP アドレスを管理下に置くことを考える。
PDNS について
Raspberry Pi で広告ブロック
概要
- Raspberry Pi に RpiDNS を入れて広告ブロック DNS(リカーシブ)で使用
- インターネットにつながる Raspberry Pi があれば20分程度で作業完了
- 家の DNS 兼ファイアウォール
- RpiDNS は ioc2rpz を Raspberry Pi で動作させるプロジェクト
- ioc2rpz の紹介 10 Top Tools for Threat Hunters from Black Hat USA 2019
流れ
- Raspberry Pi の準備
- ioc2rpz のサイトにアカウントを作成
- ioc2rpz のサイトで設定ファイルを作成
- Raspberry Pi で上記設定ファイルの入手とインストールを行うスクリプトを実行
チュートリアルビデオ(公式)
Raspberry Pi の準備
- インターネットに接続した Raspberry Pi
- 今のところ Raspbian のみ対応
ioc2rpz でのアカウント作成とログイン(5分)
- ioc2rpz でアカウントを作成
- 登録確認のメールが来るので承諾、サインイン
RpiDNS の設定(5分)
- ioc2rpz にサインイン、RpiDNS β を選択
- + ボタンをクリック、設定画面に移動
- RpiDNS の名前(任意)を入力
- 使用する Raspberry Pi のハードウェアを選択
- RpiDNS が使用する DNS ソフトウェアを選択(現時点では BIND のみ)
- 有効にする RPZ を選択(指定したハードウェアのメモリを超過しそうな場合は警告されるので、上限に収まるように取捨選択)
- それぞれの RPZ ごとにアクションを設定
- Add ボタンで完了
RpiDNSのインストール(10分)
- 完成した RpiDNS の設定画面からリンクアイコンをクリックし、cURL のリンクをコピー
- Raspberry Pi に SSH でログインし、コピーしたコマンドを貼り付け
$ curl 'https://ioc2rpz.net/get_rpidns_config.php?req=download&uuid=<略>' -o ioc2rpz_community_install.sh
- 作成されたファイルを実行
$ sudo bash ioc2rpz_community_install.sh
- 正常に終了すれば、最後に管理画面の URL とパスワードが出力されるので、メモ
#########
RpiDNS was installed
#########
Management console: https://<つけた名前>.rpidns.ioc2rpz.local/rpi_admin/
Username: rpiadmin
Password: <略>
DNS サーバの切り替えと動作確認(5分)
- 端末の DNS サーバの設定を RpiDNS の IP アドレスに切り替え(あるいは DHCP サーバのオプションで DNS サーバを変更)
- ブラウザから上記の Management Console に記載の URL に接続(ユーザ名とパスワードもコピペ)
- いくつかのサイトにアクセス、Dashboard でブロックされたホストのログを確認
その他
- 見れなくなったサイトやアプリ
- ヤフー(日本)のブラウジング
- iphone アプリではヤフー(日本)関連、その他、乗換案内や駅すぱあとなど
- ブロックしているのは notracking.ioc2rpz "No more ads, tracking and other virtual garbage"
- 回避のためホワイトリストに入れることはできるが、どのドメインを許可すればいいのかログから判断するのが面倒
- 管理コンソールや警告画面の証明書エラーを回避
- RpiDNS のルート証明書を取得( Admin > Downloads からルート証明書をダウンロード)
- 各端末にインストール
- 管理画面のログの時刻を日本時刻に変更
OSのタイムゾーンが日本の場合
$ timedatectl | grep zone
Time zone: Asia/Tokyo (JST, +0900)
$ cd /opt/rpidns/www/rpi_admin/
$ sudo cp rpidata.php rpidata.php.bak
$ sudo sh -c 'sed -e "s/%Y-%m-%dT%H:%M:%SZ/%Y-%m-%dT%H:%M:%S/g" -e "s/'utc'/'localtime'/g" rpidata.php > rpidata.php.new'
$ sudo ln -sf rpidata.php.new rpidata.php
$ sudo systemctl restart php7.3-fpm.service
- 管理画面の表示を MAC アドレスからわかり易い名前に変更
Admin > Assets で MAC アドレスごとに NAME を設定
リソース
https://github.com/Homas/ioc2rpz/
https://ioc2rpz.net/
https://www.raspberrypi.org/
Secure DNS with DoH client authentication 【無料枠パブリッククラウドに TLS/SSL 認証する自分専用の DoH サーバを建てる】
-
費用かけられないので DoH サーバは GCP の無料枠の Micro を使う
-
移動したり複数の端末から使うので、IP アドレスでの接続制限はできない、が、オープンリゾルバにはしたくない
-
この時点でのクライアント側の DoH + TLS クライアント認証対応状況の例 --> Mozilla 不可、curl 不可、dnscrypt-proxy(v2.0.40 ~) 可能
-
クライアントは dnscrypt-proxy 一択
-
サーバは Nginx で TLS 認証、doh-proxy から Unbound あたりが手っ取り早いか(多段だけど)
-
Windows 10 に dnscrypt-proxy を入れたが、そんなにもっさりした感じはしない(ブラウザが DNS Prefetching やってくれているおかげか?)
- GCP 無料枠がアメリカなのでネットワーク遅延はある。。。
This post is a quick example of secure DNS lookup in public clouds.
The latest release of dnscrypt-proxy (v2.0.40) has added TLS client authentication for DoH. DoH client like firefox or curl don't look to support this yet, so using dnscrypt-proxy would be one of the easiest way to make our personal DoH servers more private at the moment.
https://github.com/dnscrypt/dnscrypt-proxy/releases/tag/2.0.40
0. topology
[your PC] -- DoH + Auth --> [your personal DoH server in a public cloud] -- DNS --> (DNS tree)
1. DoH server
- nginx (TLS termintation + authentication) https://github.com/nginx/nginx
- doh-proxy (DoH + forwarder to localhost) https://github.com/jedisct1/rust-doh
- unbound (full service resolver especially for localhost + qname minimization) https://github.com/NLnetLabs/unbound
# Any other softwares can be used, of course. ;-)
2. DoH client
- dnscrypt-proxy (v2.0.40, TLS client authentication enabled) https://github.com/DNSCrypt/dnscrypt-proxy
3. DoH client configuration
- calculate your personal DoH server's DNS stamp https://dnscrypt.info/stamps/
- copy your TLS public and private key into dnscrypt-proxy directory
- adjust dnscrypt-proxy configuration something like below:
##################################
# Global settings #
##################################
server_names = ['myserver']
################################
# TLS Client Authentication #
################################
[tls_client_auth]
creds = [
{ server_name='myserver', client_cert='user1.pem', client_key='user1.key' },
]
################################
# Anonymized DNS #
################################
[static]
[static. 'myserver']
stamp = 'sdns://MY_SERVERS_STAMP'
4. Logs
- DoH client (dnscrypt-proxy) log
[NOTICE] dnscrypt-proxy 2.0.40
[NOTICE] Network connectivity detected
[NOTICE] Source [relays] loaded
[NOTICE] Source [public-resolvers] loaded
[NOTICE] Firefox workaround initialized
[NOTICE] Now listening to 127.0.0.1:53 [UDP]
[NOTICE] Now listening to 127.0.0.1:53 [TCP]
[NOTICE] [myserver] Cert: user1.pem, Key: user1.key
[NOTICE] [myserver] OK (DoH) - rtt: 219ms
[NOTICE] Server with the lowest initial latency: myserver (rtt: 219ms)
[NOTICE] dnscrypt-proxy is ready - live servers: 1
5. Next steps
- move the server from Oregon to Tokyo, but it isn't free..
- remove nginx from the server and offload tls_auth to CDN local pops, but it may not be free..