LAMYを一本購入したことで
- 比較的安価
- 書きやすい
- スクリュー式でないためすぐに書き始められる
の利点がある上に「カラフルで併せやすい」長所があります。
ここで新たに積み上げました。
- テラレッド
- バイオレッド
- ヴァイブラント ピンク
の3つ。この3色をチョイスしたのは
いわゆる「戦隊カラー」に合うからだったりします。
ペンケースを広げると彩りが広がっている光景もまた日々の気分を高めてくれます。
ここから更に改良を加えました。
以下を導入済みです。
全て管理者権限で実施しました。
mkdir /var/lib/redmine/log/suspicious_ip
cd /hoge/
vi negativelist_add.sh
#!/bin/sh
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
cd /var/lib/redmine/log
cat error.log | awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) { print substr($0, RSTART, RLENGTH) }' | sort | uniq > /var/lib/redmine/log/suspicious_ip/suspicious_ip.`date +%Y%m%d`
chown www-data:www-data /var/lib/redmine/log/suspicious_ip/suspicious_ip.`date +%Y%m%d`
cat /var/lib/redmine/log/suspicious_ip/suspicious_ip.2* |sort |uniq > /var/lib/redmine/log/suspicious_ip_all.txt
cat suspicious_ip_all.txt > /etc/apache2/sites-available/negativelist.txt
chown www-data:www-data suspicious_ip_all.txt
sed -i /除外したいIPアドレス/d /etc/apache2/sites-available/negativelist.txt
chmod +x negativelist_add.sh
ここでは/etc/apache2/sites-available/redmine-le-ssl.conf にコンフィグを作成済みです。
cd /etc/apache2/sites-available
cp -pi redmine-le-ssl.conf redmine-le-ssl.conf.bak
vi redmine-le-ssl.conf
<VirtualHost _default_:80>
servername [redmineのドメイン名]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
<VirtualHost _default_:443>
servername [redmineのドメイン名]
CustomLog /var/log/redmine/access.log combined
ErrorLog /var/log/redmine/error.log
Alias /redmine /var/lib/redmine/public
# Mod Security
SecRuleEngine On
## ModSecurity有効化
SecRequestBodyInMemoryLimit 524288000
SecRequestBodyLimit 524288000
## ファイルのアップロードをできるようにします。
SecRuleRemoveById 949110
SecRuleRemoveById 941310
SecRuleRemoveById 980130
SecRuleRemoveById 911100
SecRuleRemoveById 200002
SecRuleRemoveById 200003
SecRuleRemoveById 200004
SecRuleRemoveById 959100
## 上記を無効化しないとチケット更新時にエラーとなりました(偽陽性)ため、上記ルールを除外します。
SecRule ARGS:modsecparam "@contains test" "id:4321,deny,status:403,msg:'ModSecurity test rule has triggered'"
## テスト用の検知パラメータを付け加えます。
## Negativelist
SecRule REMOTE_ADDR "@pmFromFile negativelist.txt" "phase:1,id:2,deny,msg:'Negativelisted IP address'"
# /etc/apache2/sites-available/negativelist.txt に記載されたIPアドレスを自動的に遮断します。
<Location /redmine>
PassengerBaseURI /redmine
PassengerAppRoot /var/lib/redmine
Require all granted
<RequireAll>
Require all granted
</RequireAll>
</Location>
SSLEngine on
Protocols h2 http/1.1
Header always set Strict-Transport-Security "max-age=63072000"
SSLCertificateFile [let's encryptが指定した証明書ファイルのパス]
SSLCertificateKeyFile [let's encryptが指定した秘密鍵ファイルのパス]
#Include /etc/letsencrypt/options-ssl-apache.conf
RewriteEngine On
RewriteCond %{HTTP_HOST} ^samplehoge\.hogehoge
RewriteRule ^/$ https://samplehoge.hogehoge/redmine/ [R]
</VirtualHost>
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite 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
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
apache2ctl configtest
# Syntax OKを確認します
systemctl restart apache2
crontab -e
0 8 * * * /hoge/negativelist.sh
これで、以下の動きができるようになります。
昨年から、丸一年経っての出来事です。
ふと思い立ち、丸善の文具コーナーに訪れたら幸運が待っていました。
レモンのチャーム付きLAMY万年筆。
しかも、一番好きなこの明るい緑で彩られています。
昨年のものとは異なり、二つ切りのレモンとまるごとをあしらった形です。
今回のペン先は極細を選びました。
と、三拍子が揃った道具を入手しました。
Nextcloudにアップロードされた画像をタグ付けしてくれる「recognize」アプリを使っています。
それを用いて運用したところ、以下のエラーに出くわしました。
メニュー > Administration settings > 概要
これを放置していったところ、Webサービスが止まり、SSHにも接続できなくなりました。そのため、以下の対処を施しました。
以下の環境で動いています。
※snapは使わず、オンプレで構築しました。
また、Opcacheモジュールは設定済みです。
以下、管理者権限で実施しています。
mkdir /etc/old
cd /etc/php/7.4/mods-available
cp -pi opcache.ini /etc/old/opcache.ini.`date +%Y%m%d`
vi opcache.ini
opcache.interned_strings_buffer=16
; 8 → 16に修正
apache2ctl configtest
# Syntax OK を確認します
systemctl restart apache2
メニュー > Administration settings > 概要
へと進みます。
「全てのチェックに合格しました。」
を確認します。
万単位のファイルを既にインポートしたため、画像認識とタグ付けのためにかなりのCPUリソースを消費します。(平均オーバーロードが7を超えるときもありました)
そのため、zabbix等で負荷を監視している場合は認識中は閾値を上げておく等の対処が必要です。
Dropboxのようにファイルを保存できて、各種アプリ(プラグイン)で様々な機能を拡張できるOSS、Nextcloudをインストールしました。
この、2台目のChuwi Herobox Proです。redmineのデータ同期サーバのデータをマウントするために選びました。
以下が導入済みです。
全て管理者権限で実施しました。
sudo apt install php7.4-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysqli,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml}
systemctl restart apache2
mysql -u root -p
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'パスワード';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
導入したサーバは/homeディレクトリを別SSDにマウントしているため、以下のようにしました。
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip /home/www-data
chown -R www-data:www-data /home/www-data/nextcloud
mkdir /var/log/apache2/nextcloud
chown -R www-data:www-data /var/log/apache2/nextcloud
vi /etc/apache2/sites-available/nextcloud.conf
<VirtualHost _default_:80>
ServerName [公開するドメイン名]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
CustomLog /var/log/apache2/nextcloud/access.log combined
ErrorLog /var/log/apache2/nextcloud/error.log
</VirtualHost>
<VirtualHost _default_:443>
ServerName [公開するドメイン名]
CustomLog /var/log/apache2/nextcloud/ssl_access.log combined
ErrorLog /var/log/apache2/nextcloud/ssl_error.log
SSLEngine on
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLCertificateFile /etc/certs/ssl.crt
# 証明書のファイルパス
SSLCertificateKeyFile /etc/private/ssl.key
# 秘密鍵のファイルパス
DocumentRoot /home/www-data/nextcloud
<Directory /home/www-data/nextcloud>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
a2ensite nextcloud.conf
apache2ctl configtest
# Syntax ok を確認します
systemctl restart apache2
ブラウザから設定したドメインにアクセスします。
アクセス後、ガイドに従い
を設定後、以下の画面が出てくれば成功です。
こちらの続きです。
パターンがあったので、完全削除を対応しました。
apt-get --purge autoremove php*
これにより、設定ファイルを含めてPHPが削除されました。
add-apt-repository ppa:ondrej/php
aptitude update
aptitude upgrade
apt install php7.4
apt install php7.4-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysqli,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml}
systemctl restart apache2
その後、正常に上がっていることを確認。
[--purge]オプションで完全に削除するのを失念していました。
ひょんな事から無料でドメインを取得。このドメインを軸に「mkcertではなくLet's Encryptでもワイルドカード証明書が発行できないか」と思って試してみました。
以下は準備済みです。
作業対象が手順によって異なります。
sudo certbot certonly --manual \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory \
-m 自分のメールアドレス \
-d *.ドメイン名
入力後、以下のようにTXTレコードを登録するように求められます。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.ドメイン名 with the following value:
DNSに登録するレコードの値
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
ここではまだEnterは押しません。
lightsailのDNS設定で
をそれぞれ設定して反映させます。
反映後、別のターミナルで以下を実行します。
nslookup -type=TXT _acme-challenge.登録したドメイン名 8.8.8.8
結果が返ってきたら次のステップに進みます。
手順-2-で押していなかったEnterを押します。
以下のようにパスとファイルが明示されているので、そのパスの内容を控えておきます。(外部に公開しないよう注意します)
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/ドメイン名/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/ドメイン名/privkey.pem
Your certificate will expire on 2023-01-09. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
/etc/hostsファイルを
IPアドレス lightsailで設定したフルドメイン サブドメイン
で修正します。
こちらを元に、証明書を差し替えます。
証明書差し替え → nginx再起動後、「AWS Lightsailで設定したドメイン名」でアクセスします。
DNS情報がインターネット上に公開されているので
のがLet's Encrypのいいところです。
この記事で設定していたgrowiサーバ、ログの設定が漏れていたので追加しました。
すべて管理者権限で実施しています。
vi /etc/logrotate.d/growi
/var/log/nginx/chisataki.lyco.reco/*.log {
daily
rotate 10
missingok
notifempty
sharedscripts
compress
delaycompress
postrotate
/usr/sbin/nginx -s reopen >/dev/null 2>&1 || true
endscript
}
今回は
としています。
logrotate -d /etc/logrotate.d/growi
でエラーが出ないことを確認しました。
自室のサーバに専用redmineを運用するようになって半年ほど。一つの課題が浮かび上がりました。
現状、
を自宅サーバ群で運用中。Webサービスが増えるたびに「証明書更新をサーバ毎に行うのが面倒」です。ワイルドカード証明書を用いて、シンボリックリンクの張り替えで済むようにしてもなお各サーバに同じ設定を行うのは手間がかかる上にミスが生じる温床となります。
そこで、既にgrowiサーバで運用しているnginxのリバースプロキシーをredmineにも拡張するようにしました。
やりたいことは以下です。(IPアドレスとドメインは便宜上です)
サクッとまとめると
これにより、SSLを導入する箇所をnginxサーバのみとします。
以下を用意しています。
ともにUbuntu Linux 20.04系で動いています。
全て管理者権限で実施します
以下、ファイルを編集します。
vi /etc/apache2/sites-available/redmine.conf
<Location /redmine>
PassengerBaseURI /redmine
PassengerAppRoot /var/lib/redmine
Require all granted
</Location>
Alias /redmine /var/lib/redmine/public
<VirtualHost 192.168.1.99:80>
ServerName abc.local
ErrorLog /var/log/redmine/error.log
CustomLog /var/log/redmine/access.log combined
RewriteEngine On
RewriteCond %{HTTP_HOST} ^abc\.local
RewriteRule ^/$ http://abc.local/redmine/ [R]
</VirtualHost>
a2ensite redmine.conf
apache2ctl configtest
#Syntax OKを確認
systemctl restart apache2
vi /etc/hosts
192.168.1.30 abc.local
vi /etc/nginx/sites-available/redmine.conf
upstream abc {
server 192.168.1.99:80;
}
server {
listen 80;
server_name abc.local;
server_tokens off;
return 301 https://$host$request_uri;
access_log /var/log/nginx/redmine/access.log;
error_log /var/log/nginx/redmine/error.log warn;
}
server {
listen 443 ssl http2;
server_name abc.local;
server_tokens off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_dhparam /etc/nginx/dhparam.pem;
#openssl dhparam -out /etc/nginx/dhparam.pem 2048 として作成します(環境によっては5分以上かかります)
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;
add_header Strict-Transport-Security 'max-age=63072000';
ssl_certificate /etc/certs/local.crt;
# 証明書のパスに読み替えます
ssl_certificate_key /etc/private/local.key;
# 秘密鍵のパスに読み替えます
access_log /var/log/nginx/redmine/ssl_access.log;
error_log /var/log/nginx/redmine/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_buffer_size 10240m;
proxy_buffers 10 10240m;
proxy_busy_buffers_size 10240m;
proxy_redirect off;
set $proxy_target 'abc';
location / {
proxy_pass http://$proxy_target;
}
}
ln -s /etc/nginx/sites-available/redmine.conf /etc/nginx/site-enabled/redmine.conf
nginx -t
# syntax is ok と test is successfulを確認します
systemctl restart nginx -t
ローカルNWに接続されているクライアントのブラウザから
http://abc.local
にアクセスし、
を確認します。
Powered by WordPress & Theme by Anders Norén