Rainbow Planet (GT×IT×SP×SA)

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

01_IT技術 (Technology) 01_Linux

Linux(CentOS 6)のパケットフィルタリング方法(iptables)

投稿日:2017年3月26日 更新日:

(0)目次&概説

(1) “iptables”の概要
(2) “iptables”の解説
 >(2-1) “iptables”の設定ファイル格納場所
 >(2-2) “iptables”の記載内容解説
(3) “iptables”の設定変更方法

(1) “iptables”の概要

Linuxの”CentOS 6″では”iptables”という機能を用いてパケットフィルタリングを行う事が出来ます。パケットフィルタリングとはパケット(ネットワークを通る細分割されたデータ)をフィルタリング(ルールに従いパケットを「通過」や「遮断」)する事でセキュリティの向上を図る仕組みで、「パケットフィルタリング型」の「ファイアウォール」です。

目次にもどる

(2) “iptables”の解説

(2-1) “iptables”の設定ファイル格納場所

“iptables”は以下のディレクトリに格納されています。

/etc/sysconfig/iptables

viエディタで開いてみるとファイルは下記の様になっています(これはほぼ初期状態の内容です)。

(2-2) “iptables”の記載内容解説

# ① filterテーブルの設定宣言 #
*filter
# ② 外部から内部に来るパケットの制御 #
:INPUT DROP [0:0]
# ③ 外部から来て自サーバを経由するパケットの制御 #
:FORWARD DROP [0:0]
# ④ 内部から外部へ出るパケットの制御 #
:OUTPUT ACCEPT [0:0]
# ⑤ 外部から内部に来るパケットの内、確立済みのパケットの制御 #
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ⑥ icmpプロトコルの通信の許可設定 #
-A INPUT -p icmp -j ACCEPT
# ⑦ ループバックの設定 #
-A INPUT -i lo -j ACCEPT
# ⑧ INPUTに対しプロトコルとポート番号を指定して制御 #
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# ⑨ INPUTに対しエラータイプを指定した遮断設定 #
-A INPUT -j REJECT --reject-with icmp-host-prohibited
# ⑩ FOWARDに対しエラータイプを指定した遮断設定 #
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
① filterテーブルの設定宣言

「これから”filterテーブル”の設定を始めます」という宣言句です。”filterテーブル”とはパケットフィルタリングにおけるパケットの取り扱いを纏めたものの呼称です。他には”nat”テーブル(“Network Adress Translation”) などがあります。

② 外部から内部に来るパケットの制御

外部から内部に来るパケット(自分宛)のフィルタリングを行います。推奨としてはここは”ACCEPT”にせず、”DROP”に設定して通過させたいパケットだけ個別に”ACCEPT”する事でサーバを保護します。
例えば “INPUT”を全て”DROP”にした状態だと、下図の様にTeraTermのSSH認証でIDとパスワードを入力してログインしようとしてもパケットが到達しないため、ずっと応答が帰ってこずに接続できません。

③ 外部から来て自サーバを経由するパケットの制御

外部から来て自サーバを経由するパケットのフィルタリングを行います。推奨としてはここは”ACCEPT”にせず、”DROP”に設定して通過させたいパケットだけ個別に”ACCEPT”する事でサーバを保護します。

④ 内部から外部へ出るパケットの制御

内部(自サーバー)から外部へ出るパケットのフィルタリングを行います。 “OUTPUT”を”DROP”にしてしまうと外部との通信が一切できなくなってしまうため”ACCEPT”にしておきます。
例えば “OUTPUT”を”DROP”の状態だと、下図の様にTeraTermでログインしようとしても、ずっと[接続中]のまま固まり最終的にエラーでSSH認証の画面まで到達しません。

⑤ 外部から内部に来るパケットの内、確立済みのパケットの制御

外部から内部に来るパケットの内、ESTABLISHED(確立済み=既に許可された既存コネクション)とRELATED(未許可だが許可済パケットと関連性がある)パケットのフィルタリングを行います。ちなみに「-m state –state」句はパケットの状態を条件として指定するオプションでNEW、ESTABLISHED、RELATED、INVALID等が指定できます。

⑥ icmpプロトコルの通信の許可設定

「icmp」プロトコルの通信を許可するかどうかを設定しています。「icpm」はpingで利用するプロトコルの事です。以下に「ACCEPT」した場合と「DROP」した場合の結果を掲載します。

◎ACCEPTした場合

◎DROPした場合
パケットが届かないため”Destination Host Prohibited”と表示されます。

⑦ ループバックの設定

ループバックとは「送信元」と「送信先」が同じ、つまり自分自身に戻ってくる通信の事です。「-i」オプションはインターフェイスを指定するための句で「eth0」「eth1」「lo」が選択可能です。ここで選択している「lo」はローカルループバックと呼ばれる仮想のインターフェイスで、主にテストのために設けれられており、IPアドレス「127.0.0.1」が割り当てられています。

⑧ INPUTに対しプロトコルとポート番号を指定して制御

オプション「-m」で拡張パケットマッチングモジュールを使用できます。例えば「-m multiport」と記述すると後の「–dport」にて複数ポート番号を記載出来たりしますが、今回は単に「-m tcp」と書いてtcpを有効化しています。

オプション「-p」でプロトコル(tcp)を指定しています。「tcp」を指定した事により後に続く「–dport」句を指定する事が出来ます。

⑨ INPUTに対しエラータイプを指定した遮断設定

INPUTの内、この行より上で個別許可したパケット以外は全て遮断(REJECT)するという意味です。

⑩ FOWARDに対しエラータイプを指定した遮断設定

FOWARDの内、この行より上で個別許可したパケット以外は全て遮断(REJECT)するという意味です。

目次にもどる

(3) “iptables”の設定変更方法

設定方法は別の記事で解説済みのため、今回は割愛させて頂きます。お手数ですが下記の①・②のいずれかをご参照ください。

【記事①題名】APサーバ(Java)⇒DBサーバ(OracleDB 11g)へJDBC接続する方法まとめ
【記事①URL】http://rainbow-engine.com/33552171-2/#title4

【記事②題名】さくらVPS(Linux)にリモートデスクトップ環境を構築する方法
【記事②URL】http://rainbow-engine.com/setup-remote-desktop-linux/#title6

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-01_IT技術 (Technology), 01_Linux

執筆者:


comment

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

関連記事

PythonにOpenCVを導入して画像を読込み&表示&拡大縮小してみる

(0)目次&概説 (1) OpenCVとは (2) OpenCVのインストール  (2-1) インストール資源の入手  (2-2) インストール時の注意事項  (2-3) インストールの実行 (3) …

Linux基礎コマンド(第4回) viエディタの操作・ログの取得

初めてLinuxを触る人向けにTeraTermのログイン方法からコマンドを入力する方法まで数回にわたり解説していきます。本記事はその第4弾で、viエディタの使い方を簡単に紹介します。第1弾の記事はこち …

Windows Server2012で仮想サーバーのメモリ割当ての変更をする手順

(0)目次&概説 (1) 前提条件 (2) メモリ割当ての変更手順  (2-1) 事前作業(ログ取得)  (2-2) 仮想サーバーの停止  (2-3) リソース変更  (2-4) 仮想サーバーの起動 …

VBAで画像を分類に応じて適切なフォルダに仕分けるプログラム

(0)目次&概説 (1) マクロ概要 (2) 使用方法 (3) アルゴリズム概要 (4) プログラム (1) マクロ概要 本マクロは画像ファイルを適切なフォルダに仕分けるためのマクロです。前提として、 …

Linux – シェルスクリプト入門(Hello World/引数・変数/条件分岐/繰り返し処理)

シェルスクリプトの作成方法について ■目次 (1)シェルスクリプトでHello World (2)シェルスクリプトで変数/引数を使う (3)シェルスクリプトで条件分岐を記述 (4)シェルスクリプトで繰 …

Top