タグ: redmine Page 11 of 15

Lightsail上で稼働するSnipe-ITの後処理。(含むMod_Security連携)

ローカル環境からインターネット環境へと移行した資産構成ツールSnipe-IT。これの後処理を行います。

既存の問題に対処

画像をアップロードしても、このように

“Failed to load image”と出て表示されませんでした。

https://github.com/snipe/snipe-it/issues/8701

そのものズバリのissueを発見。

.envファイルのAPP_URLを「httpから始まるドメイン」に変更してapache再起動にて治りました。

APP_URL=http://ドメイン

常時SSL化とMod_Security連携

そして、同じサーバのredmineにMod_Securityが稼働しているので、こちらも利用しない手はありません。

前提:

こちらの通り、

  • Mod_Security有効化
  • 検知したIPアドレスの抜き出ししてブロックできるようにする

処理を事前に施しています。

confファイル修正

sudo vi /etc/apache2/sites-available/snipeit-le-ssl.conf
confファイル内容
<VirtualHost _default_:80>
ServerName ドメイン名
 RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# 強制的にhttps通信に飛ばします
</VirtualHost>

<VirtualHost *:443>
    ServerName ドメイン名
    CustomLog /var/log/redmine/asset_access.log combined
    ErrorLog /var/log/redmine/asset_error.log
 # redmineのログプラグインで参照できるようにしています

# 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
## 念の為、redmineで偽陽性となったフィルタをそのまま除外するようにしています
    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'"
# エラーログを検知した際に検出した不審なIPアドレスを全てブロックする設定です

    DocumentRoot /var/www/html/snipe-it/public
    <Directory /var/www/html/snipe-it/public>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

  SSLEngine on
    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
SSLHonorCipherOrder On 
SSLOptions +StrictRequire
Header set Strict-Transport-Security: "max-age=31536000; includeSubDomains; preload"

SSLCertificateFile /etc/letsencrypt/live/Let's Encryptで指定したドメイン/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/Let's Encryptで指定したドメイン/privkey.pem

</VirtualHost>

conf反映

sudo a2dissite snipeit.conf
# 最初に設定していたhttp通信のみのconfを無効化します
sudo apache2ctl configtest
# Syntax OKを確認します
sudo systemctl restart apache2

sudo chown www-data:www-data /var/lib/redmine/log/asset*
# redmineのログプラグインが参照できるよう、上記設定したログの所有者を変更します

これにより、常時SSL通信を行いつつ、不正アクセスの脅威をある程度守ることができます。

ThunderbirdとRedmine連携。

メールを元にredmineのチケットを書き起こすパターンが割と発生します。

そんなときに役立つメールクライアント側のプラグインを見つけました。一部動かない機能がありますが、「受信したメールをそのままチケットに起こせる」のはとても便利です。

設定

Redmine側の設定

  1. 管理者権限でログインします。
  2. 管理>設定>APIから以下を有効にしておきます。
    • RESTによるWebサービスを有効にする
    • JSONPを有効にする

APIキーの確認

  1. Redmine > 個人設定 を開きます。
  2. APIアクセスキー > 表示から、出てきた英数字を確認します。

Thunderbirdのアドオンインストール

  1. アドオンマネージャーを開きます。
  2. 「redmine」で検索します。
  3. RedThunderMineBird Plusをインストール後、Thunderbirdを再起動します。

アドオン設定

Thunderbirdのアドオンマネージャー>拡張機能から設定画面を開きます。(スパナアイコン)

アカウントごとのRedmine > 自分のアカウントのラジオボタンをクリックします。

以下を入力して保存します。

  • Redmine URL (自分のRedmineのURL)
  • REST APIキー (先ほど確認したアクセスキー)

また、redmineのテキスト書式を「Markdown」にしている場合は、「説明のテンプレート」の「<pre>」を「```」に変えておきます。

設定確認

メールのプレビューに「Redmine」と出るのを確認します。

「件名と本文でWeb画面を開く」をクリックします。

Redmineが開き、チケット発行画面にメールの件名と本文が流し込まれていることを確認します。

動作未確認の機能

  • 「チケットを作成」「チケットを更新」などがうまく動きません。(設定か、バージョン違いかは不明)

ローカル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の設定ファイルはシンボリックリンクの証明書を参照するようにしています。

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

療養時の“ロギング”。

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

外部からつながるredmine

上述したredmine、

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

記録

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

日毎のチケット

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

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

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

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

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

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のトップページにアクセスし、上記のエラー画像がないことを確認します。

ApacheによるredmineサイトのIPブロック。

事の発端

AWS Lightsailを利用して外部公開しているredmine。(Apache2.4/redmine 4.2)
アクセスログを確認すると以下の不審なIPからログインを試みている痕跡がありました。

これは無差別攻撃を仕掛けられているのでは? と思い、対処を行いました。

以下、その時のメモとなります。

IP アドレスチェック

https://www.abuseipdb.com/

こちらのサイトを利用して、アクセス元のIPアドレスが攻撃を意図しているものかを確認します。

ものの見事に「Confidence of Abuse is 100%」と出ました。

対処方針

ドメイン等を公称していなくても、この手の不正アクセスはついて回ります。
(自分が当初ローカルでredmineを構築したのは、これを避けるためだという明確な理由がありました)

本来なら「指定したIPのみ許可する」ポジティブリストにすべきですが、出先からでもアクセスしたいのでこの方法は使えません。

そこで、今回は対処療法と承知していても「不審なアクセスがあった元をブロックする」ネガティブリスト型で実施します。

参考:
https://notepad-blog.com/content/196/

手順

今回、以下の環境で動作確認をしました。

  • Linux Mint 20.3
  • Apache 2.4
  • redmine 4.2

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

confファイルのバックアップを取ります。

/etc/apache2/sites-available
mkdir ../old
cp -pi redmine.conf ../old/redmine.conf.yyyymmdd
# バーチャルファイルは適宜読み替えてください

confファイルを以下のように修正します。

修正前の箇所
<Location /redmine>
PassengerBaseURI /redmine
PassengerAppRoot /var/lib/redmine
Require all granted
</Location>
修正後の箇所
<Location /redmine>
PassengerBaseURI /redmine
PassengerAppRoot /var/lib/redmine
<RequireAll>
Require all granted
# 2022/05/23 from hoge
Require not ip xxx.xxx.xxx.xxx
</RequireAll>
</Location>
差分
 PassengerBaseURI /redmine
 PassengerAppRoot /var/lib/redmine
+<RequireAll>
 Require all granted
+# 2022/05/23 from hoge
+Require not ip xxx.xxx.xxx.xxx/xx
# ブロックしたいIPを指定
# 後のメンテナンスを考えて、NWアドレス単位で指定します
+</RequireAll>
 </Location>

構文確認後、apacheサービスを再起動します。

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

サービス再起動後、正常に表示されることを確認します。
(最初は自分がアクセスしているIPを指定して「redmineにアクセスできないこと」を確認した方が確実です)

まとめと今後の展望

AWSのACLならGUIでの設定は用意ですが、上述したように、今回の処置は対処療法にすぎません。また、ネガティブリスト型のブロックには限界があります。
他の効率的な方法や、アクセスされても被害の拡大を防ぐ手段を考えていくのが目下の課題です。

「リファレンス」の追加。(redmine_glossary_plugin導入)

概要

  • コマンド一覧
  • ツールの場所

など、50音順で参照して確認したい情報は多々あります。その情報を確認するため、以下のプラグインを導入しました。

redmine_glossary

このように、「用語集」を追加できるプラグインです。

環境

  • LinuxMint 21.03
  • Redmine 4.2
  • Apache 2.4

手順

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

プラグイン配置

cd /var/lib/redmine/plugins
# 各自のplugin配置ディレクトリに読み替えてください
sudo -u wwww-data git clone https://github.com/torutk/redmine_glossary.git
# オリジナルからForkした4.2環境でも動くバージョンです

設定反映

cd ../
bundle install
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
systemctl restart apache2

導入後の設定

  1. 各プロジェクトで「用語集」を有効にします。
  2. 用語を追加していきます。
  3. Wiki記法に沿って画像の挿入も可能です。 

Page 11 of 15

Powered by WordPress & Theme by Anders Norén