カテゴリー: Linux Page 40 of 51

ローカルredmineのSSL更新。

ローカルドメインでもSSL通信を可能にするmkcerts。それだけに有効期限は3ヶ月程度。

それを更新した時の手順です。

前提

こちらのようにSSL化しています。

また、mkcertsは以下の手順でインストールしています。

手順

mkcertsでの証明書更新

mkcert -key-file corn.wall.key.202208 -cert-file corn.wall.crt.202208 corn.wall penzance.corn.wall "*.corn.wall" 
openssl x509 -text -noout -in ./corn.wall.crt.202208 |grep DNS
# DNS:corn.wall, DNS:penzance.corn.wall, DNS:*.corn.wall と、入力したDNS名があることを確認します

こうしてできた証明書と秘密鍵を任意の方法でredmineサーバに転送します。

転送先:

  • 証明書: /etc/certs
  • 秘密鍵:/etc/private

redmineサーバでの更新

証明書の入れ替え

cd /etc/certs/
# apacheの設定ファイルで証明書を格納した場所
unlink corn.wall.crt
ln -s corn.wall.crt.202208  corn.wall.crt

秘密鍵の入れ替え

cd /etc/private/
# apacheの設定ファイルで秘密鍵を格納した場所
unlink corn.wall.key
ln -s corn.wall.key.202208  corn.wall.key

設定反映

apache2ctl configtest
# SyntaxOKを確認
systemctl restart apache2

前提で設定したとおり、apacheの設定ファイルはシンボリックリンクの証明書を参照するようにしています。

したがって、証明書更新の際にはリンクを張り替えるだけで更新ができるという次第です。

GrowiとGmailの連携。

Wiki + Markdownが軽快で新たなツールとなったGrowi。

Gmailでメール送信ができるように設定しました。

前提

Growiは構築済みです。

こちらを元に、Gmailアカウントの設定から、アプリパスワードを発行します。

手順

すべてブラウザ上で行います。また、管理者権限でログインします。

メールの設定画面に遷移します。

管理画面>アプリ設定>メールの設定までs樹住みます。

設定を変更します。

以下の通り変更、入力します。

  • Fromアドレス:任意のアドレスを入力
  • 送信方法:SMTP
  • ホスト:smtp.gmail.com
  • ポート:587
  • ユーザー:Gmailアカウント
  • パスワード:設定したアプリパスワード

設定後、「更新」をクリックします。

メール送信を確認します。

更新後、「テストメールを送信」をクリックし、

こちらのようなメールを受信すれば設定完了です。

療養時の“ロギング”。

本来、別の用途で作っていたこれがはからずも役立ちました。

外部からつながるredmine

上述したredmine、

スケジュールの他に「プロジェクト」に分け、様々なことを記録。Webアクセスできる環境ならばメモができる仕組みを整えていたのが幸いしました。

記録

ここに、以下のようにして、今回の療養について記録をしています。

日毎のチケット

「2022/07/11の記録」といったようにチケットを発行し、

  • 体温測定の記録
  • 食べたもの
  • 体調/症状
  • その他特記事項

を記していくという次第。

これなら、後で検索を行えますし、症状の改善/悪化を追うことができます。

なにより、この「療養」も立派なプロジェクトの一つ。成功と完遂を祈るばかりです。

メモ帳、追加。(UbuntuにGrowi導入)

以前、Dockerでいじっていたツールが思いの外有用そうだったので、オンプレ環境で作りました。

導入:Growi

いわゆるナレッジベースツールです。すでに

すでにknowledgeベースは入れているものの

  • 階層化でWikiを作ってくれる
  • エディタ周りが高機能
  • 日々の記録に便利そう

ということで、早速入れてみます。

インストールした環境

  • Chuwi Herobox Pro

既に以下の環境を導入済み

  • Linux 20.04
  • Apache
  • MySQL
  • Zabbix
  • WebアルバムLychee

参考にした記事:
https://qiita.com/BigTree777/items/4a67d36c4111a1fb50e7

手順

Node.jsをインストールします。

cd /hoge/
curl -sL https://deb.nodesource.com/setup_14.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt install nodejs

npmを用いてyarnをインストールします。

sudo npm install -g yarn

Elasticsearchのインストール

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch

Elasticsearchのメモリ変更

sudo vi /etc/elasticsearch/jvm.options
設定ファイル
# 任意の行に以下を追加
-Xms256m
-Xmx256m

ElasticSearchの自動起動有効化

sudo su -
systemctl start elasticsearch
systemctl enable elasticsearch

GROWIに必要なプラグインのインストール

sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu

MongoDBのインストール

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt update
sudo apt install -y mongodb-org=4.4.13 mongodb-org-server=4.4.13 mongodb-org-shell=4.4.13 mongodb-org-mongos=4.4.13 mongodb-org-tools=4.4.13

MongoDBのバージョン固定

※これをやらないと全文検索がうまくいかないとのこと

echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

GROWIのインストール

sudo git clone https://github.com/weseek/growi /opt/growi
cd /opt/growi

sudo git checkout -b v5.0.5 refs/tags/v5.0.5
sudo yarn

以降、参考にした記事:
https://qiita.com/hawk777/items/0916024c1bd7b24904ae

systemdスクリプトの作成

sudo vi /etc/systemd/system/growi.service
スクリプト内容
[Unit]
Description = growi
After=network-online.target mongod.service
ConditionPathExists=/opt/growi

[Service]
ExecStart=/opt/growi/growi-start.sh
Restart=no
Type=simple

[Install]
WantedBy=multi-user.target
chown root:root /etc/systemd/system/growi.service
chmod 644 /etc/systemd/system/growi.service

起動スクリプトの作成

sudo vi /opt/growi/growi-start.sh
スクリプト内容
#!/bin/sh
cd /opt/growi
MONGO_URI=mongodb://localhost:27017/growi \
ELASTICSEARCH_URI=http://localhost:9200/growi \
MATHJAX=1 \
PASSWORD_SEED=[任意の文字列] \
npm start

権限変更

sudo chmod +x /opt/growi/growi-start.sh

デーモン化、起動確認

sudo systemctl daemon-reload
sudo systemctl start growi.service
sudo systemctl status growi.service

※起動するまで5分ぐらいかかりました。

起動後、http://[アドレス]:3000

でログインできました。

2022年上半期、買ったもの。

2022年もいよいよ折り返し。

今年は結構大きめの買い物がありました。

OLYMPUS E-P7

「オリンパスのカメラを手に虹を撮る」初夢がきっかけで以前使っていたカメラを引っ張り出したら「このレンズの魅力は引き出せる」思い、カメラも新調。

  • 多彩なフィルター
  • 圧倒的な軽さ

と、街歩きにもってこいなカメラです。

iPad mini 6 & Apple Pencil

これはリプレースしたもの。特にApple Pencilは「側面につければそのまま充電」により、運用がとても楽になりました。

また、大容量ストレージにより電子書籍閲覧も快適です。

Chuwi Herobox

こちらは「新たなインフラ基盤」です。redmineによるスケジュール管理や各種データの保存がとても便利だったので専用機を導入。

  • コンパクトで
  • ディスプレイの裏にマウントでき
  • ファンレスの静音設計

と、家庭内サーバに求められる機能を全て持っていて、

  • Redmine
  • ローカルDNS
  • Webアルバム
  • Zabbix

を入れて自宅内のサーバ機能が充実しました。

Chromebook Duet 560

こちらは今月。

こちらは店頭で見かけて即買ったというもの。キックスタンド型やらmicroSDスロットがついてないなど、自分が最初にChromebookを買ったときの要件から外れていましたけれど

  • 8GB / 256GBの高性能
  • 臨場感たっぷりのサウンド
  • 視野角が広くベゼルが狭いために没入感たっぷり

と、出先でのエンタメにもジウうに分な活躍を見せています。

と、以上4つ。下半期もどんなガジェットに会えるのやら。

Mod Securityが検知したIPアドレスの抜き出し。

やりたいこと

Mod Securityを導入してから、不正アクセスがerror.logに現れるようになりました。
そのアドレスをネガティブリストに放り込むことで後続のアクセスをブロックする方法は設定しました。

そこで、

  • 日ごとにerror.logで検知したログを確認し
  • IPアドレスのみを抜き出してリスト化する

設定を行います。

環境

  • Ubuntu 20.04(Linux Mint)
  • Apache 2.4
  • Mod Security

※ログは/var/lib/redmine/log に格納されています。

手順

一般ユーザで実施します。

参考:

https://linux.just4fun.biz/?%E9%80%86%E5%BC%95%E3%81%8DUNIX%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89IP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E3%81%BF%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B

apacheのerror.logからIPアドレスを抜き出します。

cd /var/lib/redmine/log
cat error.log | awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) { print  substr($0, RSTART, RLENGTH) }'
# IPアドレスのみ表示されることを確認。

IPアドレスを並べ替え、重複を除外します。

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
# 一意のアドレスのみが表示されることを確認。

自動実行するスクリプトを作成します。

cd /hoge/
vi negativelist.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.`date +%Y%m%d`

スクリプトに実行権限を付与します。

chmod +x negativelist.sh

日ごとに実行されるように設定します。

sudo su -
crontab -u www-data -e
# redmineのログプラグインで閲覧できるよう、apache実行ユーザのcronを編集します
cron内容
0 8 * * * /hoge/negativelist.sh

これで、「Mod Securityが不正アクセスと見なしたIPアドレスを日ごとに抜き出す」仕組みが整いました。

(シェルスクリプトで指定したディレクトリ内に、suspicious_ip.yyyymmdd というファイルが作成されます。
 また、/var/lib/redmine/log 配下に置くことで、redmineのログプラグインで表示することができます。)

直接ネガティブリストに追記しないのは、偽陽性で自分自身がブロックされるのを防ぐためです。

Mod SecurityによるIPアドレスブロック。(ネガティブリスト型)

攻撃の兆候

Mod Securityを導入して一昼夜――

公表していないURLであるにも関わらず、しっかりと攻撃の予兆がログに現れました。

※この方法で、サーバにアクセスすることなく、redmineへのログを一元管理しています。

この、不正アクセスの予兆を示したアクセス元を調べると

Torから来ている望ましくないものまであり、昨今の驚異を嫌でも感じずにいられません。

そこで、Apacheの設定ファイルではなくMod Securityの機能を用いてIPアドレスを遮断していきます。

参考:

Apache×Mod SecurityでカンタンWAF構築

https://qiita.com/m0nch1/items/ac7255399366fb113a82

環境

  • Ubuntu 20.o4 (Linux Mintでも同様)
  • Apache 2.4
  • Mod Security導入済み

手順

すべて管理者権限で実施しています。

バーチャルファイル編集

vi /etc/apache2/sites-available/VIRTUALHOST.conf
# 使っているバーチャルファイルに読み替えます
追記内容
## Negativelist
SecRule REMOTE_ADDR "@pmFromFile negativelist.txt" "phase:1,id:2,deny,msg:'Negativelisted IP address'"

ネガティブリスト作成

vi /etc/etc/apache2/sites-available/negativelist.txt
ネガティブリストの内容
XXX.XXX.XXX.XXX
YYY.YYY.YYY.YYY
#ブロックしたいIPアドレスを記入していきます
# 設定確認のため、自分自身のアクセス元を記入しました

ネガティブリスト反映

cd /etc/apache2/site-enabled
ln -s ../sites-available/negativelist.txt negativelist.txt
# 設定ファイルの位置を明示していないのでシンボリックリンクを張ります

設定変更

apache2ctl configtest
#Syntax OK を確認します
systemctl restart apache2

設定確認

上記手順で、「自分自身をブロックする」設定を入れ、redmineにアクセスして「403」が返ってくることとエラーログにその旨が記録されていることを確認。(その後、このアドレスは削除しています)

今後の展望

  • 不正アクセスを検知したらそのIPアドレスを自動的に追記する
  • 数が増え続けるため、いっそのことポジティブリストに切り替える

などが必要になってきます。

Apache + redmine環境にMod Security導入。

インターネット環境に構築したredmineに不正アクセスが飛んでくるというエントリーを投稿したところ、

「Mod Security導入も一つの手」

というコメントをいただき、早速導入することにしました。

環境

  • Ubuntu 20.04 (Linux Mintでも動作確認済み)
  • Apache 2.4

参考

インストール方法

全て管理者権限で実施しました。

システム全体のアップグレード

aptitude update
aptitude upgrade

Ubuntu 20.04にMod Securityをインストールします。

aptitude install libapache2-mod-security2
systemctl restart apache2

ModSecurity 設定ファイル/ディレクトリをコピーしていきます。

cp -pi /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
cd /tmp
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
cd /owasp-modsecurity-crs
cp -pi crs-setup.conf.example /etc/modsecurity/crs-setup.conf
cp -pir rules/ /etc/modsecurity/

ModSecurityの設定を行います。

vi /etc/apache2/mods-available/security2.conf
設定ファイル内容
<IfModule security2_module>
   # Default Debian dir for modsecurity's persistent data
   SecDataDir /var/cache/modsecurity

   # Include all the *.conf files in /etc/modsecurity.
   # Keeping your local configuration in that directory
   # will allow for an easy upgrade of THIS file and
   # make your life easier
   IncludeOptional /etc/modsecurity/*.conf
   Include /etc/modsecurity/rules/*.conf
</IfModule>

設定反映

systemctl restart apache2

redmine設定ファイル修正

vi /etc/apache2/sites-available/VIRTUALHOST.conf
# 各自のバーチャルホストファイルに読み替えます
追記内容
# Mod Security
SecRuleEngine On
## ModSecurity有効化
SecRequestBodyInMemoryLimit 524288000
SecRequestBodyLimit 524288000
## ファイルのアップロードをできるようにします。
SecRuleRemoveById 949110
SecRuleRemoveById 941310
SecRuleRemoveById 980130
SecRuleRemoveById 911100
SecRuleRemoveById 200002
SecRuleRemoveById 200003
## 上記を無効化しないとチケット更新時にエラーとなりました(偽陽性)ため、上記ルールを除外します。
    SecRule ARGS:modsecparam "@contains test" "id:4321,deny,status:403,msg:'ModSecurity test rule has triggered'"
## テスト用の検知パラメータを付け加えます。

設定反映

systemctl restart apache2

設定確認

ブラウザから

http://your-site-domain/redmine/?modsecparam=test

にアクセスし、「Forbidden」が表示されることを確認します。

また、

  • チケットの更新ができること
  • ファイルのアップロードができること

をそれぞれ確認しました。

redmineにショートカット機能を追加 。(プラグインredmine_shotrcutsを導入)

概要

「ありそうでなかった」というよりも「導入後、これなしでは考えられない」レベルに達したいいプラグインを手に入れました。

タイトルにあるように、Redmineにキーボードショートカットを追加するプラグインです。

環境

  • LinuxMint 21.03
  • Redmine 4.2
  • Apache 2.4

手順

全て管理者権限で実施しました。

プラグイン配置

cd /var/lib/redmine/plugins
# 各自のplugin配置ディレクトリに読み替えてください
sudo -u www-data git clone https://github.com/davidegiacometti/redmine_shortcuts.git

設定反映

systemctl restart apache2

導入後の設定

特にありません。導入後、redmineのトップページに

Redmine shortcuts

と表示されます。こちらをクリックすると

と、ショートカットのサマリーが表示されます。

特に便利だと思ったのがMarkdown記述をするときのショートカット。

強調したい文章を囲み、「Ctrl + B」すると

自動的にMarkdownを補完してくれます。さながら、redmineが高機能エディタとして使えるわけです。

redmineプラグイン起因のエラー解消。(プラグインアンインストール)

概要

redmineはプラグインによる機能追加が最大の魅力。ですが、導入後、

  • バージョンが合わない
  • 他のプラグインとの相性
  • DBやOSの環境

により、画像のようなエラーが多々発生して全てのページが閲覧できない事象が発生します。

今回、それらを解消する方法をメモとして記載します。

手順

全て管理者権限で実施しました。

プラグインアンインストール

cd /var/lib/redmine/plugins
# 各自のplugin配置ディレクトリに読み替えてください
 bundle exec rake redmine:plugins:migrate NAME=[プラグイン名] VERSION=0 RAILS_ENV=production

プラグインのディレクトリ削除

cd /var/lib/redmine/plugins
# 各自のplugin配置ディレクトリに読み替えてください
rm -rf [プラグイン格納ディレクトリ]
systemctl restart apache2

アンインストール後の確認

redmineのトップページにアクセスし、上記のエラー画像がないことを確認します。

Page 40 of 51

Powered by WordPress & Theme by Anders Norén