firewalldで特定IPアドレスを拒否する方法|drop zoneとsource指定を画像で解説

firewalldで特定IPアドレスを拒否する方法|drop zoneとsource指定を画像で解説 Linuxサーバ
スポンサーリンク

はじめに

firewalldで「特定のIPアドレスからの通信だけ拒否したい」ときは、drop zoneへsourceを登録する方法があります。

今回の記事では、RHEL 10.1環境で `172.16.82.96` をdrop zoneへ登録し、`172.16.82.96` から `172.16.82.53` へのSSH接続がタイムアウトすることを確認しました。

この記事では、特定IPをdrop zoneへ登録する方法、確認方法、削除して戻す方法を画像付きで短く整理します。

【注意】

自分のSSH接続元IPをdrop zoneへ登録しないでください。

誤って登録すると、SSHで再接続できなくなる可能性があります。

firewalldで特定IPを拒否する考え方

firewalldのzoneは、通信に適用するルールの入れ物です。

たとえば、public zoneで動いているサーバに対して、特定IPだけdrop zoneへsource登録すると、通常の通信はpublic zoneで処理され、指定したIPからの通信だけdrop zoneで処理されます。

default zone = public
interface = public
172.16.82.96 = drop zoneにsource登録

この場合の考え方は次のとおりです。

通常の通信        → public zoneで処理
172.16.82.96     → drop zoneで処理

public zoneのservicesやportsが変更されるわけではありません。 指定したsource IPからの通信だけがdrop zoneで処理されます。

firewalld全体の初期設定や、SSH接続中にfirewalldを起動する前の注意点は、以下の記事で詳しく解説しています。

firewalld初期設定と起動前の注意事項|SSH切断を防ぐ安全な起動手順【RHEL 10.1検証】

検証環境

今回の検証環境は以下です。

役割IPアドレス
作業端末 Windows 11`172.16.81.41`
実験台 RHEL10サーバ`172.16.82.53`
拒否対象 RHEL10サーバ`172.16.82.96`

`172.16.82.53` 上でfirewalldのdrop zoneに `172.16.82.96` をsource登録し、`172.16.82.96` から `172.16.82.53` へのSSH接続が遮断されることを確認しました。

検証後はdrop zoneからsourceを削除し、元の状態へ戻しています。

実行前にSSH接続元IPを確認する

まず、実験台サーバ `172.16.82.53` で、SSH接続元IPとfirewalldの状態を確認します。

echo "$SSH_CLIENT"
firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --get-default-zone
firewall-cmd --zone=drop --list-sources

確認結果:

172.16.81.41 53990 22
running
public (default)
  interfaces: enp0s3
public

確認できたこと:

  • Windows端末 `172.16.81.41` からSSH接続している
  • firewalldは `running`
  • active zoneは `public`
  • default zoneは `public`
  • drop zoneのsourcesは空
TeraTermでSSH接続元IPとfirewalldのactive zoneを確認している画面

【注意】

自分のSSH接続元IPをdrop zoneへ登録しないでください。

本番環境では、コンソールや別経路を確保してから作業してください。

特定IPをdrop zoneへ登録する

実験台サーバ `172.16.82.53` で、拒否対象の `172.16.82.96` をdrop zoneへ登録します。

firewall-cmd --add-source=172.16.82.96 --zone=drop
firewall-cmd --zone=drop --list-sources
firewall-cmd --get-active-zones

確認結果:

success
172.16.82.96
drop
  sources: 172.16.82.96
public (default)
  interfaces: enp0s3

確認できたこと:

  • `172.16.82.96` をdrop zoneへ登録できた
  • drop zoneがactiveになった
  • public zoneは `enp0s3` に適用されたまま
firewall-cmdで特定IPアドレスをdrop zoneへ登録した結果

public zoneのservicesやportsが変更されるわけではありません。 通常の通信はpublic zoneで処理され、`172.16.82.96` からの通信だけがdrop zoneで処理されます。

設定を確認する

drop zoneの詳細は、次のコマンドで確認します。

firewall-cmd --zone=drop --list-all

確認結果:

drop (active)
  target: DROP
  interfaces:
  sources: 172.16.82.96
  services:
  ports:
  rich rules:

確認できたこと:

  • drop zoneはactive
  • targetは `DROP`
  • sourcesに `172.16.82.96` が表示された
firewalldのdrop zoneに登録されたsource IPを確認している画面

実際にSSH接続が拒否されるか確認する

drop zoneへsource登録する前は、`172.16.82.96` から `172.16.82.53` へSSH接続できることを確認しました。

拒否対象サーバ `172.16.82.96` 側で実行:

hostname -I
ssh -o ConnectTimeout=5 172.16.82.53

接続後、`172.16.82.53` 側で実行:

hostname -I
exit

確認できたこと:

  • `172.16.82.96` から `172.16.82.53` へSSH接続できた
  • 接続後の `hostname -I` で `172.16.82.53` が表示された
  • `exit` で `172.16.82.96` 側へ戻れた
drop zone登録前にSSH接続できることを確認している画面

次に、`172.16.82.53` 側で `172.16.82.96` をdrop zoneへ登録したあと、`172.16.82.96` 側からSSH接続を試しました。

ssh -o ConnectTimeout=5 172.16.82.53

確認結果:

ssh: connect to host 172.16.82.53 port 22: Connection timed out

drop zoneへsource登録したあと、拒否対象の `172.16.82.96` から `172.16.82.53` へSSH接続を試すと、`Connection timed out` となり接続できないことを確認しました。

drop zone登録後にSSH接続がタイムアウトする画面

設定を削除して戻す

検証後は、drop zoneからsourceを削除して元に戻します。

firewall-cmd --zone=drop --remove-source=172.16.82.96
firewall-cmd --zone=drop --list-sources
firewall-cmd --get-active-zones

確認結果:

success

public (default)
  interfaces: enp0s3

確認できたこと:

  • `172.16.82.96` をdrop zoneから削除できた
  • drop zoneのsourcesは空になった
  • active zoneはpublicのみになった
firewalldのdrop zoneからsource IPを削除した結果

最後に、実験台サーバ `172.16.82.53` が元の状態へ戻っていることを確認しました。

firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --get-default-zone
firewall-cmd --zone=drop --list-sources
firewall-cmd --list-all

確認結果の要点:

running
public (default)
  interfaces: enp0s3
public

public (default, active)
  services: cockpit dhcpv6-client ssh
  ports:
  rich rules:

永続化する場合の注意

今回の検証では、一時的なruntime設定としてsourceを追加・削除しました。

再起動後も残したい場合は、`--permanent`を使います。

追加する例:

firewall-cmd --permanent --zone=drop --add-source=172.16.82.96
firewall-cmd --reload

削除する例:

firewall-cmd --permanent --zone=drop --remove-source=172.16.82.96
firewall-cmd --reload

【注意】

`--permanent` と `firewall-cmd --reload` は影響が大きい操作です。

reload後に通信状態が変わる可能性があります。

不安な場合は、検証環境で確認してから本番環境へ反映してください。

親記事への内部リンク

firewalldの初期設定や、SSH接続中にfirewalldを起動する前の注意点は、以下の記事で詳しく解説しています。

firewalld初期設定と起動前の注意事項|SSH切断を防ぐ安全な起動手順【RHEL 10.1検証】

この記事では、特定IPアドレスの拒否に絞って説明しました。 trusted暫定起動やzone全体の考え方は、親記事を参照してください。

まとめ

firewalldで特定IPを拒否したい場合は、drop zoneへsource登録する方法があります。

今回の検証では、`172.16.82.96` をdrop zoneへ登録すると、`172.16.82.96` から `172.16.82.53` へのSSH接続がタイムアウトすることを確認しました。

重要なポイントは次のとおりです。

  • 自分のSSH接続元IPをdrop zoneへ登録しない
  • `--add-source=IP --zone=drop` で特定IPをdrop zoneへ登録できる
  • public zone自体を書き換えるわけではない
  • 指定したsource IPからの通信だけがdrop zoneで処理される
  • 設定は削除して元に戻せる
  • `--permanent` と `--reload` は慎重に扱う

画像内に公開したくないIPアドレスやホスト名が写らないよう注意し、まずは検証環境で確認してから本番環境へ反映してください。

コメント

タイトルとURLをコピーしました