2009/07/17
Zope (Plone) でPASV(Passive)ポートを制限する方法
by
jack(moblog)
—
posted at
2009-07-17 08:15 PM
Plone や Zope を使っていると、FTPでファイルをやりとりできるのがとても便利なことがあります。
ただ、欠点があって、Passive mode で port の min, max を設定できないのが不便です。
まぁ、Firewall との兼合いで、どうせ数人しかFTPでアクセスしないから、20 portsくらいに 絞りたい、とかそういう話です。
で、結論からいうと、マトモな方法ではできません。ソースいじるしかないです。
なぜなら、そういう設定項目がないから(笑)
bind の port に無条件で 0 が渡されているので、範囲を指定するように 変更します。
ただ、欠点があって、Passive mode で port の min, max を設定できないのが不便です。
まぁ、Firewall との兼合いで、どうせ数人しかFTPでアクセスしないから、20 portsくらいに 絞りたい、とかそういう話です。
で、結論からいうと、マトモな方法ではできません。ソースいじるしかないです。
なぜなら、そういう設定項目がないから(笑)
$ZOPE_HOME/lib/python/ZServer/medusa/ftp_server.py
をいじります。bind の port に無条件で 0 が渡されているので、範囲を指定するように 変更します。
jack in medusa % diff -c ftp_server.py.org ftp_server.pyお勧めするような方法じゃないですが、とりあえず、動きます。
*** ftp_server.py.org Fri Jul 17 20:05:21 2009
--- ftp_server.py Fri Jul 17 20:09:36 2009
***************
*** 817,825 ****
self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
# bind to an address on the interface that the
# control connection is coming from.
self.bind ((
self.control_channel.getsockname()[0],
! 0
))
self.addr = self.getsockname()
self.listen (1)
--- 817,829 ----
self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
# bind to an address on the interface that the
# control connection is coming from.
+ #### patch to bind()'s port line
+ from random import randint
+ port = 0 # original
+ port = randint(20030, 20050) # change here for your firewall.
self.bind ((
self.control_channel.getsockname()[0],
! port # changed 0 to randint
))
self.addr = self.getsockname()
self.listen (1)
- Category(s)
- Python/Zope/Plone
- The URL to Trackback this entry is:
- http://ns.jk.to/Nikki/moblog2009-07-17-20-15/tbping