犬ターネット

Archive : 2017年12月

サーバへのDoS対策(mod_dosdetector、iptables)

サーバのアクセス数を munin で監視しているんだけど、apache のアクセス数グラフをみたら過剰アクセスを発見した。グラフは先週の様子。土曜から日曜にかけてがいちばん酷い。これはDoS攻撃だよな。

ということで対策を行った。まずは mod_dosdetector をつかってみた。

mod_dosdetector

mod_dosdetector は apache 用の Dos 対策モジュール。インストールは簡単。

$ cd /usr/local/src
$ wget https://github.com/stanaka/mod_dosdetector/archive/master.zip -O mod_dosdetector.zip
$ unzip mod_dosdetector.zip
$ cd mod_dosdetector-master
$ make
$ make install

httpd.conf に以下が追記されていることを確認。

LoadModule dosdetector_module /usr/lib64/httpd/modules/mod_dosdetector.so

httpd を restart して dosdetector_module がロードされていればOK。

$ service httpd restart
$ httpd -D DUMP_MODULES | grep dos
dosdetector_module (shared)
Syntax OK

httpd.conf に dosdetector 設定を書いてもいいけれど、メンテナンス性を考えて別ファイル( /etc/httpd/conf.d/dosdetector.conf )にした。設定内容は以下の通り。

# dosdetecotr を有効に
DoSDetection on

# 10秒間で
# 12回同一IPからアクセスがあったら環境変数「DoSThreshold」をセット
# 15回同一IPからアクセスがあったら環境変数「DosHardThreshold」をセット
DoSPeriod 10
DoSThreshold 12
DoSHardThreshold 15

# セットした環境変数がクリアされるまでの秒数を指定(3600秒 = 60分)
DoSBanPeriod 3600

# 保持するIPの履歴を指定。
# 最初は100にしたんだけどすぐいっぱいになってしまうようで3000まで増やした
DoSTableSize 3000

# 判定から除外するMIMEタイプを指定
DoSIgnoreContentType ^(image/|application/|text/javascript|text/css)

dosdetector はアクセス自体は遮断せずに環境変数を設定する。なので、mod_rewrite を使って .htaccess に以下のような設定を書く。

# 環境変数に SuspectHardDoS が設定されていたら 404 not found を返す
RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .*  - [R=404,L]
ErrorDocument 404 "404 not found"
AddType image/vnd.microsoft.icon .ico

実際のログ。IPやパスは書き換えているけれど、あるタイミングで 404 を返すようになった。ザマーみろ。

219.xxx.xxx.xxx - - [24/Dec/2017:03:24:19 +0900] "POST /path/to/example.php?p=123 HTTP/1.1" 200 6230
219.xxx.xxx.xxx - - [24/Dec/2017:03:24:19 +0900] "POST /path/to/example.php?p=123 HTTP/1.1" 200 6230
219.xxx.xxx.xxx - - [24/Dec/2017:03:24:19 +0900] "POST /path/to/example.php?p=123 HTTP/1.1" 200 6230
219.xxx.xxx.xxx - - [24/Dec/2017:03:24:19 +0900] "POST /path/to/example.php?p=123 HTTP/1.1" 404 13 ← このタイミングから 404 を返している
219.xxx.xxx.xxx - - [24/Dec/2017:03:24:19 +0900] "POST /path/to/example.php?p=123 HTTP/1.1" 404 13
219.xxx.xxx.xxx - - [24/Dec/2017:03:24:19 +0900] "POST /path/to/example.php?p=123 HTTP/1.1" 404 13
219.xxx.xxx.xxx - - [24/Dec/2017:03:24:19 +0900] "POST /path/to/example.php?p=123 HTTP/1.1" 404 13

ただ、これだとアクセス自体は httpd に到達している。どうせなら httpd に届く前段階で遮断したい。ということで次は iptables をいじって対応。

system-config-firewall-tui

iptables を更新するには呪文みたいなコマンドを書かなきゃいけなくて俺はこれが苦手。だからいつも system-config-firewall-tui という簡易GUIを使っている。今回はこれにカスタムルールを追加して対応する。

以下の内容でカスタムルールファイル( /root/work/iptables/drop.conf )を作成した。

# IPアドレス 219.xxx.xxx.xxx と 122.xxx.xxx.xxx からのアクセスは DROP
-I INPUT -s 219.xxx.xxx.xxx -j DROP
-I INPUT -s 122.xxx.xxx.xxx -j DROP
system-config-firewall-tui コマンドを実行、カスタムルールに上記ファイルを設定する。
$ system-config-firewall-tui
↓
カスタマイズを選択
↓
転送、転送、転送...
↓
カスタムルールを「追加」
↓
プロトコルタイプ        :ipv4
ファイアウォールテーブル:filter
ファイル                :/root/work/iptables/drop.conf
↓
OK、閉じる

エラーが出ずに iptables が更新されていればOK。これで特定IPアドレスからのアクセスは遮断できる。

しかし、これでは攻撃元IPアドレスが変わるたびに更新が必要。めんどくさい…、と思ったら iptables でも DoS対策ができるらしい。

hashlimit を使ったDos対策(続く…)

(あとで書く)


台北旅行

12月25日から27日の3日間で台北に行ってきた。写真中心メモ。

地下鉄のコイン型切符。プラスチックでできていて中にICチップが埋め込まれている(多分)。改札にタッチすると通れる。出るときは改札の投入口に入れる。台北は地下鉄が整備されていて移動が楽。あと構内全面飲食禁止のためとてもきれい。

名物タピオカミルクティー。ほうじ茶っぽくてスッキリゴクゴク飲める。春水堂は日本にもあるらしい。ちなみに50嵐という店のほうが安くてきめ細かい注文ができて美味い。

ポスト。かわいい。

ホテルの裏にあった夜市。初日の夕飯はここで済ませた。イノシシ肉・小龍包・謎のスープを食べた。美味しかった。衛生面は微妙。

台北101というでかいビル。

でかいビルの上からの眺め。

どこにいっても原チャリだらけ。空気が相当汚い気がする。

自分たちの衣食住はテキトーだけど、お寺や神社にはかなりお金をかけるらしい。

千と千尋の神隠しのモデルとなった九份。雰囲気はよいけれど、人多すぎ、カオナシグッズ多すぎ、日本語の看板多すぎ…。

台北の人がわざわざ訪れるという夜市。ここで食べた胡椒餅っつうのが本当にうまかった!カリカリの生地の中にコショウで味付けしたあつあつ豚肉ネギ餡が入っている。口と手を火傷した。次の日も別のお店で買って食べた。日本でも売ってくれないかな…。

台北のコンビニに入ると必ず売っている煮玉子。何の香辛料のにおいだろう?台湾の料理って必ずこのにおいがする。ダメな人はダメだろうな。俺は全然平気だった。味は普通に美味しいです。

3日間いたけれど、片言の日本語でコミュニケーション可能だったから不自由しなかった。ただ、現地の郵便局から日本に荷物を送るときは日本語が通じなくて、局員も俺もお互い片言の英語でやりとりすることになり、ちょっと大変だった。無事に届くだろうか…。(※届きました)


MySQL のログに CA 関連と NO_ZERO_DATE 関連の Warning が出ていたので対応した

/var/log/mysqld.log を見ていたら以下の Warning が結構出ていたので対応した。

[Warning] CA certificate ca.pem is self signed.
[Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.

まずは CA 関連を対応するため証明書を作成(自分の環境では既に作成されていた)。

$ cd /var/lib/mysql
$ mysql_ssl_rsa_setup
$ chown mysql:mysql *.pem

/etc/my.cnf に証明書設定を追加。

# ssl設定
ssl-ca=/var/lib/mysql/ca-key.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem

MySQL再起動。

$ service mysqld restart

有効になっているか確認。ssl関連が YES になっているからOK。ログにもWarningは出ていないことを確認した。

$ mysql -u root -p
> show variables like '%ssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl  | YES   |
| have_ssl      | YES   |
+---------------+-------+

'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' も対応。/etc/my.cnf の sql_mode に以下を追加。

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZEROM

MySQL再起動。ログにWarningが出ていないことを確認した。

$ service mysqld restart

NO_ZERO_DATE, NO_ZERO_IN_DATE、ERROR_FOR_DIVISION_BY_ZERO については↓詳しい説明があるので読んでおく。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.7 サーバー SQL モード


歪み系エフェクターを複数つなぐ場合の順序

歪み系エフェクターの繋ぎ順にはセオリーがあって「ギター → 歪みが弱い → 歪みが強い → アンプ」の順が良い、とインターネットに書いてあった。

俺は歪み系エフェクターを3つ使っているんだけど、見事に繋ぐ順番が逆だった。ギターを触って25年。俺の人生とは。がっかりだね。とりあえずセオリー通りに繋ぎ変えてみた。右上段→右下段の流れでギターからアンプへ。

  • チューナー:Korg Pitchblack ゴールド
  • ブースター:RC Booster Ver.2 (歪み度★)
  • オーバードライブ:ELECTRO-HARMONIX Soul Food (歪み度★★★)
  • ファズ: ELECTRO-HARMONIX Nano Big Muff PI (歪み度★★★★)
  • ディレイ:MXR M169 Carbon Copy Analog Delay

今思い出したけれど、この繋ぎ順がしっくりこなくて全部逆にしたような…。セオリーっていったい…。とりあえず今度のスタジオで試してみよう…。


年賀状

郵便局ではスタッフ不足によりゆうパックの配送遅延が発生しているらしい。これから年賀状の仕分けも始まるのにのに大変だ。今年の年賀状は送ってくれた人にだけ返すことにしようかな…。両親には帰省した時に手渡しすればいいし。

でも年賀状好きなんだよな。手書きの良さってあるよね。ただ印刷されたものを送るだけだったら別にいらない。一筆添えてこその良さ。きったない字で近況なんか書かれていたら最高だ。ああ、やっぱり年賀状書こうかな…(郵便局の人ごめん)


2017年 散歩中に出会った野良猫の写真

今年は約350枚の猫を撮った。その中で印象に残った12枚。

クリックで表示する(重い)

来年もたくさんの猫に出会えますように。


忘年会、帰省

土日の日記。

土曜

大学時代の部活のみんなで集まって忘年会。20年ぶりに会う先輩もいたんだけど、なんだかんだであの当時のまま変わってないと思った。めちゃくちゃ楽しかった。

そして案の定飲みすぎ・フラフラに。立って帰るのはつらすぎたからグリーン車に乗った。お金で解決できるところはお金で解決するスタンス。帰宅して財布をみたら1000円しかなかった。

日曜

実家に帰省。両親の車のタイヤ交換をしてきた。父は昔体操の選手で力自慢だったんだけどさすがに歳をとったため力仕事が億劫になってきたみたいだ。ちょっと悲しい気分に浸りながらタイヤ交換をしつつ、もっと俺に頼ってもいいぜ、と思った。

タイヤ交換のお礼に寿司をごちそうになった。ネタが大きく一口では食べられないくらいの最高の寿司。フグの唐揚げなども頂いた。とても美味しかった。写真はない。思い出は胃袋の中に。

夕方になり帰宅準備をしていると、父がスッと寄ってきて俺の上着ポケットに万札をねじ込んできた。いいよ、要らないって、と断ったんだけど「受け取るのも礼儀だ、次きたらこの金で寿司おごれ」とかなんとか言ってきたので苦笑いしながら頂戴した。親にとっては、何歳になっても子は子なんだなと思った。正月はなんかうまいもの買って帰ろう(マネーロンダリング)


ES6 の class を使いたかったから IE を捨てた

数年前に作った twitter ID の画像一覧を表示 するやつに久々に手を入れて、フロント側の javascript を ES6 対応した。ES6 については以下にまとまっている。

ES2015 (ES6)についてのまとめ - Qiita

ES6 は foreach 構文や class が使えてとても便利。モダンブラウザなら大体対応しているし使わない手はない。ただし、Internet Explorer は class を使うと構文エラーが発生してしまう。try catch 的なので捕捉できたら…と思ったらできなかったから、

  • メインコンテンツエリアを非表示、注意書きエリア(「お使いのブラウザは対応していません」の記述)を表示
  • class を使っている javascript を読み込んで、無事読み込めたらメインコンテンツを表示、注意書きエリアを非表示

で逃げた。IE11 の利用率ってまだまだ高そうだけど(会社PCは IE11 だし…)、こういう草の根活動がいずれ実を結ぶものと思われる。皆さんもIEを捨てましょう。


昼間の猫と夜中の猫

昼休みに会社周辺を散歩していると猫に出会う。昼に出会う猫は近づくとすぐ逃げる。地域猫(※地域住民の間で管理されている猫)は2,3メートルまでなら近づけるけれど触れるまではいかない。

夜中にランニングをしていても猫に出会う。彼らは道路をゆっくりと横切り、渡り終わるとその場に止まってこちらを眺めている。俺がスタスタと近くを走りすぎても逃げずにそのままじっとしていることが多い。

昼間の猫はとんがっていて、夜中の猫はおおらかな気がする。


週末の日記

週末の日記。

土曜

夕方から学童の保護者会。年始行事の責任者になっているため、大量の資料を作成・印刷して持っていく。Google Docs なんかを使ってペーパーレスで資料共有したいと考えつつも、未だにガラケー世代が多いのが現状だからあきらめている。紙はアーカイブとしては完璧じゃん。千年前の書物とか残ってるし。電池も減らないし。

保護者会で集金を行ったため一時的に大金持ちになる。手元にあるといろいろ怖いので全部銀行に預けた。

日曜

バンドでスタジオ。新しめの4曲をずっと練習。この前の adm で初演奏した曲はいじれる部分がまだまだある。来年最初のライブに向けて詰めたい。

ルビーベルグを探しにやまやへ。4本だけ売っていたので買い占めた。ストロングゼロのダブルレモン味も購入。

ストロングゼロの味を選ぶポイントは、マズいアルコール臭が抑えられているかどうか。ダブルレモン味はレモン風味が強くて割とオススメ(それでもアルコール臭はする)。そもそもストロングゼロに美味さを求めちゃいけない。1本100円でジュースより安いんだから。グイッとやってバタッと倒れる飲み方でいいじゃん。

自宅の冷蔵庫にストロングゼロが常備されつつある。


munin 2 のグラフが文字化けする

CentOS 7 上で動いている munin のグラフを日本語化したくて、/usr/share/munin/plugins/* スクリプトに手を加えているんだけど、以下のように文字化けしてしまう(※タイトルは「CPU使用率」になってほしい)

ちょっと調べてみると、どうやらOSに日本語フォントが入っていないせいっぽい。yum で日本語フォントを調べてみる。

# yum search japanese | grep TrueType
sazanami-fonts-common.noarch : Common files for Sazanami Japanese TrueType fonts
sazanami-gothic-fonts.noarch : Sazanami Gothic Japanese TrueType font
sazanami-mincho-fonts.noarch : Sazanami Mincho Japanese TrueType font
vlgothic-fonts.noarch : Japanese TrueType font
vlgothic-p-fonts.noarch : Proportional Japanese TrueType font

最後の vlgothic-fonts と vlgothic-p-fonts かなあ…。とりあえずインストール。

# yum install vlgothic-fonts vlgothic-p-fonts

そしたらちゃんと表示された。よし。


munin 2 で Dynazoom が表示されないのを対処した

munin 2 をインストールしてから Dynazoom (グラフを大きく表示してくれる機能) が動いていなくて放置していたのを直した。以下手順。

------

ていうか munin 以外に munin-cgi も必要なので munin-cgi インストール。

yum install munin-cgi

/etc/munin/munin.conf に以下記述があることを確認。

cgiurl_graph /munin-cgi/munin-cgi-graph

/etc/httpd/conf.d/munin.conf に以下記述があることを確認。

ScriptAlias /munin-cgi/munin-cgi-graph /var/www/cgi-bin/munin-cgi-graph

/etc/httpd/conf.d/munin-cgi.conf は使わないので削除 or リネーム。

mv /etc/httpd/conf.d/munin-cgi.conf /etc/httpd/conf.d/_munin-cgi.conf_

/var/lib/munin/cgi-tmp ディレクトリがなければ作成して httpd を動かしている所有者(例:apache)に変更。

mkdir -p /var/lib/munin/cgi-tmp
chown -R apache:apache /var/lib/munin/cgi-tmp

これでOKと思いきやまだ Dynazoom が表示されない。httpd の error_log をみたら以下の記述あり。

Can't open /var/log/munin/munin-cgi-graph.log (Permission denied) at /usr/share/perl5/vendor_perl/Log/Log4perl/Appender/File.pm line 103.

Permission denied になっているけれど、/var/log/munin/munin-cgi-graph.log そのものが存在しない。ということで作成してhttpd を動かしている所有者に変更。

touch /var/log/munin/munin-cgi-graph.log
chown apache:apache /var/log/munin/munin-cgi-graph.log

これでようやく表示された。


良純

この前の結婚式二次会 でモッチさんに「(石原)良純ですか」と言われてビクっとした。

学生の頃に良純に似ていると言われたことがあって、えー嫌だなと思っていたんだけど、やっぱり似ているのだろうか…。20年ぶりくらいに充てたパーマの影響だろうか…。

なんだか似ている気がしてきた。うぅ…(良純そのものは好きでも嫌いでもない)


AOL Reader 死亡

Google リーダーが2013年に閉鎖、livedwango reader (旧 livedoor reader) が2017年に閉鎖、RSSリーダ難民になった俺が流れ着いた AOL Reader も来年2018年に閉鎖…。

AOL Reader は軽量で広告がなく取りこぼしも少ないから使いやすかったんだけど、先日Firefoxをアップデートしてからは画面真っ白になってしまい(※プライベートブラウジングモードでなら使えた)、全然改善されないなあと思っていた矢先の閉鎖宣言。RSS事業撤退の流れはやっぱり止められなかった。残念。

仕方がないので今日から inoreader を使い始めた。見た目やショートカットキーがだいたい同じだからすぐ慣れるかも。inoreaderがんばれ~


ストロングゼロ

やばい、悪酔いする、底辺の酒などと言われているストロングゼロを買って飲んだ。

うまいじゃん!安い酒にありがちな臭いアルコール臭を強烈なレモンで無理やりかき消しているおかげでグイグイ飲める。とはいえ、アルコール9%は強い。すぐ酔える。なんていい酒だ…。


LINE URLスキームを使って web ブラウザから LINE にメッセージを送る

LINE URLスキーム を使うことで web ブラウザから LINE にメッセージを送ることができる。

試しに以下のようなものを作ってみた。端末に LINE がインストールされていれば、LINEが起動して送信先を指定して送れるはず。

ソースは以下。

ここでは line://msg/text/?{送信メッセージ} という URI スキームを使っているけれど、他にもたくさん準備されているからいろいろ遊べそう。