title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2024/03 >>12345678910111213141516171819202122232425262728293031
《《《 ネットワーク機器の購入は Amazon で! 》》》
Powered by BLOM Proxy Server を作ってみました。
小さくも大きくも閉じたりもしません
12/09/18 13:48 / その他のソフト

PMail Server には、Inbound Block が実装されていますので、まったくもって問題無いのですし、Apache2 にも IPブロック単位で deny できますので問題無いのですが、うちで利用している FTP サーバーにはこの機能がありません。
(動的フィルタはあるんですが)

やりたいのは、FTP の Port21 を日本国内以外を全てブロックしたいのです。

netsh advfirewall を使って、ブロックかましているのですが、netsh のログがいまいち気に入らない(^-^;
あと、Subnet Mask or CIDR でしか設定できないので、192.168.0.57 - 192.168.1.11 というレンジ設定も出来ないのが気に入らないのです。(複数のサブネットマスク跨いでブロックするには、複数行記述しなければならない)

てなことで、Proxy Server を作ってみることにしました。
というても、もう作ったのですが。

最初、全然動かなくて「なんでだ!」と1日ほど悩んでいたのですが、なんてことは無く、bind() を複数箇所で実行していただけという体たらくぶりです。
PMail Server のコアを利用して作っているので2日(実質1日)で出来上がっている訳ですが。

Proxy Server ソフトは他のサーバーと比べてソフトの数が少ないので、余り馴染みが無いのですが、動作原理としては・・・

1)サーバー側で特定のポートを開いて待機する。
ただし、例えば FTP の場合、Port21 で待機する必要がありますので、Proxy 側で 21 を開き、FTP 側では 10021 のようにポートを変更する必要があります。

2)サーバー側で待機しているポートに接続があったら、accept() して受け付けます。
同時に、Proxy 先?のポートに connect() して接続をします。

3)後は単純に、accept() したソケットからデータが流れてきたら、connect() したポートにそのまま流すだけです。

元々 Proxy Server は HTTP のキャッシュなども行う目的がありましたが、その場合は、クライアントから要求された HTTP コマンドから URL を抜き出して、Proxy Server が持つ Cache と一致した場合は、Proxy 先のポートに connect() せずに、Cache をそのまま送り返すという仕組みです。

取りあえず、試作品では Proxy 先を 127.0.0.1 に限定しているのですが、IP も指定できるようにすれば、トンネル的なソフトにもなります。
更にクライアント側も作って、TLS などで暗号化送受信すれば VPN にもなる感じですね。(多分)
パケットを更にパケットで包まず、パケットのヘッダを書き換えるようにすれば、あらびっくり NAT にもなるって代物です。

取りあえず簡単に IP アドレスでブロックしたい為に作ったので、それが実現できれば満足なのですが、ちょっとネタ的に面白いので、ちょいちょいと機能を実装していこうかと思います。

[更新日付:2012/09/18 13:48:55]
トラックバックを見る(0)
Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+dc7cefff1a0b0e96f7e7ff859d2f11437e7aab0d]
TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+dc7cefff1a0b0e96f7e7ff859d2f11437e7aab0d]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.