iptables

さくらVPSのプランを乗り換えたので、これを機にiptablesの設定もやっておくかと思い調べた。
だが結局自分のケースではSSHのポート変更とhosts.allowやhosts.denyの設定で事足りることが分かった。
備忘録的に書いておく。

Netfilterとは

パケットフィルタリング、アドレス変換、パケットの操作の処理のサポート。
カーネルに組み込まれるモジュール部分と設定・管理を行うiptablesコマンドの2つの部分に分かれる。

ネットワークパケット流路とフック地点


iptablesOSIの第3階層(ネットワーク層)で動作する。第2階層(データリンク層)を扱いたい場合はebtablesなるものを使うらしい。

以下メモ

>>概念

・テーブル
filter, nat, mangleの3つがある。
それぞれパケットフィルタリング、アドレス変換パケット処理に対応
画像の各フローにリストしたテーブルが、各フローで使える

・チェイン
組み込みチェインとユーザ定義チェインの2つがある。
画像の各フローに対応した組み込みチェインがある。


・ターゲット
ルールに合致したパケットに行う処理のことをターゲットと呼ぶ。

・ルール
パケットの内容との比較条件

                                                                                                            • -

>>チェインの作成・削除・変更
iptables -t filter -N MYTEST
iptables -t filter -X MYTEST
iptables -t filter -E MYTEST HOGE

                                                                                                            • -

>>チェインのルールの操作
・ポリシーの設定
 iptables -P
 chainにはINPUT, OUTPUT, FORWARDのみ指定できる。ユーザ定義チェインは指定できない
 targetにはACCEPT, DROPのみ
 原則ルールの決定です。デフォルトではACCEPTになっていて、何も設定しなければ
 全てを通過させるようになっています。

・ルールの追加
 iptables -A

                                                                                                            • -

>>パケットフィルタリング
2つのモデル
 1.厳密に必要な通信だけを許可する
 2.サーバ内部から外部への通信は全て許可。外部からサーバ内部への通信は
  必要なものだけを許可する。
  
だいたいは2のケースでいいやってなるのかな。個人的な用途のサーバであれば
そんな感じ。

                                                                                                            • -

>>実例
# iptables -N MYCHAIN
# iptables -A INPUT -j MYCHAIN
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
MYCHAIN all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain MYCHAIN (1 references)
target prot opt source destination

//policyはACCEPTとなっていてユルユルの設定。
//これがモデル1であればDROPにしてstrictな設定にする。

# iptables -A MYCHAIN -s 123.123.123.123 -p tcp --dport 22 -j ACCEPT
# iptables -A MYCHAIN -s 0.0.0.0/0 -p tcp --dport 22 -j DROP
//指定したIPからのSSHアクセスをACCEPT
//全てのIPからのSSHアクセスをDROP

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
MYCHAIN all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain MYCHAIN (1 references)
target prot opt source destination
ACCEPT tcp -- 123.123.123.123 anywhere tcp dpt:22
DROP tcp -- anywhere anywhere tcp dpt:22

ひとまず結論

ここまでやって、自宅の固定IPをやめたいのでアクセス元のIPをドメイン指定でできないかと調べたが、全てのパケットに対して名前解決をするのはとても非効率だということが書いてあったのでiptablesで設定するのはやめにした。。
ドメイン指定はやってできなくはないみたい。でもhosts.allowやhosts.denyレベルでいいのかなと。