CPAN の PASV 問題
サーバの引越しに伴い、再構築をすることになった。
Perl のモジュールが必要だったため、 CPAN でインストールしようとしたら、 FTP のパッシブモードでモジュールのダウンロードをしようとして NG になっていた。
そういえばファイアウォールの穴を開けていない。というか、全サーバに対して PASV を有効にするのは暴挙と言える。
「自サーバ (Port: 1024 – 65535) から FTP サーバ (Port: 1024 – 65535) への OUT を許可」というカンジになって、 OUT 側のファイアウォール設定が無意味になってしまうからだ。
解決策としては、 CPAN でパッシブモードを使わない設定にするか、ファイアウォールで特定サーバに対して PASV を通す設定にする。
1. ファイアウォールで PASV を使う
お勧めはこっち。
CPAN に設定してある ulist のサーバに対してだけ、全 OUT 許可にした。
ミラーサーバは CPAN Sites から好きなものを選ぶと良いと思う。
1. CPAN の設定確認
# perl -MCPAN -e shell
- CPAN の設定確認
- cpan> o conf
- $CPAN::Config options from '/usr/share/perl5/CPAN/Config.pm':
- 略
- ftp_passive [1]
- urllist ※ 空白だった
2. CPAN の設定
- ftp_passive を 1 にする。
- cpan> o conf ftp_passive 1
- ftp_passive [1]
- Please use 'o conf commit' to make the config permanent!
- urllist を設定する。
- cpan> o conf urllist ftp://ftp.nara.wide.ad.jp/pub/CPAN/
- 設定を保存
- cpan> o conf commit
3. iptables の設定
ちなみに、サーバの基本設定は INPUT/OUTPUT/FORWARD を全て DROP して、必要なものだけ許可する派。
- # for CPAN
- CPAN_PASV_SERVER="ftp.nara.wide.ad.jp"
- # FTP のところに以下を追加
- iptables -A OUTPUT -p tcp -d $CPAN_PASV_SERVER -j ACCEPT
2. CPAN でパッシブモードを使わない
1. CPAN の設定
- ftp_passive を 0 にする。
- cpan> o conf ftp_passive 0
- ftp_passive [0]
- Please use 'o conf commit' to make the config permanent!
- 設定を保存
- cpan> o conf commit
近況
何というか、久々に CPAN にはまっている。
DateTime::Astro がようやく入ったものの、
- DateTime::Calendar::Japanese
- DateTime::Format::Japanese
がどうやっても入らない。
さて、どうしよ。