こちらののれん、とても使い勝手が良かったので
もう一つ足すことに決定です。この「のれん」には鰻屋のものもあったので
漫画のシーンを少し再現といったところです。
また、先のリンク先でも上げたのれんやら看板はどちらかというと昭和的な雰囲気が漂うので
昭和のキャラクターにも合うことが改めて判明です。
こちらののれん、とても使い勝手が良かったので
もう一つ足すことに決定です。この「のれん」には鰻屋のものもあったので
漫画のシーンを少し再現といったところです。
また、先のリンク先でも上げたのれんやら看板はどちらかというと昭和的な雰囲気が漂うので
昭和のキャラクターにも合うことが改めて判明です。
このワイルドカード証明書発行は自動発行ではありません。また、ローカル証明書としても保存したいので結構やることがあります。
redmineのチケットテンプレートとすることで、手順をチケットに流し込むことにしました。
一度作ってしまえば後は新規チケットとして発行し、それに沿って行けば抜け漏れがありません。(redmineのリマインド機能も利用します)
また、テンプレートそのものを直すことで後の手順変更にも対応可能です。
### 概要
Let's EncryptのSSLワイルドカード証明書を発行して更新する。
### 実施時期
毎年
- 3月
- 6月
- 9月
- 12月
### 実施手順 (AWS Lightsailサーバ)
#### 作業ディレクトリ作成
```bash
mkdir -p /home/work/ssl$(date +%Y%m)
cd /home/work/ssl$(date +%Y%m)
```
#### 証明書発行
```bash
sudo certbot certonly --manual \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory \
-m メールアドレス \
-d *.sample.domain
```
1. コマンド発行後、TXTレコードの登録指示がある。
1. AWS管理コンソールにログインする
1. 指示があったTXTレコードを登録
1. 以下のコマンドで結果が返ってくるまでしばらく待つ
```bash
nslookup -type=TXT _acme-challenge.sample.domain
```
→ 結果が返ってきたらEnter。証明書が更新される。
#### 証明書を作業ディレクトリにコピー
```bash
sudo cp -pi /etc/letsencrypt/live/sample.domain-0001/fullchain.pem ./sample.domain.crt.$(date +%Y%m)
sudo cp -pi /etc/letsencrypt/live/sample.domain-0001/privkey.pem ./sample.domain.key.$(date +%Y%m)
```
#### 証明書の整合性を確認
```bash
openssl x509 -noout -dates -subject -in sample.domain.crt.$(date +%Y%m)
# 期限が延びていることを確認
openssl x509 -in sample.domain.crt.$(date +%Y%m) -noout -modulus | md5sum
openssl rsa -in sample.domain.key.$(date +%Y%m) -noout -modulus | md5sum
# 証明書-秘密鍵のハッシュ値が同じであることを確認
openssl x509 -issuer_hash -noout -in sample.domain.crt.$(date +%Y%m)
sed -n -e'1d' -e'/BEGIN/,$p' sample.domain.crt.$(date +%Y%m) | openssl x509 -subject_hash -noout
# 証明書-中間証明書の発行元のハッシュ値が同じであることを確認
```
### 実施手順 (apache/nginxサーバ)
#### 証明書を格納する(nginx/apache共通)
ここからは管理者権限で実施する。
```
cd /etc/certs/
# 証明書ファイルを格納したディレクトリに移動します
vi sample.domain.crt.$(date +%Y%m)
# AWSサーバで発行した証明書を貼り付けます
ls -l
# *以下を確認します*
# 更新したLet's Encyrptの証明書ファイルがあること
# 証明書のシンボリックリンクの向き先が前回更新年月であること
ln -sf sample.domain.crt.$(date +%Y%m) sample.domain.crt
ls -l
# *以下を確認します*
# 証明書のシンボリックリンクの向き先が*今回*更新年月であること
```
#### 秘密鍵を格納する(nginx/aapche共通)
```bash
cd /etc/private
# SSL秘密鍵を格納したディレクトリに移動します
vi sample.domain.key.$(date +%Y%m)
# AWSサーバで発行した秘密鍵を貼り付けます
ls -l
# *以下を確認します*
# 更新したLet's Encyrptの秘密鍵ファイルがあること
# 証明書の秘密鍵の向き先が前回更新年月であること
ln -sf sample.domain.key.$(date +%Y%m) sample.domain.key
ls -l
# *以下を確認します*
# 証明書の秘密鍵の向き先が*今回*更新年月であること
```
#### 設定反映
##### nginxの場合
```bash
nginx -t
# syntax is okを確認
systemctl restart nginx
systemctl status nginx
# 再起動後、正常に稼働していることを確認
```
##### apacheの場合
```bash
apache2ctl configtest
# Syntax okを確認
systemctl restart apache2
systemctl status apache2
# 再起動後、正常に稼働していることを確認
```
#### 反映確認
ブラウザで証明書が延びていることを確認
こちらにより、apacheのバーチャルファイルをAIで作成できると知り、そこから更に発展させました。
こちらのスクリプトで抜き出したIPアドレスを、
のように、ネットワークアドレスにした上でNWごとにブロックできないかと思い立ち、その前段として「IPをソートしてネットワークアドレスを付与できないか」
と、以下のようにして書いてもらいました。
192.168.1.3
192.168.1.2
10.0.0.2
10.3.3.2
10.3.3.254
172.28.3.4
172.28.3.5
などのIPアドレスが書かれたテキストファイルip.txtがあります。
これを読み込んだ後にソートして
192.168.1.0/24
192.168.1.0/24
10.0.0.0/24
10.3.3.0/24
10.3.3.0/24
172.28.3.0/24
172.28.3.0/24
とネットワークアドレスに変換後、
10.0.0.0/24
10.3.3.0/24
172.28.3.0/24
192.168.1.0/24
と重複を排除し、アドレスごとに改行した上でnetwork.txtに出力するシェルスクリプトを書いてください。
以下のようなシェルスクリプトを作成することで、指定した要件を満たすことができます。
#!/bin/bash
# ip.txtを読み込んで、1行ごとに処理する
while read line; do
# IPアドレスを/24のサブネットマスクで分割する
network=$(echo "$line" | cut -d "." -f 1-3).0/24
# 分割したサブネットアドレスを出力する
echo "$network"
done < ip.txt | sort | uniq > network.txt
上記のスクリプトでは、ip.txt
を読み込んで1行ごとに処理しています。
その後、cut
コマンドを使用して、IPアドレスを"."で分割し、最初の3つのフィールドを取り出します。
最後に、取り出したフィールドに".0/24"を追加して、サブネットアドレスを生成します。
生成したサブネットアドレスをsort
コマンドでソートし、uniq
コマンドで重複を除外した上で、network.txt
に出力するようにしています。
以下、作成しました。
vi script.sh
# 上記のスクリプトを貼り付けて保存
chmod +x script.sh
# 平行してIPアドレスを抜き出したip.txtを用意します
./script.sh
で、予想通りの出力が得られました。
後は少しずつ応用していけば、まるごとブロックしたり他のセキュリティソフトとの連携も可能になります。
この記事の続きとなります。
につづき、ちょっとした検証を行いました。
figmaとねんどろいどのライザを併せて撮ったものの、最初のテイクはものの見事に失敗。
全体の距離が合っていません。そこで
そこで、ピントが合うように両者の距離を合わせたところ、両方とも顔がクリアに写せました。
ラジコンのミニを用いましたけれども、こちらも印象がぼやけます。特に右後方に光が回っていません。
そこで、figmaと併せるのではなく別のねんどろいどと並べ、ミニの「目線」と併せてみました。
被写体、風景、レンズが並ぶと検証項目が多くなります。
以下の環境でZabbixを導入してみましたが、いくつかハマったことがあったのでメモを残しておきます。
aptitude update
aptitude upgrade
wget https://repo.zabbix.com/zabbix/6.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.2-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.2-1+ubuntu22.04_all.deb
aptitude update
aptitude install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
aptitude install mysql-server
systemctl start mysql
systemctl enable mysql
vi /etc/mysql/mysql.conf.d/mysqld.cnf
#末尾に以下を追加
default_authentication_plugin=mysql_native_password
systemctl restart mysql
mysql -u root -p
# 未設定のためパスワードは不要です
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード';
#パスワードは任意のものを入力ください
flush privileges;
exit
mysql_secure_installation
Enter password for user root:
# 上記で設定したパスワードを入力します
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No:
# Yを入力してEnter
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
# ポリシーに合わせて0/1/2を入力(ローカル環境のため0としました)
Estimated strength of the password: 50
Change the password for root ? ((Press y|Y for Yes, any other key for No) :
# 既に設定しているのでn
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) :
# anonymousユーザーを削除するためY
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
# rootユーザのリモートログインを禁止するためY
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
# テストDBを削除するためY
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
# 設定を反映するためy
mysql -uroot -p
# 上記で設定したパスワードを入力します
CREATE DATABASE zabbix character set utf8mb4;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'パスワード';
# 任意のパスワードを設定
GRANT ALL ON redmine.* TO 'zabbix'@'localhost';
flush privileges;
exit
ERROR 1419 (HY000) at line 2123: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
と出たので、設定をしておきます。
mysql -uroot -p
rootでmysqlにログイン後、以下を実行します。
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
# OFF を確認
set global log_bin_trust_function_creators=1;
# 設定を有効化
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
# ONを確認
Webサイトの手順によると、
zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
とありますが、該当ディレクトリにmysql用のSQLが存在しません。
apt reinstall zabbix-sql-scripts
として、sqlを再インストールします。
updatedb
locate server.sql.gz
→ /usr/share/zabbix-sql-scripts/mysql/server.sql.gz
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
# zabbixのDBパスワードを入力します。
vi /etc/zabbix/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
vi /etc/zabbix/nginx.conf
listen 443 ssl http2 default_server;
# ポートを443のみで受け付けるようにします。
server_name ドメイン名;
ssl_certificate "/SSL証明書と中間証明書を結合したファイル";
ssl_certificate_key "秘密鍵ファイル";
ssl_protocols TLSv1.2 TLSv1.3;
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:ECDHE-RSA-AES128-SHA";
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
nginx -t
# Syntax OKを確認します
systemctl restart zabbix-server zabbix-agent nginx php8.1-fpm
systemctl enable zabbix-server zabbix-agent nginx php8.1-fpm
ブラウザから
が表示されれば問題ないです。その後、Next Stepに進んでください。
Powered by WordPress & Theme by Anders Norén