PfSample
をテンプレートにして作成
Start:
*PFを使用したアドレス変換の例
仕事で必要になりそうなんで、予備実験の後ちょびっと書いて...
**要件
-異なるネットワークに属するホストA、ホストB間で通信したい。
-通信は両方のネットワークに接続されたゲートウェイで中継す...
-ホストA、ホストBのルーティング設定などをいじりたくないた...
--Host Aは同一ネットワーク内に属するゲートウェイのL側(下...
--同様に、Host BからはゲートウェイのR側と通信しているよう...
-使用プロトコルはHTTP及びFTPを想定。
--Host A及びBではproxyの存在などを意識せず、透過的に通信...
-プロトコルとして、アクティブモードのFTPを使用することが...
--そのため、Host A, Host BのどちらからでもTCPのセッション...
**システム構成
下図のとおり
addr_A addr_B
+------+ +-------+ +------+
|Host A|------->|GateWay|------->|Host B|
| |<-------| |<-------| |
+------+ +-------+ +------+
if_L if_R
addr_L addr_R
ネットワーク構成図
(表記)
-Host A, Host BのIPアドレスをそれぞれ、addr_A, addr_Bとする
-GatewayのHost A側のネットワークインターフェース名をif_L...
同様に、Host B側のネットワークインターフェース名をif_R、...
**ソリューション
-A->B方向の変換
--始点 addr_A, 終点 addr_L のパケットを if_L にて Host B...
rdr pass on if_L from addr_A to addr_L -> addr_B
''pass''は、フィルタリングルールをバイパスするための指定
--rdrによって向け直されたパケットは始点アドレスがaddr_Aの...
Host Bからの復路のパケットの終点アドレスがaddr_Aとなり、...
よって往路のパケットがif_Rを通過する時に、始点アドレスを...
binat pass on if_R from addr_A to addr_B -> if_R
binatを使用するのは、アドレス変換に伴いポートが変ってしま...
-B->A方向の変換
--B->A方向にもセッションを張れるようにするためには、
A->Bで挙げた例と対称な記述を付け加える。
rdr pass on if_R from addr_B to addr_R -> addr_A
binat pass on if_L from addr_B to addr_A -> if_L
**実行結果
-HTTPに関しては、問題なく実行できた
-FTPは、ログインまでは可能であったが、ディレクトリの一覧...
--FTPではデータコネクションを張るときにPORTコマンドを相手...
→ FTPに関してだけは ftp-proxy(8)を使用する必要がある。
**感想とか
-PFでは、フィルタリングルールはlast matchだが、nat ruleは...
-FTPマンドクセ
End:
*PFを使用したアドレス変換の例
仕事で必要になりそうなんで、予備実験の後ちょびっと書いて...
**要件
-異なるネットワークに属するホストA、ホストB間で通信したい。
-通信は両方のネットワークに接続されたゲートウェイで中継す...
-ホストA、ホストBのルーティング設定などをいじりたくないた...
--Host Aは同一ネットワーク内に属するゲートウェイのL側(下...
--同様に、Host BからはゲートウェイのR側と通信しているよう...
-使用プロトコルはHTTP及びFTPを想定。
--Host A及びBではproxyの存在などを意識せず、透過的に通信...
-プロトコルとして、アクティブモードのFTPを使用することが...
--そのため、Host A, Host BのどちらからでもTCPのセッション...
**システム構成
下図のとおり
addr_A addr_B
+------+ +-------+ +------+
|Host A|------->|GateWay|------->|Host B|
| |<-------| |<-------| |
+------+ +-------+ +------+
if_L if_R
addr_L addr_R
ネットワーク構成図
(表記)
-Host A, Host BのIPアドレスをそれぞれ、addr_A, addr_Bとする
-GatewayのHost A側のネットワークインターフェース名をif_L...
同様に、Host B側のネットワークインターフェース名をif_R、...
**ソリューション
-A->B方向の変換
--始点 addr_A, 終点 addr_L のパケットを if_L にて Host B...
rdr pass on if_L from addr_A to addr_L -> addr_B
''pass''は、フィルタリングルールをバイパスするための指定
--rdrによって向け直されたパケットは始点アドレスがaddr_Aの...
Host Bからの復路のパケットの終点アドレスがaddr_Aとなり、...
よって往路のパケットがif_Rを通過する時に、始点アドレスを...
binat pass on if_R from addr_A to addr_B -> if_R
binatを使用するのは、アドレス変換に伴いポートが変ってしま...
-B->A方向の変換
--B->A方向にもセッションを張れるようにするためには、
A->Bで挙げた例と対称な記述を付け加える。
rdr pass on if_R from addr_B to addr_R -> addr_A
binat pass on if_L from addr_B to addr_A -> if_L
**実行結果
-HTTPに関しては、問題なく実行できた
-FTPは、ログインまでは可能であったが、ディレクトリの一覧...
--FTPではデータコネクションを張るときにPORTコマンドを相手...
→ FTPに関してだけは ftp-proxy(8)を使用する必要がある。
**感想とか
-PFでは、フィルタリングルールはlast matchだが、nat ruleは...
-FTPマンドクセ
Page: