サーバーをクラッカーから守る手段として基本となるツールがiptablesとかTCPラッパーなどのツールだと思います。
散々既出で今更感どころじゃないですが、まとめる事で自分の中で整理する事と、100人いれば100通りの解説があって、私の解説がきっと誰かに届くと思って今回はiptablesをまとめました。
基本形はどういう時に使うかというと、実際にban/unbanする時を想定しています。
iptablesを利用する際に、まず取っ掛かりになるのは、おそらく特定のIPアドレスからの通信をbunする事でしょうから、ここから解説します。
説明の便宜上、「チェインに対する動作」「条件」「処理」というように分けましたが、すべてコマンドラインオプションなので、順不同です。書きたいとこから書いていい訳ですが、ややこしくなるので自分ルールを作ったほうがいいと思います。
なお、基本形と読んでいますが完全なる私の決めつけです。よそで言えば恥ずかしい思いができます。
以下は、よく使うコマンドの形です。
オリジナルのユーザー定義チェインなどを利用する場合は、ここでは解説しませんので再度ググってください。
-Pでいうポリシーは、デフォルトの動作の事。たとえば以下のような場合だと
この場合のポリシーはACCEPT。つまり、条件にマッチしないパケットは受け入れるという状態で、条件がないので全て受け入れるという状態。
-Dオプションを指定する場合は、ルール番号で簡潔に指定する事もできます。そっちの方が分かりやすいと思います。
ルール番号については、もう少し下の方で説明します。
manページには、-sや-dにホスト名を指定して毎回DNSに問い合わせるような指定はよろしくないと書いてあります。そりゃそうですね。劇的に遅くなる事うけあいです。
-sと--sportは相手の情報を条件にするオプションで、-dと--dportが(大抵の場合)自分の情報を条件にするオプションです。
sはsource、dはdestinationの頭文字です。
-p、-s、-dオプションには「!」で除外する指定もできます。
-jオプションがなくてもコマンドとして成立はしますが、何もしない設定が登録されるだけで無意味です。-jがないのは、ポリシーを変更するときや設定を確認する時くらいです。
条件にマッチした場合に起こすアクションの事をターゲットというようです。
前述の-jオプションにくっつけて指定します。
ACCEPTとDROPで単純な制御なら事足りるような気もします。
その他、拡張されたターゲットというのも存在して、ログを吐いたりリダイレクトしたり、かなり強力です。
ターゲットにはユーザー定義チェインも設定できます。
他にも山ほど機能があるiptablesですが、そもそもテーブルの事なんかすっ飛ばしているし、解説していない項目なんて山ほどあります。
カジュアルに使える内容だけ抜粋してまとめました。
すべての情報を網羅しているのはmanページだけだと思いますので、そちらへのリンクを張っておきます。→ Man page of IPTABLES
see also:
[Linux]fail2banを使ってqmailへのブルートフォースアタックを阻止する
散々既出で今更感どころじゃないですが、まとめる事で自分の中で整理する事と、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へのブルートフォースアタックを阻止する
コメント
コメントを投稿