我が家に猫たちがやって来ました。

現行の猫と同じくスコティッシュフォールド。しかも
- 男の子
- 女の子
両方ともサバトラの折れ耳です。
我が家に来て思ったのが、昨年の3月末、虹の橋を渡っていた茶トラの子の子猫時代と面影が重なっているということ。

俗に「着替えて帰ってくる」と言われていますが、まさにそんな言葉を実感しています。
我が家に猫たちがやって来ました。

現行の猫と同じくスコティッシュフォールド。しかも
両方ともサバトラの折れ耳です。
我が家に来て思ったのが、昨年の3月末、虹の橋を渡っていた茶トラの子の子猫時代と面影が重なっているということ。

俗に「着替えて帰ってくる」と言われていますが、まさにそんな言葉を実感しています。
RHEL系Linuxに備わっているfirewalld。非常に柔軟で(比較的)直感的に使える仕組みだったのでメモを残します。
特に驚きだったのがzoneの概念。
ufwが基本的に「システム全体に対してポートを開けるか閉じるか」をシンプルに管理するのに対し、firewalldは「接続するネットワークの信頼度に応じて、ファイアウォールのルールを瞬時に切り替える」という柔軟性がありました。
一言で言うと、ゾーンとは「接続元のネットワークやインターフェース(LANカードなど)の『信頼度』に応じたグループ分け」のことです。
従来の iptables などでは、「このIPアドレスからのこのポートへの通信を許可する」といった細かいルールを1つずつ書く必要があります。
一方、firewalld では以下のようなステップで考えます。
eth0)や、特定のIPアドレスをその箱に割り当てます。これにより、「カフェのWi-Fiに繋いだ時は『パブリック』ゾーンに切り替える」「会社のLANに繋いだ時は『社内』ゾーンに切り替える」といった管理が、一瞬でできるようになります。
firewalld には、最初からいくつかのゾーンが用意されています。
| ゾーン名 | 信頼度 | 主な用途・特徴 |
|---|---|---|
drop | 最低 | すべての受信パッケージを破棄します(応答すら返さない)。こちらからの送信は可能です。 |
block | 低 | すべての受信を拒否します。drop と違い、相手に「拒否しました」という通知(ICMP)を返します。 |
public | 低〜中 | デフォルトのゾーン。 不特定多数がいる公共のネットワーク用。自分が許可した通信(sshなど)だけを通します。 |
external | 中 | ルーターとして使う場合の「外側(インターネット側)」用。マスカレード(NAT)が有効になります。 |
**home / internal** | 高 | 自宅や社内LANなど、周囲のコンピューターを信頼できる場合用。お互いの通信が少し緩く許可されています。 |
trusted | 最高 | すべてを許可します。完全に安全だと分かっているネットワーク専用です。 |
ネットワークカード(eth0 や wlan0 など)は、必ずいずれか1つのゾーンに紐付けられます。何も設定していない場合、自動的に public(デフォルトゾーン)に属します。
「インターフェース全体は public だけど、上司のPCのIPアドレス(192.168.1.50)だけは trusted ゾーンとして扱う」といった柔軟な設定が可能です。
「Webサーバー(80番ポート)を開放したい」となったら、「public ゾーンに対して80番ポートを許可する」というように、ゾーンに対して設定を紐付けます。
『ジョジョの奇妙な冒険』第5部における『マン・イン・ザ・ミラー』です。
ここには『スタンド力』は おれの許可なくしては入る事はできない
『おまえ本体』だけ入る事を許可した
ここにある物は全て命のない『物質』だけだ―――おまえとオレだけ!他に『生きてる物』はいない………
という「許可」と「許可しない」を、鏡の世界ではなく「ゾーン」ごとに決められる能力、と言っていいでしょう。
ゾーンの状態を確認・操作するための、代表的な firewall-cmd コマンドです。
firewall-cmd --get-default-zone
firewall-cmd --list-all-zones
firewall-cmd --zone=home --change-interface=eth0
firewall-cmd --zone=public --add-service=http --permanent
`
--permanent をつけた後は、設定を反映させるために以下が必要ですfirewall-cmd --reload
Linuxサーバーを構築する際は、まず「このサーバーはどこに置かれていて、どのゾーンを適用すべきか」を考えていきましょう。
そのケーススタディを行っていきます。
各部署が持っているサーバを管理するためシステム部が一括でzabbixのエージェントを入れたいという状況。
まずは 192.168.1.0/24 だけが所属する専用のゾーン illuso を作ります。
sudo firewall-cmd --permanent --new-zone=illuso
sudo firewall-cmd --reload
作成したゾーンに「部内NWのIPセグメント」を紐付ける
sudo firewall-cmd --permanent --zone=illuso --add-source=192.168.1.0/24
Step 1 で作ったゾーンに、ssh, http, https の鍵(許可)を配置します。
sudo firewall-cmd --permanent --zone=illuso --add-service=ssh
sudo firewall-cmd --permanent --zone=illuso --add-service=http
sudo firewall-cmd --permanent --zone=illuso --add-service=https
社内のZabbixサーバー(192.168.12.6)だけが所属する man-in-the-mirror を作り、Zabbix Agent用の 10050 ポートを許可します。
sudo firewall-cmd --permanent --new-zone=man-in-the-mirror
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --zone=man-in-the-mirror --add-source=192.168.12.6
sudo firewall-cmd --permanent --zone=man-in-the-mirror --add-port=10050/tcp
public の掃除誰からでも受け付ける Zabbix Server(10051)や SMTP(25)を public に設定し、同時に、先ほど部内限定へお引越しさせた不要なサービス(ssh, http, https)を public から削除します。
sudo firewall-cmd --permanent --zone=public --add-port=10051/tcp
sudo firewall-cmd --permanent --zone=public --add-service=smtp
sudo firewall-cmd --permanent --zone=public --remove-service=ssh
sudo firewall-cmd --permanent --zone=public --remove-service=http
sudo firewall-cmd --permanent --zone=public --remove-service=https
ここまでの --permanent(次回起動用の設定)を、一気に本番環境へ反映(リロード)させます。
sudo firewall-cmd --reload
反映が完了したら、正しく設定できているか各ゾーンを覗いてみましょう。
sudo firewall-cmd --zone=illuso --list-all
sudo firewall-cmd --zone=man-in-the-mirror --list-all
sudo firewall-cmd --zone=public --list-all
以上、手順は多いものの
を極めて柔軟に行えるのはRHEL系Linuxの持つ特権だと思いました。とはいえ、
この条件は「これから入ろうとする邪魔者」を拒否するには有効ですが、入ってしまったものを取り除くのは極めて厄介です。とくにウィルス(マルウェア)の除去は
『マン・イン・ザ・ミラー』オレだけが外に出る事を許可しろォォォォーーーーッ
うおおおががががが だが! ウイルスは許可しないィィィィィーーーッ
感染した部分は出る事は 許可しないィィィィィィィーーーッ!!
とはならないので注意が必要です。
(最後のこれが言いたいだけのエントリーを書き終えました)
昨日設定したfailbanとの連携。ufw.aggressive。
結論から言うと「あまりにも閾値が低すぎて自分自身がロックアウトを喰らう」結果になりました。
自分のIPからのアクセスが全てのサービスにつながらなくなった。
これはSSH接続はのみならずWeb閲覧でも弾かれるを意味します。
取り急ぎ、「確実にignoreipされている」場所からアクセスし、
sudo fail2ban-client status ufw
をしたところ、ものの見事にアクセスしていたIPアドレスが含まれています。
そのため、
sudo fail2ban-client set ufw unbaip IPアドレス
として条件を解除。
そんな中で見つけた挙動。Redminetneは比較的単純な通信が発生するため、
[ufw]
enabled = true
filter = ufw-aggressive
action = iptables-allports
logpath = /var/log/ufw.log
maxretry = 1
bantime = -1
# ignoreipには、自分自身のローカルホストと、巻き添えを防ぎたい大手検索エンジン(Googlebotなど)のIP帯を指定します
では、大量のretryが発生し、fail2banはご丁寧に「こいつは大量アクセスを繰り返している」としてban。更に、当然ながら、iptables-allportsが含まれているため、自分自身が締め出しを食らったという次第。
「閾値の緩和」に尽きます。「人間の通常の作業は問題ないがbotが引っかかる」を目安に修正しました。この時の注意点は 対象サイトに過度にアクセスしないことに尽きます。iptablesと手を組んでいる以上、無効の怒りを買わないよう、接続はSSHのみにとどめます。
修正ファイル /etc/fail2ban/jail.local
[ufw]
enabled = true
filter = ufw-aggressive
action = iptables-allports
logpath = /var/log/ufw.log
# ↓ 1 から 30 〜 50 程度に大幅緩和(ボットは防げて人間は誤検知しない絶妙なライン)
maxretry = 50
# ↓ 10分〜15分(600〜900秒)の間に規定回数叩いたらアウトにする
findtime = 900
bantime = -1
# ignoreipは、自分が今アクセスしているIPを真っ先に入れます
ignoreip = 127.0.0.0/8 ::1
設定後、
sudo fail2ban-client reload
を実行して設定完了。
を操作して通常通りの作業が行えることを確認。
今回、慌てずに作業できていたのが「どこからアクセスすれば安全か」を知っていたこと。
「頑固で融通が利かない門番」
を意図通りに動かすためには、門番が動く条件をきちっと動かす必要があるというお話でした。
インターネット上にWebサーバーを公開すると、ものの数分で世界中から自動スキャンやブルートフォースアタック(総当たり攻撃)の嵐に見舞われます。
アクセス元のIPアドレスが固定されていれば接続元を絞れますが、「自宅や出先からリモートアクセスして作業する」場合、ファイアウォールの門を広く開けざるを得ません。
この記事では、そんな環境でもサーバーを鉄壁に守るため、UFW(ファイアウォール)とFail2ban(ログ監視型自動遮断ツール)を組み合わせ、不審者を検知した瞬間に「すべてのポートから永久追放(永久BAN)」する強力なネットワーク保護の設定手順を解説します。
まずは不要なポートをすべて閉じ、必要な通信だけを通す基本的な防壁を作ります。
単なる許可(allow)ではなく、短時間の連続アクセスを制限する limit を使うことで、ブルートフォースアタックの速度を鈍らせます。
sudo ufw limit proto tcp from any to any port 22
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Ubuntuのデフォルト(low)では、UFWが自動で弾いた不審なアクセスのログが残りません。これではFail2banが検知できないため、ログレベルを medium に引き上げます。
sudo ufw logging medium
※ この作業は何度やっても心臓に悪い作業です。
を確実に確認してから作業を行います。
sudo ufw enable
注意:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?と聞かれたら、落ち着いてyを入力して続けます。
sudo ufw status verbose
以下のように、状態が「アクティブ(ロギング: on (medium))」になり、ルールが適用されていることを確認します。
状態: アクティブ
ロギング: on (medium)
Default: deny (incoming), allow (outgoing), deny (routed)
To Action From
-- ------ ----
22/tcp LIMIT Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
22/tcp (v6) LIMIT Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
sudo reboot で再起動し、再起動後も接続できることを確認します。ログを監視して自動でブロックする必須ツールです。
sudo aptitude update && sudo aptitude install fail2ban
筆者の好みでaptitudeを用いています。
systemctl status fail2ban.service
active (running) と表示されていればOKです。
UFWの拒否ログ([UFW BLOCK])をFail2banに認識させるための判定ルールを作成します。
※Ubuntu 24.04環境の仕様に合わせ、フィルターファイル名は ufw-aggressive.confとします。
sudo tee /etc/fail2ban/filter.d/ufw-aggressive.conf > /dev/null << 'EOF'
[Definition]
failregex = \[UFW BLOCK\].+SRC=<HOST> DST
ignoreregex =
EOF
Fail2banの挙動を定義するローカル設定ファイルを作成します。
以下のファイルを教義・信仰に沿ったエディタで編集します。
/etc/fail2ban/jail.local
[ufw]
enabled = true
filter = ufw-aggressive
action = iptables-allports
logpath = /var/log/ufw.log
maxretry = 1
bantime = -1
# ignoreipには、自分自身のローカルホストと、巻き添えを防ぎたい大手検索エンジン(Googlebotなど)のIP帯を指定します
ignoreip = 127.0.0.0/8 ::1 66.249.64.0/19
[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
# ignoreipには、自分自身のローカルホストと、ある程度回線が固定されているIP帯を指定します。
bantime = -1:
maxretry = 1(ufwセクション):
action = iptables-allports:
ignoreip = ... 66.249.64.0/19:
maxretry = 1 は強力すぎるため、Webサイトを巡回するGoogleのクローラー(Googlebot)を誤って永久追放しないよう、あらかじめホワイトリストで保護しています。設定が完了したら、Fail2banに読み込ませます。
sudo fail2ban-client reload
設定してわずか数分〜数十分。ログファイル(/var/log/fail2ban.log)を覗いてみると、その効果は一目瞭然です。
2026-05-17 07:14:26,476 fail2ban.filter [1720]: INFO [ufw] Found xxx.xxx.xxx.xxx
2026-05-17 07:14:26,623 fail2ban.actions [1720]: NOTICE [ufw] Ban xxx.xxx.xxx.xxx
2026-05-17 07:14:44,198 fail2ban.filter [1720]: INFO [ufw] Found yyy.yyy.yyy.yyy
2026-05-17 07:14:44,647 fail2ban.actions [1720]: NOTICE [ufw] Ban yyy.yyy.yyy.yyy
世界中から飛んでくる不審なアタックやスキャンを、Fail2banが次々と検知し、その場で息の根を止めて(Ban)くれているのが分かります。
現在の捕獲状況は、以下のコマンドでリアルタイムに確認できます。
sudo fail2ban-client status ufw
インターネットの荒波に晒されているサーバーであれば、10分も経たないうちに数十〜100以上の悪質なIPアドレスが Banned IP list: に積み上がっていきます。
万が一、設定ミスなどで必要なIPをBANしてしまった場合は、以下のコマンドで個別に救出(BAN解除)が可能です。
sudo fail2ban-client set ufw unbanip <解除したいIPアドレス>
固定IPを持たない環境であっても、「UFWで怪しい動きを検知し、Fail2banですべてのポートを即座に塞ぐ」という二段構えを構築することで、驚くほど強固なサーバーへと進化させることができます。
筆者はかれこれ4年ほどvps運用を続けている中、重篤な攻撃に晒されていないのは基本であるこのufwとfail2banのおかげ。
休息も慈悲も与えぬ。何があってもだ。
No rest, no mercy. No matter what.
のレベルで攻撃者にいかなる躊躇も容赦もしないのがVPSサーバの基本です。
RHEL9系ディストリビューション(Rocky Linux 9.7)にMySQLを導入したときのメモです。
一言で言えば、「特定のルールに従って、整理整頓されたデータの集まり」です。
言うなれば「超高性能な図書館」のようなものです。
閲覧者、借りている人の帳簿を司り、膨大な本から一瞬で目的の1ページを探し出し、同時に何百人もの人が本を借りようとしても混乱が起きないように管理されています。
MySQLは正確には「リレーショナルデータベース管理システム(RDBMS)」と呼ばれます。
MySQLが担っている主な役割は、大きく分けて以下の4つです。
なぜExcelファイルやテキストファイルで管理するのではダメなのでしょうか?
テキストファイルだと、100万件のデータから1件を探すのに上から順に読み込む必要があり、時間がかかりすぎます。DBは「インデックス(索引)」という仕組みを持ち、瞬時にデータを見つけ出せます。
銀行振込を想像してみましょう。
もし「1」の直後にシステムがダウンしたら、1万円が消えてしまいます。
こうならないよう、DBには「トランザクション」という仕組みがあり、「すべて成功するか、すべてなかったことにするか」のどちらかしか認めません。これが社会インフラを支える信頼性の正体です。
Linuxサーバー上で動く
など、バラバラな入り口から入ってくる要求を、一つの窓口(MySQL)が交通整理して処理してくれます。
MySQLは、システムにおける「記憶の番人」です。
LinuxにDBを入れるということは、そのサーバーに「確かな記憶力」と「厳格な管理能力」を持たせるということに他なりません。
ここまで踏まえ、LinuxにDBを入れていきましょう。
MySQLサーバーのパッケージを導入し、MySQLサービスが利用するディレクトリの権限をあらかじめ適正化。
sudo dnf install -y mysql-server
MySQLサービスを有効化し、初期状態でのログインを確認。
sudo systemctl enable --now mysqld
mysql -u root
ログイン直後にMySQLのroot顕現のパスワードを設定します。
※先ほどのDBの話に戻ります。DBは「システムのデータそのもの」を管理します。先ほどの図書館の例で言うと
まで全て記録されている状態です。ここで、例えば、悪意ある者が「『ハムレット』の作者は『クリストファー・マーロウ』である」としたい場合、悪意ある者はそのような行為ができてしまいます。
そのため、攻撃者はDBのroot権限を真っ先に奪います。それを防ぐためにも最初にrootパスワードを設定します。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Your_Strong_Password';
パスワードは自分の環境に合わせます。パスワード設定後、そのデータを適切な方法・手段・保管場所に格納してください。
FLUSH PRIVILEGES;
EXIT
mysql -u root -p
設定したパスワードでログインできることを確認します。確認後、EXITで抜けます。
mysql_secure_installation)対話型スクリプトを用い、商用・本番環境に耐えうるセキュリティ設定を一括で適用します。 以下のように行ってください。
Enter password for user root:
で、先ほどのrootパスワードが聞かれます。
その後、いくつかの確認事項があるのでYで答えます。
| 設定項目 | 内容 | 理由 |
|---|---|---|
| Remove anonymous users | Yes | 誰でも接続できる穴を塞ぐため |
| Disallow root login remotely? | Yes | ローカル管理に限定し攻撃経路を遮断するため |
| Remove test database and access to it? | Yes | 不要なオブジェクトの排除 |
| Reload privilege tables now? | Yes | 設定内容を有効化するため |
「KVMで作成したディスク(LVM)を500→200程度に切り詰めようとしたところ失敗した」。
まず、ディスク容量を空けるために /home を削除・再作成し、使用量を削減しました。
LVMの「末尾」にあるデータを物理的にディスクの「先頭」へ移動させました。
sudo pvmove --alloc anywhere /dev/vda2pvdisplay -m にて、使用中セグメントが 0 ~ 73153 PE(約180GB圏内)に固まり、それ以降が FREE になったことを確認。管理情報を 180GB に書き換えようと試みました。
sudo pvresize --setphysicalvolumesize 180G /dev/vda2
cannot resize to 46079 extents as later ones are allocated により失敗。「データは前に寄せた」という事実に基づき、ホスト側から物理的に180GB 分だけを切り出す作戦を敢行。
dd コマンドで旧LVから 180GB 分を抽出コピー。lvrename を使い、VMが参照するターゲットを 180GB の新ディスクにすり替え。virsh console 等で応答なし。pvmove でデータを寄せても、LVM自身の管理領域(Metadata Area)の整合性を保ったまま物理サイズを削るのは、OS稼働中や単純な dd では極めて困難である。dd で削る手法は、パーティションテーブルとLVMヘッダの整合性が 1 バイトでも狂うとシステム停止に直結する。やはり、この手のリサイズは「新たにサーバを作成し(リサイズした上で)データを流し込む」という地道な主だが一番です。
こちらの機器が届いてから4ヶ月ほどの使い心地について。
「買って良かった」につきます。
最後まで買うのをためらった理由が「今まで使っていた中古のThinkPad X13より200g重い。これは許容できるのか?」でしたが、ほぼ無視できるレベルでした。
というのも重心設計が優れていて、たたんだ状態での安定感はむしろこちらの方が高いという実感です。
これもまた完璧でした。キーピッチが広めでしっかりしたキーストロークがあり、下手すればデスクトップPCより入力しやすいまであります。
一番驚いているのはこれです。割とがっつり記事執筆やWebブラウジングをしている状態でも充電場所を求めてさまようことがないのは精神衛生上健全です。
ThinkPad最大の特徴、これが真価を発揮するのは電車の席など。ホームポジションから手を離すことなくカーソルを操作できるのが便利。
『ライザのアトリエ3DX』が違和感なく動くという驚異の性能。この見た目と薄さでライトな3Dゲームが動く様は見ていて感動です。
これが本日、この記事を書く理由となります。自転車の脇にローバックチェアを設置し、ノートPCを広げていたと言うときに突風が吹き自転車が倒れ、ハンドル部分が液晶のヒンジに直撃。

これは液晶が壊れたか……? 思ったのですがわずかなヒビで済みました。下手なPCだったら「買って4ヶ月後に壊れました」とのエントリーを出すところでした。致命傷となるところが無事で済むという高タフネスさに、これを選定して良かったと思うことしきり。
PCが高騰し始めた頃に購入したというが購入理由の一つでしたが、
によりしばらく手放せないと思った次第です。
16枚+αのカードが織りなす心理戦を気軽に楽しめる小箱の秀逸な作品です。

プレイヤーは姫(若様)に恋文を届けるため、城内の様々な人の助けを借りながら届けようとしています。
「1枚カードを引く」
「どちらかのカードを使う」
のシンプルさです。
本家『LOVE LETTER』の日本版と言うだけあって姫のイラストは十二単。更に若様への差し替えも可能。他の登場人物も
などの差し替えができていて雰囲気も満点です。
カードに「セット全体の枚数」が含まれているため、場が進むにつれて相手が何を持っているかの推測がしやすくなっています。(対戦相手にとっても)その確率の推理や心理戦などが非常に楽しいです。
スリーブ不要の分厚いカード。ゲーム中に使うカードも少ないため、スリーブの心配がありません。得点チップなどもない潔さは鞄の隙間にすんなりと入ります。
言語依存は高め。(といってもTCGに比べれば微々たるものですが)お子様や初心者相手に「広げて即プレイ」というわけにはいきません。プレイヤーエイドカード(サマリー)も文字を詰め込みすぎな形です。
本家と異なるバリエーションとなる『家老』の存在。手札の合計値が「12」を超えるとサドンデス。その理不尽さは『家老死』なる言葉があるほど。これはさすがに運の問題とはいえ、それをゲームの一強とみることができるか、笑えない冗談と取るかはプレイヤーのコンセンサスが必要なところです。
などがほどよく混じった素晴らしい作品。
「ボードゲームを全く知らない初心者に何を遊ばせるか?」という問いに対しての筆者のある種の答えとなるゲーム。このゲームの反応を元に「重いゲームへの適性はあるか?」「どんなゲームに興味を持てそうか?」の一種の試金石となっている作品です。
惜しむらくは2026年現在、市場に流通していないこと。なので、本作のオリジナルをプレイ済みの方も、見かけたら遊んでいただきたい作品です。
まず、このデッキの使い道は自分の好みでした。

実際の盤面。
倍増の季節の影響下、サイクロプスの超伝導師のコピーとなったサヒーリの構築物が2体並び、死亡誘発で5点×2を対象に向けて吹っ飛ばしました。
総じて、「いかようにもいじる可能性に満ちた」デッキ。昨年、買っておいて良かったです。
久しぶりに統率者4人の卓が立ったため、対戦を行いました。
デッキはこちら。
《リスの将軍、サワギバ/Chatterfang, Squirrel General(MH2)》
「害獣」ことサワギバを押し出したアリストクラッツ。
盤面のシステムクリーチャーはおろか除去耐性を持たない生物群を否定し、無限も決まりやすいという、ゲームチェンジャーが入っていないのにブラケット3以上の動きをするお気に入りです。

サワギバ→無慈悲な略奪者で相手のクリーチャー全否定。(サワギバの能力起動。略奪者の誘発により宝物トークン発生。
サワギバがトークンに反応してリスを生成し、除去耐性を持たない全てのクリーチャーが+x/-xされます)。
流石に略奪者は除去されるものの、《溜め込む親玉》で《切断マジック》を探して親玉自身に打ち2枚サーチ。《巣穴の魂商人》と《ズーラポートの殺し屋》の無限ライフルーズ成立。
ここでの隠れたMVPが《陰湿な根》。トークンクリーチャーがマナクリーチャーとなる、《大地の知識》に似たような動きがキモでした。
ヘイトが向けられても押し切れるデッキということで使っているスタイルです。
Powered by WordPress & Theme by Anders Norén