パケットフィルタリングを行うコマンド「iptables」
当サーバでも導入していますが、ファイアウォールを構築する際によく使用する(とされている)iptablesコマンド。
これまでは他所様より拝借してきたスクリプトを走らせて設定を行っていますがハッキリ言って中身を深く理解していませんでした。
今回のサーバOSのアップグレードに伴って設定の見直しを行う中でこの「iptables」コマンドについて調べてみようと思い立ちましたので忘れないうちに書き残しておこうと思います。
そもそもパケットフィルタリングとは?
セキュリティに関する話でよく出てくるパケットフィルタリングですが、一体どういうものなんでしょ?まずはそこから調べてみました。
どんな働きをするかというと
- パケットが外から入ってくるとき(INPUTチェイン)
- パケットが外へ出て行くとき(OUTPUTチェイン)
- インターフェース間を跨ぐとき(FORWARDチェイン)
に、それらのパケットをどう処理するか(受け入れるのか?破棄するのか?)を定義する設定なんだそうです。
3の「インターフェースを跨ぐとき」ってのがよく分からなかったんですが、外部から始まった通信でそのまま応答を返すときみたいな解釈でいいんですかね?なんだかピンときません。
ということで実例を見ながら慣れていければ・・・と思い、いくつか例を拾ってきましたのでこれらを見ていこうと思います。
例 特定のホストからHTTPへの接続を遮断する
以下の例を見てみます。
$ iptables -t filter -I INPUT -p tcp -s 123.123.123.123 --dport 80 -j DROP
なんだかウダウダ書いてありますので順を追って見てみましょう。
-t filter
「filterテーブルを操作して新しいフィルタリングのルールを定義するよ」ぐらいのかんじです。
-I INPUT
「INPUTチェインにルールを追加するよ」という意味です。ちなみに「-I」でルールの先頭に、「-A」で末尾に追加されます。
入れる順番で挙動が変わってきますので注意しましょう。
-p tcp
「TCPに関するルールだよ」という意味になります。その他、設定したいプロトコルに応じて値を変えます。
-s 123.123.123.123
「対象とするパケットの送信元は123.123.123.123だよ」という意味です。特に指定しなければ全てを対象とします。
--dport 80
「80番ポートに対するパケットを対象とするよ」という意味合いです。ここでフィルタリングの対象とするポートを指定します。
-j DROP
「上記のルールにマッチしたパケットは破棄するよ」という意味です。他の値として「」「」があります。
以上を纏めると・・・
「『IPアドレス:123.123.123.123からTCPによる80番ポートへのアクセスがあった場合(要するにHTTPに関するパケット)、送信元には通知せずパケットを破棄する!』というルールをfilterテーブル内INPUTチェインの先頭に追加します」
といったところでしょうか。ある特定のホストをHTTPに接続させたくない!という場合はこんな感じで設定してやると、相手は自分のサイトを見ることができなくなります。
なんだか嫌がらせみたいですね~。
他にも色々な使用法がありそうなので、暇を見つけて色々と検証してみたいもんです。
もちろんパケットフィルタリングだけでセキュリティばっちり!なんてことはありえませんので、そこのところはお間違えの無きよう・・・