【丁寧解説】Linuxファイアウォール iptablesの使い方

  • このエントリーをはてなブックマークに追加
  • Pocket
linux firewall

Linuxでもファイアウォールを設定したいことは多々ある。

むしろ企業でサーバーとして利用されることから、パーソナルコンピュータよりも気をつかいたいところだ。

このページでは、Linuxでファイアウォールを設定するiptablesについてお伝えする。

ファイアウォールとは?

一般的には「防火壁」という意味だ。火事の炎を遮断して延焼を防ぐことになぞらえている。

コンピュータネットワーク関連では、ホスト自身やネットワークとネットワークの間に設置され、許可されてないパケットなどを遮断しセキュリティ向上を図るものだ。

最も一般的な例を挙げるとWindowsファイアウォールや、ルーターに内蔵されているパケットフィルタなどである。

今回Linuxで一般的に使われているパケットフィルタiptablesを紹介する。

iptablesとは?

iptablesとは一般的なLinuxに搭載されているパケットフィルタの事だ。

パケットとは、スマホのパケット通信費などでよく出てくるように、ネットワーク上を流れるデータの事だ。パケットフィルタとは、このパケットを選別して、通すものと通さないものを分けるということを意味している。

iptablesは商用製品に匹敵する、とても高機能かつ高性能なパケットフィルタだ。無料で使えることを感謝しよう。

サーバ自身を守ることはもちろん、パケット転送などにも対応しているため、ネットワークアダプタを二つ搭載したマシンの上で動作させパケット転送制御を行うことで、ネットワーク型ファイアウォールとしても使用可能である。

Snortなどと組み合わせるとUTM(統合脅威管理システム)としても使用できる。またパケットの状態を把握するステートフル機能やログ機能を備えている。

なにやら難しくなってきたが、このページではiptablesの基礎を解説してゆく。

iptables の設定確認と解説

通常iptablesコマンドを実行すると、自動的にロードされ使用可能になる。

設定を適応したフィルタルールを表示するには以下のコマンドを打つ。「-L」オプションを付けて実行すると、現在設定されているポリシーとここのルールのリストが表示される。

以降の作業はroot権限で行うこと。

iptables -L

下記のような表示が出るはずだ。

今回のはあくまで一例で、すでにある程度設定が施されているときの表示を出している。

同じ設定を施すスクリプトをこのページの最後に記述してある。興味がある方は参考にしてみてほしい。

これを読めるようにして、その設定がかけるようになるのがこのページのゴールだ。

一つづつ説明していこう。

Chain

ネットワークから受け取ったパケットは、次のような手順で処理される。

chain

このINPUT、OUTPUT、FORWARDという3つの経路に対して、それぞれ通過させるパケットのルールを設定する。この3つの経路を「チェイン」と呼ぶ。

上記の例でも3つ確認できるはずだ。

  • Chain INPUT (policy DROP)
  • Chain FORWARD (policy DROP)
  • Chain OUTPUT (policy ACCEPT)

これらはそれぞれ基本ポリシーだ。どのルールにも当てはまらない場合、これらが基本設定ですよ、というルールになっている。

policy DROPとなっているのはルールが指定されていない場合には、すべて拒否するという意味になる。ACCEPTとしてある場合、全て許可だ。

それぞれの項目

Chainの下にある次の部分がルールだ。

上の例だと、Chain input以外、なにも設定が入っていない。次のような意味になる

target

targetに関しては許可するのか拒否するのかログをとるのか?など。条件にマッチするパケットの処理の行き先をどうしますか?という意味だ。

prop

propはプロトコルの種類になる。

opt

optはオプションが記述される。(今回の例では記述されていない)

source

sourceはどこから来たのか?

destination

destination はどこへ向うか?

最後

最後は備考ととらえていいだろう。

ALL?

だが下記の設定を見ると、ACCEPT allとなっている部分が2箇所もあり、全部セキュリティなしで通ってしまいそうだ。

 

そこで以下の結果を見てほしい。

-v オプションを付けるとより詳細な情報が出力される。「-t filter」はつけてもつけなくてもいい。コマンドのデフォルト設定と同じだ。

iptables -L -v -t filter

下記の部分に注目してほしい。

とある。

loはローカルループバックを意味している。自分自身ということだ。自分自身のアクセスは全部通しますよ、としないとアクセスができなくなってしまうので、この設定になっている。

iptablesの適応順番

iptablesは上から順番にルールを適応する。例えば、下記のこの項目を真っ先に設定すると全てのパケットログがとられてしまうので気をつける必要がある。

iptablesファイアウォールの設定方法

最も一般的なフィルタリングテーブル

何も設定されていないときは次のようなフィルターが表示される。

iptables -L

見ての通り何も設定されていない。また、すべてACCEPTになっているのがわかるだろう。

これに対して設定を追加していくのだが、基本的には次のような設定にする。

チェイン ターゲット(どうするか?)
INPUT DROP
FOWARD DROP
OUTPUT ACCETP

これは「全ての通信を遮断した上で必要な通信だけ許可する」のがセキュリティ上の基本だからだ。

クライアントマシンではChain FORWARD (policy ACCEPT)は使用しないことが多い、なのでpolicyをDROPにすることが殆どだろう。ネットワーク仲介役のルーターなどを構築するときはChain FORWARDに関して調節する必要がある。

またサーバなどは決めうちしたサービスだけを提供するため、出入りする情報の種類が限られている。そして、入ってくる情報だけでなく、出ていく情報も制御するためにChain OUTPUT (policy ACCEPT)の項目もDROPに設定し、適切な設定を施すことも多くなってきている。

「INPUT」「OUTPUT」「FORWARD」が基本だが、POSTROUTING、PREROUTINGなどの項目もある。覚えておく必要はないが、3種類以外も設定できるというのは知っておいて損はない。

iptablesの書式

iptablesの書式は次の通りだ。

iptables 〈テーブル〉〈コマンド〉 〈マッチ〉〈ターゲット〉

設定例を上げると

iptables -t filter -A INPUT -p tcp -j ACCEPT

となる。このとき-t filterを省略した場合デフォルトとしてfilterテーブルが適応される。つまり

iptables -A INPUT -p tcp -j ACCEPT

は同じである。

INPUTに対してプロトコルがtcpのものを許可する設定だ。

主なテーブルとコマンド

すべてではないが、よく使うもの、重要なものをご紹介していこう。

テーブルに関して

  • filter 一般的なフィルタテーブル
  • nat マスカレードなどを記述するテーブル
  • mangle このテーブルを使うとQuality of Serviceなどが設定可能だ。

チェインに関して

  • INPUT 入ってくるパケットに関して
  • OUTPUT 出てゆくパケットに関して
  • FORWARD パケットの転送
  • PREROUTING 受信時にアドレスを変換
  • POSTROUTING 送信時にアドレスを変換

ターゲットに関して

  • ACCEPT パケットを許可
  • DROP パケットを拒否
  • REJECT パケットを拒否して制御メッセージを送信
  • LOG パケットのログを記録

コマンドに関して

  • -F 何も指定されてない場合すべてのフィルタルールを削除する。
  • -X 何も指定されてない場合デフォルト以外のすべてのチェインを削除する。
  • -A ルールの追加
  • -D ルールの削除
  • -P ポリシーの指定

ほかユーザ定義チェインを作成する-Nなどがある。

そのほかパラメータ

  • -s パケットの送信元
  • -d パケットの送信先
  • -p パケットのプロトコル指定
  • -i 入ってくるインターフェイス指定 eth0など
  • -o 出てゆくインターフェイス指定
  • -j ターゲットの指定

拡張パラメータ

上記のパラメータのほかに詳細な拡張パラメータが多数存在する、主によく使われるものを列挙する。

-m state –state について

  • NEW 新しい接続
  • ESTABLEISHED すでに許可されている接続
  • RELATED 新しくかつ許可された接続
  • INVALID 無効な接続

これらはカンマで複数指定可能だ。

-p について

  • --sport 送信側のポート指定
  • --dport 受信側のポート指定
  • --tcp-flags SYN、ACK、FINなどカンマで区切り複数指定可能

スクリプトによるiptablesの設定例

ざっとマニュアル的な説明をしたがここで実際に設定例を挙げてみる。

iptablesの設定を行なうときiptablesコマンドを頻繁に打ちこむことになる。ミスも起こりやすくなるし、視認性も悪い。

なのでスクリプトを組んでまとめて設定するほうが一般的だ。

以下bashシェルスクリプトだ。

以上のようにiptablesコマンドを上から順に実行するスクリプトである。

これをfirewall.shとして保存chmod 700 firewall.shとして実行権限を付与./firewall.shとするとフィルタが適応される。

なお実行に際してroot権限で行うことと、sshで接続している場合、sshを許可する設定記述することに気をつけていただきたい。

今回sshを許可する場合

iptables -A INPUT -m state NEW -m tcp -p tcp -dport 22 -j ACCEPT

とする。

今回の設定はこちらからローカルループバックと許可したパケット以外は拒否し、ログを残すという、単純な設定だ。

設定保存

iptablesの設定適応方法はディストリビューションによってことなる。

一般的には、

  • iptables-saveコマンドを使い、標準出力されるものをリダイレクトで保存
  • iptables-restoreコマンドを使い、リダイレクトから読み込み

となる。

例としては

(以下root権限での実行)

iptables-save > /etc/myiptables-set

で保存。

iptables-restore < /etc/myiptables-set

で復元。

これを起動時にスクリプトとして起動するように設定するパターンが多い。

まとめ

このページではLinuxのファイアウォールとして、iptables設定の確認および設定の方法についてお伝えしてきた。

iptablesはLinuxを活用する上で必須のコマンドだ。理解して使いこなせるようにしておこう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメント

コメントを残す

*