SSHをIPアドレス制限する on 古めのRedhat系Linux

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

いつも通りにX(旧tiwtter)を見ていると良からぬ投稿が流れてきました。

OpenSSHに重大な脅威となる脆弱性「regreSSHion」(CVE-2024-6387)が発覚
ほぼすべてのLinuxシステムに影響

とのことです。

聞いた話では、SSHの脆弱性をついて root 権限を奪われる可能性のある深刻な内容となっています。

▼詳しくはGigazineさんの記事をご覧ください
https://gigazine.net/news/20240702-regresshion-cve-2024-6387/

環境

実施日2024-07-02
OSCentOS Stream 9
CentOS 7
CentOS 6
cat /etc/redhat-release
CentOS Stream release 9
CentOS Linux release 7.9.2009 (Core)
CentOS release 6.10 (Final)

対策方法

幸いなことに対策方法は既にあります。

新しめのRedHat系Linuxの場合

サポート期限の切れていない Linux OS を使っているなら DNF のアップデートで解決です。

dnf update

Alma Linuxの場合
openssh.x86_64 8.7p1-38.el9.alma.2

Rockey Linuxの場合
openssh.x86_64 8.7p1-38.el9

可能ならOSを再起動して接続済みのセッションを完全に解除しておくと良いです。

/etc/hosts.allow と /etc/hosts.deny が使える場合

CentOS 7 以前になると /etc/hosts.allow と /etc/hosts.deny で設定するのがお手軽です。
CentOS 8 以降など使えない場合はファイルが存在しないので有無で判断しても良いです。

vi /etc/hosts.allow
sshd : 000.000.000.000
sshd : 001.001.001.001
vi /etc/hosts.deny
sshd : all

古めのRedHat系Linuxの場合

yum や dnf が既に使えなくなっているので「アップデート一発」というわけにはいきません。

本記事の内容になりますが、IPアドレス制限を行う、という流れになります。

その他のLinuxの場合

UbuntsuやDebianなどは手元に環境がなかったため未確認です。

自分のIPアドレスを確認する

▼確認くんなどから自身のIPアドレスを確認しておきます。

https://www.ugtop.com/spill.shtml

固定IPアドレスを入手する

固定IPアドレスを持っている方なら気にならないと思いますが、固定でないかたは「IPアドレス制限」に二の足を踏むのではないでしょうか。

格安で固定IPを手に入れる方法もあるので興味のある方は下記リンクをご覧になってみてください。

OpenVPNで最安の固定IPアドレスを取得する - AlmaLinux9.4 on さくらのVPS

firewalld は触らない

ファイアーウォールと言えば、firewalld か iptables を思い浮かべると思います。
最近だと firewalld で設定されていることが多いのではないでしょうか。

なんでこんなことを言っているかというと firewalld は使いません。
触りません。
今までどおりで動いていてもらいます。

というのも firewalld で「SSHはすべて拒否、指定したIPアドレスだけ許可する」という設定を行っていたのですが、どうやってもうまくいかずに断念したからです。

なので firewalld はそのままにしておきます。

firewall-cmd --list-all

iptables からSSHのIPアドレス制限を行う

拒否したい相手が firewalld を通過しても、iptables で反応して拒否されればOKです。

次のとおりに置き換えてください。
000.000.000.000 には許可したいIPアドレス
22 にはSSHのポート番号

sudo iptables -I INPUT -p tcp --dport 22 -s 000.000.000.000 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

ターミナルから接続している場合は、ここで接続が切れるかもしれません。
接続が切れた場合は再度接続しなおします。
切れない場合はそのまま続行です。

そして続きを行います。

▼ルールを保存して永続化

iptables-save | tee /etc/sysconfig/iptables

▼iptablesの確認

iptables -L -v -n

iptables の SSH の状況をログで確認

SSH 接続の試行や拒否をログに記録するためのルールを追加します。

接続試行のログ

まずはSSH 接続の試行をログに記録するルールを追加します。

iptables -I INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-TRY: " --log-level 4

拒否のログ

SSH 接続の拒否をログに記録するルールを追加します。

iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-DROP: " --log-level 4
iptables -A INPUT -p tcp --dport 22 -j DROP

ルールの保存

設定した iptables ルールを永続化します。

iptables-save | tee /etc/sysconfig/iptables

ログの確認

次のように確認できます。

tail -f /var/log/messages
grep "SSH-TRY" /var/log/messages
grep "SSH-DROP" /var/log/messages