スキップしてメイン コンテンツに移動

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へのブルートフォースアタックを阻止する


コメント

このブログの人気の投稿

[VB.NET]オレオレ証明書でSSL通信するための短絡的な解決法

VB.NETソフトウェアでサーバーと通信することはよくある事だと思いますが、最近はHTTPを使って明けっ広げに刺しに行くよりHTTPSを使って暗号化してこそこそやった方が時代の流れに即した感じですよね(違うか)。 いちいちテスト環境でSSL証明書を用意するのも面倒だということで、セキュリティ的には全くよろしくない方法で迂回できるので紹介します。

[JS]Canvasでよく使う描画テクまとめ

HTMLで画像をいじくりたい時は、canvasを利用して編集するのは一般的ですが、WindowsストアアプリではHTML+CSS+JSでのアプリ開発ができる事もあって、簡単な画像編集であれば、C#やVBを使うより分かりやすいし資料が多く、C++でDirectXをガリガリ書くよりお手軽。入出力もファイルピッカーを使えば簡単に実装できます。今回は、Windowsのコードではなく、Canvasを利用する時のJavaScriptを使いどきに合わせてまとめていきます。

curl の基本的な使い方 -設定編-

今回のcurl TIPSは、curlをより日常的に使っていくためのHow toです。curlには、数多くのオプションが用意されていて、それらを組み合わせる事で様々な事が楽になるでしょう。サービス監視の自動化などにはまさにcurlの得意分野です。 今回は、curlを更に自分のものにしていくために大事なカスタマイズの部分を解説します。