-
BINDでrpzとzoneブロックを試した設定ファイルめも
BINDで水責め用にrpzとzoneブロックを試した設定ファイルのめも
RPZに関しては
http://www.zytrax.com/books/dns/ch7/rpz.html
ここ参考
性能云々に関しては
http://www.slideshare.net/hdais/dns-32071366
ここ参考
DNSSECはとりあえず有効
ACLはiptables上で弾く方向、なのでBINDのACLは全てany(よい子はまねしちゃいけません)
設定ファイルはできるだけデフォルトの状態を維持
■OSとか
VmwarePlayer上で構築
CPU:Core i7 4702MQ
Mem:4G
OS:CentOS7
BIND:9.10.1-P1
(最新落とそうとしたらiscつながらね。)
パッケージ:RPM化してCentOS7のルールに準拠関連パッケージ達
------------------------------------------------------
bind-9.10.1-0.2.P1.el7.x86_64
bind-chroot-9.10.1-0.2.P1.el7.x86_64
bind-libs-lite-9.9.4-18.el7_1.1.x86_64
bind-license-9.9.4-18.el7_1.1.noarch
bind-utils-9.10.1-0.2.P1.el7.x86_64
bind-libs-9.10.1-0.2.P1.el7.x86_64
------------------------------------------------------SELinux:Disable
DNSSEC:ON■必要ファイルとディレクトリの作成
------------------------------------------------------
mkdir /var/named/ddos
chmod 750 /var/named/ddos
chown named:named /var/named/ddos
touch /etc/named/rpz.conf
touch /etc/named/zone.conf
touch /etc/named/slave.conf
touch /etc/named/ddos.conf
chown root:named /etc/named/rpz.conf
chown root:named /etc/named/zone.conf
chown root:named /etc/named/slave.conf
chown root:named /etc/named/ddos.conf
chmod 640 /etc/named/rpz.conf
chmod 640 /etc/named/zone.conf
chmod 640 /etc/named/slave.conf
chmod 640 /etc/named/ddos.conf
------------------------------------------------------■/etc/sysctl.conf
------------------------------------------------------
net.core.rmem_default = 8192000
net.core.rmem_max = 16384000
net.core.wmem_default = 8192000
net.core.wmem_max = 16384000
------------------------------------------------------
値はてけとー
■/etc/modprobe.d/conntrack.conf
------------------------------------------------------
options nf_conntrack hashsize=65536
------------------------------------------------------
デフォルト値:65536なのですぐ壁にぶち当たる。
65536*8=524288に変更
iptables 再起動時にconntrack_maxにぶち当たらないように。水責めでは
「IP+Port」の組み合わせが同一でない問い合わせ+外部DNSが死ぬことによってリトライが増える=conntrackを利用するフィルターが存在していた場合は値をどんどん消費する。
「IP+Port」が同一なベンチマークでは見えてこない。
■/etc/sysconfig/named
------------------------------------------------------
ROOTDIR=/var/named/chroot
OPTIONS="-4 -S 8192";
------------------------------------------------------
標準値:4096
とりあえず:8192
大規模なら16384ぐらい増やすのもあり。
IPv6生きてるとログうっとーしーのでIPv4のみで。
大手の共有権威DNSが死ぬとここ結構消費。
(VALUE DOMAINで発生したDNSサーバー障害についてまとめてみた)■/etc/named.conf
------------------------------------------------------
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
pid-file "/var/run/named/named.pid";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursive-clients 32768;
allow-query {
any;
};
allow-transfer {
localhost;
};recursion yes;
allow-recursion {
any;
};dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";managed-keys-directory "/var/named/dynamic";
session-keyfile "/var/run/named/session.key";
response-policy {zone "rpz.invalid";} qname-wait-recurse no;
};logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};zone "." IN {
type hint;
file "named.ca";
};include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/named/rpz.conf";
include "/etc/named/zone.conf";
include "/etc/named/slave.conf";
include "/etc/named/ddos.conf";
------------------------------------------------------
recursive-client
標準値:1000(すぐ壁にぶち当たる。)
標準値のままだと
recursive-socket(4096)>recursive-client(1000)
なので水責めでは攻撃即断になるっぽ
recursive-client>recursive-socket
になるようにすべし水責めの場合recursive-socketの値(ここでは8192)が完全にふさがれることを考慮して
「recursive-sokcetの値」+「通常クエリーを投げている予想クライアント数」を考慮していればキャッシュに入ってる問い合わせにはとりあえず返す事ができる。
外部への問い合わせが必要な場合は知らぬ。
recursive-scoketの食いつぶし対策は
QTNetのこれの14ページのiptablesのhashlimitを使用する方法
http://www.slideshare.net/apnic/dnswatertortureonqtnet-1425130417-1425507043
とか
ISCの
fetch-per-zone
fetch-per-server
https://kb.isc.org/article/AA-01215/0/BIND-9.9.6-S1-Subscription-Edition-Release-Notes.html
とか
■/etc/named/zone.conf
------------------------------------------------------
zone "example.com" {type master;file "example.com.zone";};
------------------------------------------------------■/var/named/example.com.zone
------------------------------------------------------
$TTL 1D
$ORIGIN example.com.
@ IN SOA example.com. hostmaster.example.com. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1
NS ns2
ns1 A 192.168.0.1
ns2 A 192.168.0.2
www A 192.168.0.3
mail A 192.168.0.4
ftp CNAME www
@ MX 10 mail
@ TXT "Txt Record"
------------------------------------------------------
パーミッションmissらないように■/etc/named/slave.conf
------------------------------------------------------
zone "example.jp"{type slave;file "slaves/example.jp.zone";masters{192.168.0.2;};};
------------------------------------------------------
■/etc/named/rpz.conf
------------------------------------------------------
zone "rpz.invalid"{type master;file "rpz.zone";};
------------------------------------------------------
■/var/named/rpz.zone
------------------------------------------------------
$TTL 2h;
$ORIGIN rpz.invalid.
@ SOA ns.rpz.invalid. hostmaster.rpz.invalid ( 1 12h 15m 3w 2h)
NS ns.rpz.invalid.
ns.rpz.invalid. A 127.0.0.1*.cname.example.org A 127.0.0.1
nxdomain.example.org NS ns.rpz.invalid.;nxdomain.example.org CNAME .
*.nxdomain.example.org CNAME .;nodata.example.org CNAME *.
*.nodata.example.org CNAME *.mail.example.org CNAME rpz-passthru.
;drop.example.org CNAME rpz-drop.
*.drop.example.org CNAME rpz-drop.;tcp.example.org CNAME rpz-tcp-only.
*.tcp.example.org CNAME rpz-tcp-only.*.ns.example.net A 127.0.0.1
*.www.example.net A 127.0.0.1
------------------------------------------------------
これは別にrpz用マスターサーバ立てたほうがよさげ。できればDBで管理。
こんなもんファイルで管理してたらしぬる。
オーバーブロッキングはないので放置可能
いつ消していいかはわからぬ。
パーミッションmissらないように
■/etc/named/ddos.conf
------------------------------------------------------
#zone "ddosdomainname" {type master; file "ddos/ddostemplate.zone";};
zone "ddos.org" {type master; file "ddos/ddos.org.zone";};
------------------------------------------------------
■/var/named/ddos/ddos.org.zone
------------------------------------------------------
$TTL 1800
@ IN SOA domain.ddos. hostmaster.domain.ddos. (
1 ; serial
1D ; refresh
1H ; retry
1w ; expire
3H ) ; minimum
NS ns
TXT "Type:BlockDomain,Reason:water torture,Date:From:2015/04/12 To:2015/04/13"
ns A 127.0.0.1
* A 127.0.0.1
------------------------------------------------------
オーバーブロッキング仕様でつ。
有効期限決めないと放置かましてどっかのISPのようになる。
conf汚すと面倒なので試しにゾーンファイルにtxtレコードいれて、そこに理由やらゾーンの有効期限なぞ記述してみる。
この用途ではないとは思うがゾーン数増えすぎると起動時間長すぎてしぬる。
パーミッションmissらないようにメリットは何も考えずにかけられる。
デメリットは問い合わせを受け付けるのでqpsの限界以上は攻撃受けられない。■iptablesでのブロック
メリットはINを止めるのでキャッシュを汚されない。
iptablesでu32/string/bpf等を使用してクエリーのINをブロック
・u32
http://dnsamplificationattacks.blogspot.jp/p/iptables-block-list.html
・string
https://www.perturb.org/display/1186_Linux_Block_DNS_queries_for_specific_zone_with_IPTables.html
・bpf
http://www.slideshare.net/twovs/how-to-defend-dns-authoritative-server-against-dns-watertorture?related=1
http://www.slideshare.net/twovs/iptables-bpf-module
qpsの限界のクエリーが飛んできても耐えられる。
random.ddos.orgの様な攻撃だけブロックも可能。
攻撃クエリーのみブロックが可能なので放置可
攻撃が来ているかどうかをiptablesの統計で確認可能
デメリットはブロックに穴がある。
(穴をつぶそうとすると非現実的な記述量になる。)
単純最大qpsは下がる。
■攻撃されているクエリー状況の確認
rndc recursingの出力有効化
デフォルトでは/var/named/named.recursingに出力されるため
ファイルを作成し権限を適正なものにする。
(named.confのoptions内でrecursing-file指定するのも可)
・ファイル作成
touch /var/named/named.recursing
chown named:named /var/named/named.recursing
ファイルは自動では作られないので自分で作る事。ファイルがないとエラーでまする。
あとnamedユーザーに書き込み権限が必要
・実行
/usr/sbin/rndc recursing
・結果表示
cat /var/named/named.recursing
named.recursingの内容
----------------------------------------------------------------------;
左から
; Recursing Queries
;
; client 123.123.123.1#12345: 'example.co.jp' requesttime 1438653752
; client 123.123.123.2#23456: 'example.ne.jp' requesttime 1438653752
; Dump complete
client {問い合わせ元クライアントIPアドレス}#{問い合わせ元クライアントポート番号}: '問い合わせクエリ' requesttime {問い合わせ時刻}
となっているので問い合わせ元クライアントIPアドレスと問い合わせクエリを集計すれば水責めで行われているランダムクエリーや権威DNSが死亡した際の状況確認を行う事が出来る。
これの実行自体はそれほどコストにはならない模様。
-
PMXEプラグイン説明ブロマガ記事のコメント欄について
そもそも説明書きに機能説明しか書いてないので
「これどーゆー時に必要なのか?」
という部分から検索できないものかと言われたりするのだけど
よほど理由がない限り自分で書く気一ミリもないのでPMXEプラグインの説明が書かれた記事のコメント欄解放しますw
ブロマガのコメント欄は他のところを見ていてもどうもコメント記述するのに見えないハードル(ブロマガ主とコミュニケーションを取らないといけないという見えない圧力)があるように見えるのでPMXEプラグイン説明のコメント欄は以下の様に使用してもらってかまいません。(使用例が記述されてるとそちらから検索できるので便利かもYO!w)
使用方法:
OKなもの
・こーゆー時に使ったとかのメモ書き/独り言
(あってる・間違ってる・中途半端・馬鹿みたいにコメント欄が延びる等気にしません)
・使用方法について記述した自分のブロマガ等の外部サイトへの誘導
・だめぽ事象例
・機能更新きぼー
・ソースコードクレクレ
NGなもの(気が向いたらしれっと消したりするもの)
・明らかにMMDやPMXEに無関係と判断したもの
・他者等への誹謗中傷等にあたるもの
希望としては「誰が記述したかをわかるよう」にしてもらうのが望ましいです。
(捨てアカでもかまわないけど)
放置基本なので反応なければOKとみなしてもらってかまいません。
※なお、この記事は各PMXEプラグインの記事最後にリンクするようにしていきます。
以上です。 -
闇鍋プラグイン 変化量の小さなモーフオフセット削除機能追加
闇鍋プラグイン(https://bowlroll.net/file/9765)に
・変化量の小さなモーフオフセット削除機能
を追加しました。
使用目的は頂点モーフ/ボーンモーフで変化量の極小さなオフセットが大量にあるとモデルのサイズが大きくなったりするのでダイエットのために作成しました。
2015/08/13更新 要素数が10以下のモーフは対象外に。処理方法によりグループモーフに影響が出る場合があった為、修正。
■RemoveMorphOffsets
・選択した頂点モーフ/ボーンモーフで変化量の小さなオフセットを削除します。
■使い方
・プラグイン実行
「User」→「MORPH」→「[MORPH] 変化量の小さなモーフオフセットを削除する。」
を選択して実行してください。
実行すると以下の様なウィンドウが表示されます。
変化量に任意の数字を入力し左のリストからモーフを選択し
「選択したモーフの変化量の小さなオフセットを削除」をクリックしてください。
実行しましたら以下の様に該当したオフセットが削除されます。
・実行前↓
・実行後
以上です。
この記事のコメント欄は以下の記事通り解放します。
http://ch.nicovideo.jp/t0r0/blomaga/ar760385
広告
15 / 48