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

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

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

Kenichiro MATOHARA

June 20, 2021
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. 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
  2. 検索エンジンを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
  3. アクセス日 件数 06/04 1150k 06/09 978k 06/10 808k 06/11 772k

    Google検索結果 Google検索結果 14 / 37
  4. 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 <[email protected]> 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
  5. 導入 導入 1 インストール 2 有効化 $ sudo apt install

    libapache2-mod-evasive $ sudo a2enmod evasive Module evasive already enabled 1 2 19 / 37
  6. 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
  7. 今の設定 今の設定 設定反映 $ sudo service apache2 reload <IfModule mod_evasive20.c>

    #DOSHashTableSize 3079 #DOSPageCount 2 DOSSiteCount 30 #DOSPageInterval 1 DOSSiteInterval 60 DOSBlockingPeriod 180 DOSEmailNotify [email protected] #DOSSystemCommand "su - someuser -c '/sbin/... %s ...'" DOSLogDir "/var/log/mod_evasive" DOSWhitelist 153.121.44.87 </IfModule> 24 / 37
  8. 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
  9. 修正 修正 改行コードを \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
  10. テスト テスト $ 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
  11. アクセス制限確認 アクセス制限確認 syslogにメッセージ mod_evasive[809]: Blacklisting address 127.0.0.1: possible DoS attack.

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

    mod_evasive20.c の MAILER に -t オプションを加える. From: www-data <[email protected]> To: [email protected] Subject: HTTP BLACKLIST 127.0.0.1 mod_evasive HTTP Blacklisted 127.0.0.1 #define MAILER "/usr/bin/mail -t %s" 29 / 37
  13. ログファイルがクリーンアップ ログファイルがクリーンアップ されない(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
  14. その他のバグ その他のバグ キャッシュサイズが間違っているらしい キャッシュサイズを 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
  15. パッケージの作り直し パッケージの作り直し 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
  16. アクセス制限に使った libapache- アクセス制限に使った libapache- mod-evasive について mod-evasive について アクセス制限の動作自体は問題なさそう 設定どおりにアクセス制限できている

    細かいバグがいくつか Debianには されているが数年放置されている は消えている → を見たら 別のものを使ったほうが良さそう バグレポ upstream sidのpkg情報 GitHubに移動してい た 35 / 37
  17. 奥付 奥付 発表 発表者 利用ソフトウェア ライセンス CC BY-NC-SA 4.0 鹿児島Linux勉強会

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