はじめに
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
出ていくパケットに適用
また、それぞれのテーブルで使用できるチェインの一覧は以下になる。
テーブル | チェイン |
---|---|
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件のコメント