はじめに

Linuxのファイアウォール機能は、以下のようにサービス、iptablesコマンド、Netfilterで成り立っている。

4.5. ファイアウォールの使用 より引用

iptablesサービスやFirewalldサービスは、実際にはiptablesコマンドを使用しているが、より設定を簡単に行えるように使用される。
本稿では、Netfilter機能に直接命令ができるiptablesコマンドを例にあげてファイアウォールの設定を説明する。

サンプル

以下にコマンドの例を示す。

% iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

上記のコマンドは、tcp 80番ポートへのインバウンド通信を許可する設定である。
また、それぞれの意味は以下になる。
各用語は後ほど詳しく説明する。

  • -tオプション
    テーブルを指定する
    このオプションを指定しない場合、filterテーブルになる
  • -Aオプション
    ターゲットを指定する
  • -pパラメータ
    ルールで使用されるプロトコルを指定する
  • --dportパラメータ
    -pパラメータを指定した時に使用することが出来る
    宛先ポート番号を指定する
  • -jパラメータ
    ターゲットを指定する

テーブル、チェイン、ターゲット

ファイアウォールには、以下の概念が存在する。

  • テーブル
    大まかにパケットをどのように扱うか(フィルタリングするか、NATするかなど)

  • チェイン
    どのタイミングで処理をするか(パケットが入る時か、出る時かなど)

  • ターゲット
    パケットをどうするか(通すか、拒否するかなど)

パケットは少なくとも1つのテーブルの対象となり、各テーブルには、デフォルトチェインが存在する。
以下では、それぞれを詳細に説明する。

テーブル

テーブルには、以下の5種類が存在する。

  • filter
    パケットを処理するためのデフォルトテーブル。
    -t オプションでテーブルを指定しない場合これになる。

  • nat
    NAT (ネットワークアドレス変換) で使用される。

  • mangle
    パケットに対し、TOSやMSSなど様々な変更を加えられるらしい。
    ここら辺に使い方が書いてあるが、使用する事はほぼ無いだろう。
    iptables-extensions

  • raw
    主にNOTRACKターゲットと共に使用され、ステートフルインスペクションなどの接続追跡から除外するために使用される

  • security
    SELinuxなどの強制アクセス制御のネットワーク用に利用される。

チェイン

チェインは、パケットをどのタイミングで処理するかを決めるものであり、以下の種類がある。

  • INPUT
    ホスト宛に入ってくるパケットに適用
  • OUTPUT
    ローカルで生成され、出ていくパケットに適用
  • FORWARD
    ホストを経由して転送されるパケットに適用
  • PREROUTING
    ルーティング前の入ってくるパケットに適用
  • POSTROUTING
    出ていくパケットに適用

2.8.9. IPTABLESより引用

また、それぞれのテーブルで使用できるチェインの一覧は以下になる。

テーブル チェイン
filter INPUT
OUTPUT
FORWARD
nat PREROUTING
OUTPUT
POSTROUTING
mangle INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING
raw OUTPUT
PREROUTING
security INPUT
OUTPUT
FORWARD

ターゲット

ターゲットはチェインごとに決まっている。
全てのチェインに共通しているターゲットは以下になる。

  • ACCEPT
    パケットを許可する
  • DROP
    パケットを破棄する(送信元にパケットを返さない)
  • REJECT
    パケットを拒否する(送信元に REJECT したことを通知する)
  • QUEUE
    パケットをキューに入れる

4. オプション

代表的なオプションを以下に示す。

  • -A, --append chain rule-specification
    指定したチェインの最後にルールを追加する
  • -I, --insert chain [rulenum] rule-specification
    指定したチェインに番号を指定してルールを挿入する
    番号を省略した場合は、1になる
  • -D, --delete chain rule-specification
    -D, --delete chain rulenum
    指定したからルールまたは番号を指定して削除する
  • -R, --replace chain rulenum rule-specification
    指定したチェインのルールを置き換える
  • -L, --list [chain]
    指定したチェインにある全てのルールを一覧表示する
  • -N, --new-chain chain
    指定した名前のユーザ定義チェインを作成する
  • -X, --delete-chain [chain]
    指定したユーザ定義チェインを削除する
  • -E, --rename-chain old-chain new-chain
    指定したユーザ定義チェインの名前を変更する

パラメータ

代表的なパラメータを以下に示す。

  • -p, --protocol protocol
    プロトコルを指定する
    指定できるプロトコルは、tcp, udp, udplite, icmp, esp, ah, sctp, all のいずれか1つか、または数値
  • -s, --source address[/mask][,...]
    送信元の指定
    address はホスト名、IPアドレス (/mask) を指定
  • -d, --destination -d, --destination address[/mask][,...]
    宛先の指定  
    指定方法は、-sパラメータと同等
  • -J, --jump target
    ルールのターゲットを指定する
  • -m, --match match
    拡張モジュールを指定する

設定例

特定ポートの指定

以下は、tcp 22番ポートへの通信を許可するルールを INPUTチェインの最後に追加する例である。

% iptables -A INPUT -p tcp --dport 22 -j ACCEPT

複数ポートの指定

-mパラメータで multiport を使用すると、--dports オプションで複数のポートを指定することが出来る。

% iptables -A INPUT -m multiport -p tcp --dports 80,8080 -j ACCEPT

ポート範囲の指定

ポート範囲の指定は、":"区切りで指定する。

% iptables -A INPUT -p tcp --dport 3000:3200 -j ACCEPT

特定プロトコルへの指定

以下は、UDPへの通信を拒否するルールを OUTPUTチェインの先頭に挿入する例である。

% iptables -I OUTPUT -p udp -j REJECT

特定ソースからの指定

-s パラメータで指定する。

% iptables -A INPUT -s 192.168.1.1 -j ACCEPT
% iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
% iptables -A INPUT -s hostname -j ACCEPT

ステートフルパケットインスペクションの使用

state モジュールを指定することで接続状態を判断して、ルールの適用を可能にすることが出来る。
接続状態には、以下がある。

  • NEW
    新規接続を開始しようとしている状態
  • ESTABLISHED
    双方向のパケットが観測された状態
  • RELATED
    新規接続を開始しようとしているが、既存の接続と関連がある状態
    例えば、FTPの21,20番ポート
  • INVALID
    どの既存の接続とも関連付けられていない状態

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です