毎年の行事、無事に終わりました。

今回も紫陽花で有名なお寺です。


真夏のような青空に映える紫陽花も趣がありました。

上からの構図も意識して撮影できたのも収穫。


また、ガクアジサイも豊かな光量の下で撮ることができました。
こちらの記事から1年と4ヶ月。
ことから、新調。この、物理的にまず落ちない形状は非常に気に入っていたのですがあいにく終売品。
そこで選んだのがこちらです。
耳から落ちにくい形状で、比較的安価だったこのモデルを選択。
このようにイヤーフックがついていて、180度回転させることで耳にかけられるようになっています。
まず、ノイズキャンセリングが以前使っていたLife NCよりも段違い。外した瞬間に雑音だらけで戸惑ったほどです。
着用の手間は思った以上。いったん首にかけてから片耳ずつ嵌めていく運用と異なり、
一度片方を摂って展開し、装着してからもう片っぽを取り付ける形になるので、脱着自派より慎重になる必要がありました。
反面、一度でも取り付けてしまえば余程のことがない限り落ちないのは利点です。
音質に関しては余り気にしない性格なので、特に語ることはありません。
以前よりも小さいケースなので
百均で購入したこちらを使います。
大きさも厚みもちょうどいいサイズ。
リュックにそのままぶら下げられるのも便利です。
この記事に続けての詰まった場所です。
『ライザのアトリエ3』ロスカ島にはメインであるワールドクエストの他、ノーマルクエストもいくつか発生します。
ロスカ島でアトリエを構えた後に発生するこのイベント。
他の地方でも見かける鳥を追いかけることを3回追えることでクリアとなるのですが……
場所が曖昧で広範囲で、イベントが発生しません。そのエリアの中で「効果:動物呼び」を持つ秘密の鍵を用いても効果が無いと言われます。
そんな中で、なんとか終わらせることができましたのでメモとして残します。
ネタバレとは言えストーリー進行には絡まないため、こちらで紹介です。
ロスカ島北東に位置する「異空の社」。その南東の回廊を南から進んでいくと鳥が出てきます。
異空の社から西、開明の社へと向かうとき、間のオアシス的な場所、小島に近づくことで鳥が出てきます。
ここだけはスクリーンショットが間に合いました。
創世の社の施設内に入り、北の回廊へと進んでいくときに出てきます。
このイベント発生後、鳥を追いかけていくことで条件達成。
最終的にアトリエ内にいるタオに話しかけてクエスト完了です。
何度か休憩して再度チャレンジしましょう。
ただ、ハッキリ言って旨味はないです。
DLC故に実績には絡まず、ここまでやりこんでいれば報酬のSPも今更感が漂いました。
「創世の社」で以下の再現ある不具合を確認しています。
と、上記の鳥は出てきません。
通常のランダムクエストのように
と、やはり、二度と復活しません。
特に、創世の社は
合間にジャンプする必要のある裂け目が存在します。この段階で落ちてしまうとエリアから外れるため、二度と鳥が出てこなくなります。
のほぼ二択でした。なので、タイミングは要注意です。
現在、growiのリバースプロキシとしてnginxを利用しています。
そこで、先だってご紹介したapache利用のサイトと同じようにセキュリティヘッダーを付与しました。
以下、教義・信仰に沿ったエディタで編集します。自分の環境に合わせてください。
upstream hoge {
server 192.168.1.101:3000;
#growiが稼働しているアドレス
}
server {
## http設定(常時SSL化を行います)
listen 80 http2;
server_name hoge.example.com;
server_tokens off;
return 301 https://$host$request_uri;
access_log /var/log/nginx/hoge.example.com/access.log;
error_log /var/log/nginx/hoge.example.com/error.log warn;
}
server {
## https設定
listen 443 ssl http2;
server_name hoge.example.com;
server_tokens off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_dhparam /etc/nginx/dhparam;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
#SecurityHeader
add_header Strict-Transport-Security 'max-age=63072000';
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
ssl_certificate /etc/certs/hoge.example.com.crt;
ssl_certificate_key /etc/private/hoge.example.com.key;
ssl_stapling on;
ssl_stapling_verify on;
access_log /var/log/nginx/hoge.example.com/ssl_access.log;
error_log /var/log/nginx/hoge.example.com/ssl_error.log warn;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_max_temp_file_size 10240m;
client_max_body_size 10240m;
proxy_redirect off;
set $proxy_target 'hoge';
location / {
proxy_pass http://$proxy_target;
}
location /socket.io/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_cache_bypass $http_upgrade;
#SecurityHeader
add_header Strict-Transport-Security 'max-age=63072000';
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
proxy_pass http://$proxy_target/socket.io/;
}
}
+ #SecurityHeader
add_header Strict-Transport-Security 'max-age=63072000';
+ add_header X-Content-Type-Options "nosniff";
+ add_header X-Frame-Options "SAMEORIGIN";
+ add_header X-XSS-Protection "1; mode=block";
proxy_cache_bypass $http_upgrade;
+
+ #SecurityHeader
+ add_header Strict-Transport-Security 'max-age=63072000';
+ add_header X-Content-Type-Options "nosniff";
+ add_header X-Frame-Options "SAMEORIGIN";
+ add_header X-XSS-Protection "1; mode=block";
+
proxy_pass http://$proxy_target/socket.io/;
sudo nginx -t
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
# と出れば正常です
sudo systemctl restart nginx
curlを用いて、開発者ツールよりも手っ取り早くヘッダ付与を確認します。
curl -I 上記、設定を行ったURL
strict-transport-security: max-age=63072000
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
のように表示されればOKです。
AWS Lightsailを用いて外部公開しているWebサイトのセキュリティを高めるため、セキュリティヘッダを更に付与しました。
また、/etc/apache2/sites-availavle配下にバーチャルサイトファイルで管理しています。
cd /etc/apache2/sites-available &&pwd
# 自環境のバーチャルサイトの格納場所に移動します
sudo cp -pi hoge.conf /path/to/directory/hoge.conf.$(date +%Y%m%d)
# バックアップ元とバックアップ先は自分の環境に合わせます。
diff -u hoge.conf /path/to/directory/hoge.conf.$(date +%Y%m%d)
# 差分がないことでバックアップが取れていることを確認します。
教義・進行に沿ったエディタを用いて、以下の差分になるようにセキュリティヘッダをコンフィグに付与します。
+ Header set X-Content-Type-Options "nosniff"
+ Header always append X-Frame-Options "SAMEORIGIN"
+ Header set X-XSS-Protection "1; mode=block"
以下はChantGPTによる解説です。
このヘッダーは、ブラウザがレスポンスのContent-Typeヘッダーと実際のコンテンツの種類が一致しない場合に、ブラウザが自動的にコンテンツのタイプを推測するのを防止します。これにより、悪意のあるコンテンツが実行されるリスクを低減することができます。
このヘッダーは、クリックジャッキング攻撃を防止するために使用されます。"DENY" を指定すると、ページがフレーム内で表示されることが完全に禁止されます。"SAMEORIGIN" を指定すると、同じオリジン(ドメインとプロトコルが一致)のフレーム内でのみページが表示されます。
このヘッダーは、クロスサイトスクリプティング(XSS)攻撃からの保護を目的としています。ブラウザによって検出されたXSS攻撃が検出された場合、ブラウザはページをブロックするように指示されます。
sudo apache2ctl configtest
#Syntax OKを確認します
sudo systemctl restart apache2.service
systemctl status apache2.service
#Active(running)を確認します
ヘッダーが正しく設定されていれば、それぞれのヘッダーの値が表示されます。
侵入防御システム、Fail2banを本格的に導入してから半年余り。その効果のフィードバックです。
[ufw]
enabled=true
filter=ufw.aggressive
action=iptables-allports
logpath=/var/log/ufw.log
maxretry=1
bantime=-1
ignoreip = 127.0.0.0/8 ::1
# 他、自環境のアクセス元
[sshd]
enabled=true
filter=sshd
mode=normal
port=22
protocol=tcp
logpath=/var/log/auth.log
maxretry=3
bantime=-1
ignoreip = 127.0.0.0/8 ::1
# 他、自環境のアクセス元
bantimeは「-1」。つまり、一度でもリストに入るような不審な兆候があれば、永久に追放します。
この設定で、どのぐらいのIPアドレスを弾いたのか、確認してみました。
sudo fail2ban-client status ufw
Status for the jail: ufw
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/ufw.log
`- Actions
|- Currently banned: 187
|- Total banned: 187
`- Banned IP list: (後略)
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 29
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 5125
|- Total banned: 5125
`- Banned IP list: (後略)
驚くべきはSSHのリスト数。半年で5000件を超えているので、単純計算で一月に833件超。BANされたリストをランダムに選んでabusedIP (https://www.abuseipdb.com/)で検索をかけると、いずれも
Confidence of Abuse is 100%
と表示されるものがほとんどです。
を改めて思い知りました。また、IPアドレス固定サービスを利用しているのであれば、アクセス許可を固定する(ポジティブリスト形式)が確実です。
先日、ようやく崩すことができたボードゲーム『バラージ』。
既に専用オーガナイザーとホイールとアップグレードを行っていますが、そこに更に改善を行いました。
電力の源となる水。
と実際に遊んで分かったので、この、キューブビーズに差し替えます。
色的にも調和しますし、経常的に転がり落ちることもありません。
各種クレジットは大きさと数字が違うのみ。「1クレジット差」が大きな差になる本ゲームにおいて、この視認性の悪さは無視できません。
これに関しては汎用のボードゲーム用コインに差し替えます。
それぞれ色が異なるので使う時も受け取るときも便利。
こうして用意した水トークンと木製コインをオーガナイザー内のスペースに差し替えます。
それぞれ、サイズ感を損なうことなく差し替えられました。
こちらの記事の補足になります。
『ライザのアトリエ3』で、ストーリー/戦闘/調合/探索と全てに関わってくる秘密の鍵。
今回は調合時の違いです。
パーティークエストの条件にもなっている調合アイテム《古の賢者の石》。
全ての効果/特性を発現させた場合の属性値は10。
特性のみ発現させない場合でも8の属性値を持っています。
ここに、レシピの起点(精霊の小瓶)からシンセサイズ効果「属性値増加」を加えます。
秘密の鍵はレシピ変化ごとに追加できるので……
と、それぞれに付与。この途上で超特性「超濃度」を付与していくと
属性値「22」まで膨れ上がります。
最後の《古の賢者の石》のみ属性追加を付与しているので、こちらでも使うと更に属性値は上がるでしょう。
「ここまで上げてどうする」レベルではありますが、レシピ変化にはこういう側面があります。
Powered by WordPress & Theme by Anders Norén