bucket-sort logo bucket-sort

プログラミングとインフラエンジニアリングの覚え書き

  • Posts
  • About
  • Contact
  1. Home
  2. All Posts
  3. iptablesとipsetによるLinuxサーバーの基本的なファイアウォール設定

iptablesとipsetによるLinuxサーバーの基本的なファイアウォール設定

Feb 21, 2026 Linux bucket-sort

Linux でまともに公開サーバー運用していくなら避けて通れないのがファイアーウィールです。マネージドサービスとして WAF を導入している環境ならともかく、小規模なシングルインスタンスを直接公開しているような場合には、攻撃対策は自分で考える必要があります。

そこで役立つ、というか、もはや自分にとっては必須のツールと言っていいのが iptables です。以下のiptablesの使い方をざっくり整理しておきます。

iptables とは?

iptables は、Linux カーネルに組み込まれている netfilter 機能を操作するためのコマンドラインツールです。

ネットワークパケットに対して、

  • ACCEPT(許可)
  • DROP(破棄)
  • REJECT(拒否応答付きで破棄)
  • LOG(ログ出力)

といった処理ルールを定義できます。

例えば:

  • 特定の IP からのアクセスを拒否する
  • 特定のポート(22 / 80 / 443 等)のみ許可する
  • SYN flood 対策を行う
  • SSH brute force 対策を行う
  • .env や /wp-login.php などへのスキャン系アクセスを遮断する

といった制御を OS レベルで実施できます。

ipset とは?

iptables 単体でも IP アドレスによるフィルタリングは可能ですが、大量の IP を扱う用途にはあまり向いていません。

例えば、1万件の IP をブロックしたい場合、iptables のルールとして個別に定義すると:

  • ルール数が増加する
  • マッチング処理が線形探索になる
  • CPU 負荷が増加する
  • レイテンシが悪化する

といった問題が発生します。

ipset は、IP アドレスやネットワークの 集合(set) を管理するための仕組みであり、ハッシュテーブル等を用いた高速な検索により、大量の IP アドレスを効率的に扱うことができます。

iptables と ipset の関係

iptables は通信を許可/拒否する「ルールエンジン」、 ipset はそのルールが参照する「IP アドレスのリスト管理機構」として機能します。

iptables 側では、以下のように ipset を参照するルールを1行定義します:

iptables -A INPUT -m set --match-set blacklist src -j DROP

これにより、

「blacklist セットに含まれる送信元 IP からの通信はすべて DROP する」

というルールを定義できます。

以後、iptables のルールを変更することなく、

ipset add blacklist 203.0.113.10

のように ipset 側へ IP を追加するだけで、遮断対象を動的に更新できます。

fail2ban 等と組み合わせて、攻撃元 IP を自動的にセットへ追加する構成も一般的です。

iptables の使い方(主要オプション)

コマンド形式

iptables [-t table] command chain [match] [target]

テーブル指定

オプション 説明
-t filter デフォルト。パケットフィルタリングを行う
-t nat NAT(アドレス変換)を行う
-t mangle パケットの書き換えを行う
-t raw コネクショントラッキング除外
-t security SELinux 用

コマンド

オプション 説明
-A ルールを追加(Append)
-I ルールを挿入(Insert)
-D ルールを削除(Delete)
-L ルール一覧表示(List)
-F ルール全削除(Flush)
-P デフォルトポリシー設定(Policy)
-N チェイン作成(New chain)
-X チェイン削除

マッチ条件

オプション 説明
-s 送信元 IP アドレス
-d 宛先 IP アドレス
-p プロトコル(tcp, udp 等)
--sport 送信元ポート
--dport 宛先ポート
-i 入力インターフェース
-o 出力インターフェース
-m state 接続状態マッチ
--state NEW, ESTABLISHED 等

ターゲット

オプション 説明
-j ACCEPT 許可
-j DROP 破棄
-j REJECT 拒否
-j LOG ログ出力

ipset の使い方(主要コマンド)

セット作成

ipset create blacklist hash:ip

セット削除

ipset destroy blacklist

IP 追加

ipset add blacklist 203.0.113.1

IP 削除

ipset del blacklist 203.0.113.1

セット一覧表示

ipset list

セット内容確認

ipset list blacklist

主なセットタイプ

タイプ 説明
hash:ip 単一 IP
hash:net ネットワーク
hash:ip,port IP + ポート
list:set セットの集合
Linux セキュリティ Iptables Ipset
← Amazon Linux 2023のOS更新まわりの挙動を整理しておく iptables + ipsetによるwp-login.php自動ブロックの仕組み - ① 動作原理と遮断スクリプト →

Related Posts

  • iptables + ipsetによるwp-login.php自動ブロックの仕組み - ③ 運用結果と安全なリセット手順 Feb 24, 2026
  • iptables + ipsetによるwp-login.php自動ブロックの仕組み - ② 初期セットアップと自動実行設定 Feb 23, 2026
  • iptables + ipsetによるwp-login.php自動ブロックの仕組み - ① 動作原理と遮断スクリプト Feb 22, 2026
  • サービスを実行するユーザにログインを許可した場合のセキュリティリスクを考える Feb 18, 2026

Table of Contents

  • iptables とは?
  • ipset とは?
  • iptables と ipset の関係
  • iptables の使い方(主要オプション)
    • コマンド形式
    • テーブル指定
    • コマンド
    • マッチ条件
    • ターゲット
  • ipset の使い方(主要コマンド)
    • セット作成
    • セット削除
    • IP 追加
    • IP 削除
    • セット一覧表示
    • セット内容確認
    • 主なセットタイプ

Recent Posts

  • Laravel の Event / Listener で Pub/Sub を実装する Apr 2, 2026
  • [C#] delegate と event の仕組みを整理する Apr 1, 2026
  • Pub/Sub パターンとは何か Mar 31, 2026
  • PHP/Laravel で値の状態を判定するヘルパ関数まとめ Mar 30, 2026
  • Filament の dehydrated メソッドとは何か Mar 29, 2026

Categories

  • AWS27
  • C#22
  • .NET20
  • Laravel16
  • Linux12
  • Apache8
  • MySQL8
  • PHP8
  • DynamoDB6
  • Nginx5
  • WordPress4
  • インフラ4
  • Hugo3
  • セキュリティ3
  • .NET Framework1
  • Aurora1
  • Filament1
  • Git1
  • SQS1

Tags

  • AWS
  • C#
  • .NET
  • Laravel
  • PHP
  • MySQL
  • セキュリティ
  • Linux
  • Apache
  • Code Snippet
  • DynamoDB
  • NoSQL
  • PHP-FPM
  • RDS
  • DoS
  • Nginx
  • Windows
  • WordPress
  • パフォーマンス
  • 監視
  • Amazon Linux 2023
  • CMS
  • Docker
  • Ipset
  • Iptables
  • OPCache
  • Webサーバー
  • 認可
  • Aurora
  • Blade
Powered by Hugo & Explore Theme.