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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

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

Avatar for Kenichiro MATOHARA

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