Upgrade to Pro — share decks privately, control downloads, hide ads and more …

軽量TwitterフロントエンドのNitterのアクセス制限

 軽量TwitterフロントエンドのNitterのアクセス制限

E567a535ddc7964130dd086f147a7682?s=128

Kenichiro MATOHARA

June 20, 2021
Tweet

Transcript

  1. 軽量Twitterフロン 軽量Twitterフロン トエンドのNitter トエンドのNitter のアクセス制限 のアクセス制限 Kenichiro Matohara(matoken) <maroken@kagolug.org> 1

    / 37
  2. 南隅から参加(鹿児島の右下) 好きなLinuxディストリビューションはDebian お仕事募集 mailto:work@matohara.org Kenichiro Matohara(matoken) Kenichiro Matohara(matoken) https://matoken.org https://matoken.org

    2 / 37
  3. 以前のNitter 以前のNitter Twitterをちっちゃいリソースで - Speaker Deck 軽量TwitterフロントエンドのNitterの最近のこと - Speaker Deck

    3 / 37
  4. Nitter Nitter Nim製AGPL3.0のTwitterフロントエンド 軽量,JavaScript不要.Twitterによる追跡の回避,RSS対応など(RSS Agregatorの他にもIFTTTなどにも) GETは共通なのでドメイン転送しても便利 いまのところログインや投稿はできない 検索キーワードと期間を指定してあるイベントのまとめURLを作っ ても便利 たくさんのユーザを購読したい場合はパラメーター長の制限に引

    っかかるので公開リストを作っておくといい に公開Nitterインスタンスの一覧がある Instances · zedeus/nitter Wiki 4 / 37
  5. JavaScript非対応ブラウザで閲覧 JavaScript非対応ブラウザで閲覧 5 / 37

  6. rsstailでRSS購読 rsstailでRSS購読 $ rsstail -p -l -a -c -N -H

    -r -i 60 -u 'https://nitter.matoken.org/search/rss?f=twee 今日の #koedolug 発表ネタ 「軽量TwitterフロントエンドのNitterの最近のこと」 https://wiki.matoken.org/study_meeting/2021#%E5%B0%8F%E6%B1%9F%E6%88%B8%E3%82%89%E3%8 %E3%81%BE%E3%82%8A_%E7%AC%AC227%E5%9B%9E https://nitter.matoken.org/matoken1/status/1403685603309363207#m Sat, 12 Jun 2021 12:08:21 GMT #osc21do までにこの辺2,3本欲しい https://nitter.matoken.org/matoken1/status/1403698153082089475#m Sat, 12 Jun 2021 12:58:13 GMT 6 / 37
  7. blogにTwitter検索結果を埋め込み blogにTwitter検索結果を埋め込み 7 / 37

  8. Nitterをセルフホスト Nitterをセルフホスト Nitter.net で試せていたけどTwitterによるrate limit で使えないことが 多い 固定URLが欲しい(Nitterインスタンスを切り替えるとURLが変わる) VPSでセルフホスト(ドイツのContabo VPS300

    €3.99/月) 快適に :) 詳細はこちら → 「軽量TwitterフロントエンドのNitterをセルフホス ト」 8 / 37
  9. 最近サーバが重い? 最近サーバが重い? サーバが重くなっている VPSが制限を掛けられているぽい Nitterがいっぱい使われているぽい アクセスログが数百MB/日 ログを見ると検索エンジン&検索エンジンからの流入が主のよう Nitterを使いたいと使われるのはいいけど使いたいときに自分が使 えなかったりしてちょっとあれ>< 9

    / 37
  10. アクセス状況 アクセス状況 10 / 37

  11. 11 / 37

  12. 検索エンジンをrobots.txtで制限 検索エンジンをrobots.txtで制限 robots.txt を用意 Apache httpdのreverse proxy環境でAlias設定 詳細 → Alias

    /robots.txt /home/nitter/robots.txt <Location "/robots.txt"> Require all granted </Location> Nitterにrobots.txtを設定(Apache httpdのreverse proxy環境でAlias 設定) 12 / 37
  13. だんだんアクセスが減る だんだんアクセスが減る 検索エンジンのスパイダーが居なくなることでサーバーが安定 :) 検索エンジンの検索結果からもだんだん減っている 検索エンジンから消さなくても良さそう? 13 / 37

  14. アクセス日 件数 06/04 1150k 06/09 978k 06/10 808k 06/11 772k

    Google検索結果 Google検索結果 14 / 37
  15. 急にアクセスが減る 急にアクセスが減る 15 / 37

  16. rate limit rate limit 16 / 37

  17. アクセスが減ったのにrate limit アクセスが減ったのにrate limit 今度はTwitterからVPSに対しての制限( nitter.net でよく見ていたもの ) 制限されたのでアクセスが減る,解除されて戻るを繰り返してそ う

    一部の大量アクセスの人を制限したら解除される? 17 / 37
  18. libapache-mod-evasive でアクセス libapache-mod-evasive でアクセス 制限を試みる 制限を試みる DebianパッケージのApache2 httpd で動作するDoS対策モジュールを試 してみる

    $ apt-cache search apache dos libapache2-mod-evasive - evasive module to minimize HTTP DoS or brute force attacks libfile-listing-perl - module to parse directory listings $ apt show libapache2-mod-evasive Package: libapache2-mod-evasive Version: 1.10.1-3 Priority: optional Section: httpd Source: libapache-mod-evasive Maintainer: Alberto Gonzalez Iniesta <agi@inittab.org> Installed-Size: 82.9 kB Depends: libc6 (>= 2.14), apache2-api-20120211, bsd-mailx | mailx Homepage: http://www.zdziarski.com/blog/?page_id=442 Tag: protocol::http, role::program, role::shared-lib, suite::apache Download-Size: 15.0 kB APT-Manual-Installed: yes APT-Sources: http://deb.debian.org/debian buster/main amd64 Packages Description: evasive module to minimize HTTP DoS or brute force attacks mod_evasive is an evasive maneuvers module for Apache to provide some protection in the event of an HTTP DoS or DDoS attack or brute force attack. 18 / 37
  19. 導入 導入 1 インストール 2 有効化 $ sudo apt install

    libapache2-mod-evasive $ sudo a2enmod evasive Module evasive already enabled 1 2 19 / 37
  20. 設定 設定 設定ファイル: /etc/apache2/mods-available/evasive.conf DOSHashTableSize ハッシュテーブルサイズ.大きくすると高速になるけどメモリ 使用量が増える. DOSPageCount 同一ページでのDoSカウント DOSSiteCount

    サイト単位でのDoSカウント DOSPageInterval 同一ページでのDoSカウント間隔(秒) 20 / 37
  21. DOSSiteInterval サイト単位でのDoSカウント間隔(秒) DOSBlockingPeriod DoSと判定されたときのブロック時間(秒) DOSEmailNotify DoSと判定されたときの通知メール宛先 DOSSystemCommand DoSと判定されたときに実行するコマンド(動作未確認) DOSLogDir DoSと判定されたときに作られるログファイル格納ディレクト

    リ 21 / 37
  22. DOSWhitelist DoSと判定されないアドレスを設定(複数行設定可能) 22 / 37

  23. mod_evasive20.c より既定値 mod_evasive20.c より既定値 #define DEFAULT_HASH_TBL_SIZE 3079ul // Default hash

    table size #define DEFAULT_PAGE_COUNT 2 // Default maximum page hit count per interva #define DEFAULT_SITE_COUNT 50 // Default maximum site hit count per interva #define DEFAULT_PAGE_INTERVAL 1 // Default 1 Second page interval #define DEFAULT_SITE_INTERVAL 1 // Default 1 Second site interval #define DEFAULT_BLOCKING_PERIOD 10 // Default for Detected IPs; blocked for 10 s #define DEFAULT_LOG_DIR "/tmp" // Default temp directory 23 / 37
  24. 今の設定 今の設定 設定反映 $ sudo service apache2 reload <IfModule mod_evasive20.c>

    #DOSHashTableSize 3079 #DOSPageCount 2 DOSSiteCount 30 #DOSPageInterval 1 DOSSiteInterval 60 DOSBlockingPeriod 180 DOSEmailNotify matoken@example.com #DOSSystemCommand "su - someuser -c '/sbin/... %s ...'" DOSLogDir "/var/log/mod_evasive" DOSWhitelist 153.121.44.87 </IfModule> 24 / 37
  25. test script test script test script( /usr/share/doc/libapache2-mod- evasive/examples/test.pl )があるが,現在のapache httpdでは動

    作しない $ perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl HTTP/1.1 400 Bad Request HTTP/1.1 400 Bad Request HTTP/1.1 400 Bad Request : 25 / 37
  26. 修正 修正 改行コードを \n から \r\n に変更する. @@ -10,7 +10,7

    @@ my($SOCKET) = new IO::Socket::INET( Proto => "tcp", PeerAddr=> "127.0.0.1:80"); if (! defined $SOCKET) { die $!; } - print $SOCKET "GET /?$_ HTTP/1.0\n\n"; + print $SOCKET "GET /?$_ HTTP/1.0\r\n\r\n"; $response = <$SOCKET>; print $response; close($SOCKET); 26 / 37
  27. テスト テスト $ perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl HTTP/1.1 200 OK HTTP/1.1 200

    OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 403 Forbidden HTTP/1.1 200 OK HTTP/1.1 403 Forbidden HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK : 27 / 37
  28. アクセス制限確認 アクセス制限確認 syslogにメッセージ mod_evasive[809]: Blacklisting address 127.0.0.1: possible DoS attack.

    DOS-<IPアドレス> というファイル名で中身はPIDのログファイル が作成される. メールが送信される アクセスがしばらく制限される(既定値で10s) 28 / 37
  29. メール形式が変 メール形式が変 メールは送信されるが, To: , Subject: も body の中に入ってしまって いる.

    mod_evasive20.c の MAILER に -t オプションを加える. From: www-data <www-data@vmi264672.contaboserver.net> To: matohara@gmail.com Subject: HTTP BLACKLIST 127.0.0.1 mod_evasive HTTP Blacklisted 127.0.0.1 #define MAILER "/usr/bin/mail -t %s" 29 / 37
  30. ログファイルがクリーンアップ ログファイルがクリーンアップ されない(2度目以降の通知が飛 されない(2度目以降の通知が飛 ばない) ばない) 1度目のDoS検出でログファイル( dos-<ip address> )が作られ,同

    じIPアドレスでの2度目以降の検出時に403は返すが,syslogやメール に記録されない. 以下のissueによると制限解除時に該当ログファイ ルのクリーンアップ処理が必要. 修正中 とりあえずsyslogには出すようにした. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=931813 30 / 37
  31. その他のバグ その他のバグ キャッシュサイズが間違っているらしい キャッシュサイズを 3097 から 3079 に mod_evasive20.c #define DEFAULT_HASH_TBL_SIZE

    3079ul // Default hash table size #833448 - libapache2-mod-evasive: Wrong prime number. Should be 3079 instead of 3097 - Debian Bug report logs 31 / 37
  32. パッケージの作り直し パッケージの作り直し 1 ビルドに必要なパッケージの導入 2 sourceパケージのダウンロード 3 署名なしでビルド 4 既存のパッケージを削除(設定は残す)

    5 出来上がったパッケージの導入 $ sudo apt build-dep libapache2-mod-evasive $ sudo apt source libapache2-mod-evasive $ cd libapache-mod-evasive-1.10.1 $ #修正 $ debuild -uc -us -b $ sudo apt remove libapache2-mod-evasive $ sudo dpkg -i ../libapache2-mod-evasive_1.10.1-3_amd64.deb 1 2 3 4 5 32 / 37
  33. pinを設定してapt upgradeでアッ pinを設定してapt upgradeでアッ プデートされないようにする プデートされないようにする /etc/apt/preferences Package: libapache2-mod-evasive Pin:

    version * Pin-Priority: -1 33 / 37
  34. アクセス制限について アクセス制限について 今の所1時間に数人引っかかる感じでアクセスは2/3程に → アクセ スが戻ってきたので厳しく 手動では引っかからないのでもう少し厳しくしても良さそう まだTwitter の制限はある 34

    / 37
  35. アクセス制限に使った libapache- アクセス制限に使った libapache- mod-evasive について mod-evasive について アクセス制限の動作自体は問題なさそう 設定どおりにアクセス制限できている

    細かいバグがいくつか Debianには されているが数年放置されている は消えている → を見たら 別のものを使ったほうが良さそう バグレポ upstream sidのpkg情報 GitHubに移動してい た 35 / 37
  36. まとめ まとめ 自分用に立てていたサービスが検索エンジンに見つかってアクセ スが大量に 自分が使えなくなって困る Proxy的なサービスなのでもっと注意するべきだった VPSが固定料金で良かった 💰 36 /

    37
  37. 奥付 奥付 発表 発表者 利用ソフトウェア ライセンス CC BY-NC-SA 4.0 鹿児島Linux勉強会

    2021.06(オンライン開催) - connpass Kenichiro Matohara(matoken) Asciidoctor Reveal.js 37 / 37