メモ。HTTP/2 Bomb というリモートサービス拒否(DoS)の脆弱性が発見されている。対象は限定的だが、フィットすると一撃で落とされる。怖い。
- HTTP/2 を使っていなければ、該当しない。
- WAFやFirewallで防げるのかが不明。
- ウェブサーバのApacheやNginxは、対応版がリリースされている。
- IISは、対応版が出ていない。
- ウェブサーバのメモリを使い切る攻撃。
参考:
メモ。HTTP/2 Bomb というリモートサービス拒否(DoS)の脆弱性が発見されている。対象は限定的だが、フィットすると一撃で落とされる。怖い。
参考:
ウェブサイトの廃止に伴い、閉鎖のお知らせページを設定する。基本的に、エラーコード404のNot Foundばかりになるので、さくらのレンタルサーバで、404エラーページを独自に設定するようにしたメモ。
さくらのレンタルサーバの管理画面では、404ページの設定はない。
さくらのレンタルサーバでは、.htaccessを利用したウェブサーバの設定の上書きが可能。そのため、「.htaccess」を使って、404エラーのページを設定する。
.htaccessの中身
ErrorDocument 404 /404.html
他に「.htaccess」で設定していることがなければ、この1行でよい。ファイルは作ってアップロードするか、管理画面のファイルマネージャーから作成して、書き込む。
「404.html」は、設定したウェブサイトのフォルダのルートに置く。「/」でルートの階層を指定しているので。
休みで、のんびりと本をよんで勉強していたら、突然のアラート。調べてみると、サーバに対して、ping も飛ぶし、ssh接続もできた。死んでいるのは、Webサーバへのアクセスのみ。プロセスもみてみると、httpdはいる。ブラウザでは応答不能なので、正常に動作しておらず、ハングアップしたっぽい。(FreeBSD 13.1 release と Apache2.4 の組み合わせ)
↓ ps auxの結果
root@ray:/var/log # ps aux | grep httpd
root 925 0.0 0.9 48980 17712 - Ss 25Jul22 1:44.07 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 22306 0.0 1.6 63636 33864 - S 10:59 0:00.43 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 22307 0.0 1.6 63700 34020 - S 10:59 0:00.43 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 22308 0.0 0.9 48980 17728 - S 10:59 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 22309 0.0 0.9 48980 17728 - S 10:59 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 22310 0.0 0.9 48980 17728 - S 10:59 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 22311 0.0 0.9 48980 17728 - S 10:59 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
root 22314 0.0 0.1 12844 2032 0 S+ 10:59 0:00.00 grep httpd
「-DNOHTTPACCEPT」がhttpdの引数としてあるけれど、どうやらこれは関係ないっぽい。これがついていても、Apacheは動いているというページがあるので。
「httpd -k restart」をやってみたが、なかなか応答が帰ってこず。応答が帰ってきたあとも、ブラウザではアクセスできず。
完全にhttpdプロセスが止まっていないことも考慮して、「httpd -k stop」「httpd -k stop」を行ってみたが駄目だった。エラーは出ているけれど、httpd自体は起動できているので、とりあえず無視。
root@ray:/var/log # httpd -k start
[Mon Aug 15 10:59:51.520174 2022] [core:warn] [pid 22319] (2)No such file or directory: AH00075: Failed to enable the 'httpready' Accept Filter
[Mon Aug 15 10:59:51.520649 2022] [core:warn] [pid 22319] (2)No such file or directory: AH00075: Failed to enable the 'httpready' Accept Filter
[Mon Aug 15 10:59:51.520656 2022] [core:warn] [pid 22319] (2)No such file or directory: AH00075: Failed to enable the 'dataready' Accept Filter
[Mon Aug 15 10:59:51.520661 2022] [core:warn] [pid 22319] (2)No such file or directory: AH00075: Failed to enable the 'dataready' Accept Filter
もう一度、restartで再起動させてみたら、今度は正常にブラウザでアクセスできた。とりあえず、障害としては復旧したのでよし。
http/httpsでの疎通が取れなくなった時間のエラーログも確認してみたが、エラーログは記録されていなかった。調査はしたけれど、結局、原因不明。
自分のサーバなので、休みでよかった。しかし、休みで家にいるときに、この不可解な現象は・・・己の未熟さを顧みて、勉強を続けろってことだろうか。
リバースプロキシの後ろにWordpressをおいて、リバースプロキシ経由でアクセスさせようとしたところ、ハマった。いろいろと試しているが、現在進行系で格闘中だ。
事象としては、
という具合だ。前がNginxで、後ろがApache2.4。WordpressをCDNで配信するときの設定も試したが、うまく行かず。たぶん、根本的に何かが欠けていると思われる。簡単と思っていたけれど、思わぬところでハマるものだ。最初から考え直し。
Ubuntuに、Magento 2.3.5をインストールした後に、管理ページにアクセスしたところ、ページが404エラーになった。他にも、いくつかのページが404エラーになった。
原因は、Apacheのmod_rewriteの設定がMagentoのディレクトリで有効になっていないからだった。
Apacheには、mod_rewriteを入れているし、読み込ませてもいるが、肝心のMagentoのディレクトリで使うように設定されていなかったのが原因。
対処としては、後述の参考ページの設定をいれただけだ。
まずMagentoのインストールディレクトリに下記の .htaccessを保存する。
###############################################
## overrides deployment configuration mode value
## use command bin/magento deploy:mode:set to switch modes
# SetEnv MAGE_MODE developer
############################################
## uncomment these lines for CGI mode
## make sure to specify the correct cgi php binary file name
## it might be /cgi-bin/php-cgi
# Action php5-cgi /cgi-bin/php5-cgi
# AddHandler php5-cgi .php
############################################
## GoDaddy specific options
# Options -MultiViews
## you might also need to add this line to php.ini
## cgi.fix_pathinfo = 1
## if it still doesn't work, rename php.ini to php5.ini
############################################
## this line is specific for 1and1 hosting
#AddType x-mapp-php5 .php
#AddHandler x-mapp-php5 .php
############################################
## default index file
DirectoryIndex index.php
<IfModule mod_php5.c>
############################################
## adjust memory limit
php_value memory_limit 768M
php_value max_execution_time 18000
############################################
## disable automatic session start
## before autoload was initialized
php_flag session.auto_start off
############################################
## enable resulting html compression
#php_flag zlib.output_compression on
###########################################
## disable user agent verification to not break multiple image upload
php_flag suhosin.session.cryptua off
</IfModule>
<IfModule mod_php7.c>
############################################
## adjust memory limit
php_value memory_limit 768M
php_value max_execution_time 18000
############################################
## disable automatic session start
## before autoload was initialized
php_flag session.auto_start off
############################################
## enable resulting html compression
#php_flag zlib.output_compression on
###########################################
## disable user agent verification to not break multiple image upload
php_flag suhosin.session.cryptua off
</IfModule>
<IfModule mod_security.c>
###########################################
## disable POST processing to not break multiple image upload
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
<IfModule mod_deflate.c>
############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip
# Insert filter on all content
###SetOutputFilter DEFLATE
# Insert filter on selected content types only
#AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
# Netscape 4.x has some problems...
#BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
#BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
#BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
#SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
#Header append Vary User-Agent env=!dont-vary
</IfModule>
<IfModule mod_ssl.c>
############################################
## make HTTPS env vars available for CGI mode
SSLOptions StdEnvVars
</IfModule>
############################################
## workaround for Apache 2.4.6 CentOS build when working via ProxyPassMatch with HHVM (or any other)
## Please, set it on virtual host configuration level
## SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
############################################
<IfModule mod_rewrite.c>
############################################
## enable rewrites
Options +FollowSymLinks
RewriteEngine on
############################################
## you can put here your magento root folder
## path relative to web root
#RewriteBase /magento/
############################################
## workaround for HTTP authorization
## in CGI environment
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
############################################
## TRACE and TRACK HTTP methods disabled to prevent XSS attacks
RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
RewriteRule .* - [L,R=405]
############################################
## redirect for mobile user agents
#RewriteCond %{REQUEST_URI} !^/mobiledirectoryhere/.*$
#RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
#RewriteRule ^(.*)$ /mobiledirectoryhere/ [L,R=302]
############################################
## never rewrite for existing files, directories and links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
############################################
## rewrite everything else to index.php
RewriteRule .* index.php [L]
</IfModule>
############################################
## Prevent character encoding issues from server overrides
## If you still have problems, use the second line instead
AddDefaultCharset Off
#AddDefaultCharset UTF-8
<IfModule mod_expires.c>
############################################
## Add default Expires header
## http://developer.yahoo.com/performance/rules.html#expires
ExpiresDefault "access plus 1 year"
ExpiresByType text/html A0
ExpiresByType text/plain A0
</IfModule>
###########################################
## Deny access to root files to hide sensitive application information
RedirectMatch 404 /\.git
<Files composer.json>
order allow,deny
deny from all
</Files>
<Files composer.lock>
order allow,deny
deny from all
</Files>
<Files .gitignore>
order allow,deny
deny from all
</Files>
<Files .htaccess>
order allow,deny
deny from all
</Files>
<Files .htaccess.sample>
order allow,deny
deny from all
</Files>
<Files .php_cs>
order allow,deny
deny from all
</Files>
<Files .travis.yml>
order allow,deny
deny from all
</Files>
<Files CHANGELOG.md>
order allow,deny
deny from all
</Files>
<Files CONTRIBUTING.md>
order allow,deny
deny from all
</Files>
<Files CONTRIBUTOR_LICENSE_AGREEMENT.html>
order allow,deny
deny from all
</Files>
<Files COPYING.txt>
order allow,deny
deny from all
</Files>
<Files Gruntfile.js>
order allow,deny
deny from all
</Files>
<Files LICENSE.txt>
order allow,deny
deny from all
</Files>
<Files LICENSE_AFL.txt>
order allow,deny
deny from all
</Files>
<Files nginx.conf.sample>
order allow,deny
deny from all
</Files>
<Files package.json>
order allow,deny
deny from all
</Files>
<Files php.ini.sample>
order allow,deny
deny from all
</Files>
<Files README.md>
order allow,deny
deny from all
</Files>
################################
## If running in cluster environment, uncomment this
## http://developer.yahoo.com/performance/rules.html#etags
#FileETag none
############################################
## Add custom headers
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
</IfModule>
次に、/etc/apache/の中のconfファイル(vhosts.confやapache.confなどから適切なものを書き換え)に下記を追加する。ディレクトリは、Magentoをインストールしたディレクトリに変える。
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
allow from all
</Directory>
最後に、Apacheの再起動を行う。
FreeBSDでLet’s Encryptを使ってWebサーバのSSL証明書を作っている。毎回、手作業で行うのはめんどくさいので、cronで自動的に実行させていた。自動更新させていたが、ある日、証明書の有効期限が切れているとブラウザが警告してきたので、調べたところ・・・pkgのアップデートを少し前にやったときに実行ファイルのバージョン(というかファイル名)が変わっていたようで、そのため、cronは実行されるがエラーになっていた模様。ついでにもともとシンボリックリンクだったはずだが、それも消えていた。
もともと実行していたコマンド
/usr/local/bin/certbot renew
今のコマンド
/usr/local/bin/certbot-2.7 renew
凡ミス。pkgをアップデートするときは、気をつけないといけないな。
Apache24のバーチャルホストで、独自の404エラーのページを設定する方法。”.htaccess”でもできるが、サイトを閉鎖するときに適用したかったので、”VirtualHost”の設定としておこなった。
バーチャルホストの設定の中にErrorDocumentの設定を書く。このとき、エラーページのHTMLファイルは、絶対パスで書く。(絶対URLで書いてはいけない。相対パスでも書いてはいけない。)
ErrorDocument エラーコード エラーページのHTMLファイル(絶対パスで書く)
設定例。
DocumentRoot /var/www/blog ServerName xxxx.xenos.jp ErrorDocument 404 /404.html
※404以外のエラーも表示させるので、あれば、それぞれエラーコードと対応するエラーページを保存し、指定すればよい。
ウェブサーバのSSL設定のコンフィグを生成してくれるジェネレータを、Mozillaが公開している。 NginxもApacheもAWS ELBも生成してくれるので、便利。証明書のパスなどは自分で書き換える必要があるが、ベースになるコンフィグを作ってくれるので、楽。
もちろん、必要に応じてチューニングは必要だが、ベースは重要。
読了。ログ分析の入門書という位置付けなので、ログ分析のターゲットがウェブで公開されているシステムになっている。そのため、社内のシステムのログ分析などについては応用しにくい。ただ、ウェブサーバを使うシステムであれば、分析を始めるためのきっかけになることが多数書いてあるので、方向性をきめたり、ログ分析を始めるキッカケにはよい本。
サンプルでスクリプトが多く記載されているので、似たような環境であれば、同じようにログ分析を組めるのもよい。あとは、独自でログ分析をやってしまうと、他はどういうようにやっているのだろう?という疑問が生まれるが、一つのケーススタディというか比較先にも使える。そして、分析はやっぱり、スクリプトを書いて絞り込みというのが主流というのも心強い。汎用化できるところ、できないところ、ケースバイケースなので、迷いがち。それでよいとも言えるので。
あと、R言語(R Studio)でのログ分析自動化の構築の解説もよい。よくを言えば、Elasticsearch+Kibanaについてあるとよかったけれど、それはそれで本を買えばよいか。
FreeBSDのpkgで、まるっとアップデートしたら、Apache24が起動時に、WARNINGをはいて起動しなくなった。
■発生したエラー
Mar 22 14:22:10 ray root: /etc/rc: WARNING: failed to start apache24 Mar 22 14:22:10 ray kernel: pid 763 (httpd), uid 0: exited on signal 11 (core dumped)
■対応
pkg delete apache24-2.4.29 pkg install apache24-2.4.29 pkg install mod_php56-5.6.32_1