2013/08/29

iptablesでban/unban

サーバーをクラッカーから守る手段として基本となるツールがiptablesとかTCPラッパーなどのツールだと思います。
散々既出で今更感どころじゃないですが、まとめる事で自分の中で整理する事と、100人いれば100通りの解説があって、私の解説がきっと誰かに届くと思って今回はiptablesをまとめました。




iptablesの基本形

iptablesコマンドを発行する際の基本形は以下の通りです。
iptables [チェインに対する動作と対象のチェイン] [条件] [処理]

基本形はどういう時に使うかというと、実際にban/unbanする時を想定しています。
iptablesを利用する際に、まず取っ掛かりになるのは、おそらく特定のIPアドレスからの通信をbunする事でしょうから、ここから解説します。

説明の便宜上、「チェインに対する動作」「条件」「処理」というように分けましたが、すべてコマンドラインオプションなので、順不同です。書きたいとこから書いていい訳ですが、ややこしくなるので自分ルールを作ったほうがいいと思います。

なお、基本形と読んでいますが完全なる私の決めつけです。よそで言えば恥ずかしい思いができます。

以下は、よく使うコマンドの形です。
#特定のIPアドレスからのTCPプロトコルのパケットを全て拒否する(基本形)
iptables -A INPUT -p tcp -s [banするIP] -j DROP

#現在の設定を確認する
iptables -L -n    # -nは任意。付けるとDNS問い合わせをしないのでレスポンスが早い
iptables -nL    # -nと-Lを同時に指定できる

#不要なルールを削除する
iptables -L -n --line-numbers    #削除するルールのチェインと番号を確認
iptables -D [チェイン] [ルールの番号]

オリジナルのユーザー定義チェインなどを利用する場合は、ここでは解説しませんので再度ググってください。


よく使うチェインに対する動作で利用するオプション

-A [チェイン]
指定したチェインにルールを追加
-D [チェイン] [ルール/ルール番号]
指定したチェインのルールを削除
-P [ターゲット]
指定したチェインのポリシーを変更
-N [チェイン名]
続く名前のユーザー定義チェインを作成
-X [チェイン名]
指定したユーザー定義チェインを削除。チェイン名を省略すると全てのユーザー定義チェインを削除

-Pでいうポリシーは、デフォルトの動作の事。たとえば以下のような場合だと
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

この場合のポリシーはACCEPT。つまり、条件にマッチしないパケットは受け入れるという状態で、条件がないので全て受け入れるという状態。

-Dオプションを指定する場合は、ルール番号で簡潔に指定する事もできます。そっちの方が分かりやすいと思います。
ルール番号については、もう少し下の方で説明します。


条件で利用するオプション

-p [プロトコル]
対象にする通信プロトコルを指定
-s [IPアドレス/ホスト名]
パケット送信元IPアドレス(もしくはホスト名)を指定
-d [IPアドレス/ホスト名]
パケット送信先IPアドレス(もしくはホスト名)を指定
--sport [ポート番号]
パケット送信元のポート番号を指定
--dport [ポート番号]
パケット送信先のポート番号を指定

manページには、-sや-dにホスト名を指定して毎回DNSに問い合わせるような指定はよろしくないと書いてあります。そりゃそうですね。劇的に遅くなる事うけあいです。
-sと--sportは相手の情報を条件にするオプションで、-dと--dportが(大抵の場合)自分の情報を条件にするオプションです。
sはsource、dはdestinationの頭文字です。

-p、-s、-dオプションには「!」で除外する指定もできます。


処理で利用するオプション

-j [ターゲット/ユーザー定義チェイン]
指定した条件に合致するパケットに対して、続く処理を行う

-jオプションがなくてもコマンドとして成立はしますが、何もしない設定が登録されるだけで無意味です。-jがないのは、ポリシーを変更するときや設定を確認する時くらいです。


ポリシーの変更や処理で利用する動作(ターゲット)の種類

ACCEPT
パケットを通す
DROP
パケットを捨てる
QUEUE
パケットをユーザー空間に渡す(よくわからない)
RETURN
現在のチェインを辿るのを中止して、前のチェインの次のルールから再開する

条件にマッチした場合に起こすアクションの事をターゲットというようです。
前述の-jオプションにくっつけて指定します。
ACCEPTとDROPで単純な制御なら事足りるような気もします。
その他、拡張されたターゲットというのも存在して、ログを吐いたりリダイレクトしたり、かなり強力です。
ターゲットにはユーザー定義チェインも設定できます。


その他のオプション

-L
現在設定されているルールを表示
-n
IPアドレスやポート番号を数字で出力する
-F [チェイン]
選択されたチェインの内容を削除。チェインの指定がない場合は全て削除する
--line-numbers
ルールの番号を表示する。-Lと併用


他にも山ほど機能があるiptablesですが、そもそもテーブルの事なんかすっ飛ばしているし、解説していない項目なんて山ほどあります。
カジュアルに使える内容だけ抜粋してまとめました。
すべての情報を網羅しているのはmanページだけだと思いますので、そちらへのリンクを張っておきます。→ Man page of IPTABLES

see also:
[Linux]fail2banを使ってqmailへのブルートフォースアタックを阻止する


0 件のコメント:

コメントを投稿