linuxの最近のブログ記事
潰れてもスクラッチからインスコする--転んでも泣かない--為の備忘録。White Box Enterprise Linux Liberation Respin 1で作業したときのもの。恐らく他のRedHat互換のディストロでも同様だと思われる。
ソースの入手先: Qualcommのサイト
目標: APOPとTLSのサポート
./configure
$ export CFLAGS=-I/usr/kerberos/include $ ./configure --enable-apop=/etc/pop.auth \ --enable-popuid=pop \ --with-openssl=/usr/share/ssl \ --enable-log-login \ --enable-specialauth
最初の行はヘッダが読めずにコンパイルでエラーになってしまう現象への対策。(Kerberos関連ヘッダを読み込ませる)ユーザIDは標準パッケージで登録されていたpopをそのまま使用、これがないとコンパイルでこけるらしい。(未確認)log-loginは過疎サーバの為。
何もしないとmake installでmanファイルをコピーするところでエラーになるはず。makeを流す前にMakefileを開けてmandirを修正しておく。
xinetd絡みの設定
過疎サーバなのでデーモンにしないでスーパーサーバ配下で動かす。pop3用は元からあったipop3を書き換え、TLS用はpop3sとして新規作成。ちとかこ悪い。過疎サーバなのでしつこくログるw
/etc/xinetd.d/ipop3
service pop3
{
log_on_success += HOST DURATION
log_on_failure += HOST
disable = no
socket_type = stream
user = root
server = /usr/local/sbin/popper
server_args = -s -R -f /etc/mail/qpopper.conf
wait = no
}
/etc/xinetd.d/pop3s
service pop3s
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/popper
server_args = -s -R -f /etc/mail/qpopper-tls.conf
log_on_success += HOST DURATION
log_on_failure += HOST
disable = no
}
/etc/mailにqpopper用の設定ファイルを追加
別に/etc/qpopperでも良かったが、何となく思い出しやすそうだったので、/etc/mailにした。
/etc/mail/qpopper.conf (POP3用)
set shy = true
これだけ。こういう仕事はシャイな奴(バージョン番号を言わない)に任せるに限る。
/etc/mail/qpopper-tls.conf
set shy = true set tls-support = alternate-port set clear-text-password = ssl set tls-version = default set tls-server-cert-file = /etc/mail/qpopper.pem
TLSはTLS用の標準ポートで待ち受け。暗号化されているときのみクリアテキストのパスワードを受け付ける。サーバ証明書はPEM形式(秘密鍵+証明書)。ApacheやPostfixのと形式が違うので注意。Apache用のserver keyとserver certをくっつけてPEMにすればいい。
構築はこれだけ。忘れそうなパスワード設定コマンドは/usr/local/sbin/popauthだ。あとはmanして思い出す。
本当はUnicode関係が一旦落ち着いたと思われるPerl 5.8.1以降を入れたかった(5.8.0が標準)が、芋づる式に作業が増えそうだったので断念することにした。最新のCPANモジュールが入れられなくて、結構嵌まった。Movabletype絡みでGD(Blogtimes)とImage::Magick(自動サムネイル作成)が必要だったので結構必死だった。GDやImage::Magickは、それぞれのライブラリのdevelの導入と、今インストールされているライブラリのバージョンに応じたCPANモジュール側のバージョンを探して、手動でインストールしなければならない。という一ヶ月前の話w
ディストロで標準装備されているソフトを極力利用して自動セキュリティアップデートをと思っていたが、popサーバについては非標準のQpopperを採用した。理由は、比較的簡単にAPOPとTLSに対応できそうだったからだ。ソースから構築してインストールしてしまったので、セキュリティアップデートは手動--か自分で自動化して--で行う必要がある。この辺りは、自分の我儘と、その代償として余計に注ぎ込む事になる自分の時間とのバランスだと思う。
RH9用Xfce4のダウンロードページから全ファイルを適当なディレクトリに放りこんで、大胆に"rpm -Uvh *"で無問題。
アイコン等のデザインが大幅に変更になっている。アイコン類は改善されたように思う。画面の下端でウインドウとタスクバーがよく喧嘩して苛々していたのが改善された。これだけでもポイントが高い。
本家の手順を参考に実施した。3.3との違いは二箇所。
安定して稼働していたWBELだが、mirrorが短期間に二度事故ったり、セキュリティアップデートが遅いので、思い切ってCentOSに乗り換える事を決心した。仕事絡みの繋がりで地元(シンガポール)の鯖屋とも色々無償のディストロについて議論してみたが、現状CentOSがRedhat互換では一番安心できそうだ。
手順は呆気無い程簡単だ。
#yum clean #rpm --import http://mirror.centos.org/centos-3/RPM-GPG-KEY-CentOS-3 #rpm -Uvh htttp://mirror.centos.org/centos/3.3/os/i386/RedHat/RPMS/centos-release-3.3-1.i386.rpm #rpm -Uvh htttp://mirror.centos.org/centos/3.3/os/i386/RedHat/RPMS/yum-2.0.8-1.centos.3.noarch.rpm
ここで新しいyum.confがyum.conf.rpmnewで作成されている。これをベースにして/etc/yum.confを適宜修正する。贔屓にしているミラーの設定や、除外パッケージ(例: "exclude=kernel*")の指定等・・・。
#yum list updates #yum update (可能なら再起動してみる)
以上で終わる。場所とネットワークの状態にもよるが、シンガポールとアメリカのテキサス州ではそれぞれ全行程30分以内で完了した。Morris先生、今までありがとう。
Postfixの場合、バーチャルドメインの存在しないアカウントであっても、user部分がローカルアカウントとダブっているとローカルアカウントで受け取ってしまうようだ。これが今回のブラックホール作成の動機となった。
前のエントリで紹介した方法は、送ろうとしたサーバに例えば、"554 Service unavailable; Client host [(IP address)] blocked using list.dsbl.org; http://dsbl.org/listing?(IP address);"というメッセージを返してしまう。 普通はこれを喰らった直後に、同一ドメインの別MXに送信しようとしてくるようだ。Service unavailableだから仕方がないのかも知れないが、バックアップMXが自分の管理外だと設定する意味が無くなってしまう。
さて、本当にブラックホールに送るには、受け取った振りをする必要がある。このような場合、一旦受け取るためにはそのメアドを実在するように見せかけるためにvirtualで設定しておかなければならない。
実際のブラックホール処理はパイプラインを使って行う。例えば、blackholeというアカウントを作っておいて、/etc/postfix/aliasesにこう設定しておく。
blackhole: :include:/etc/postfix/blackhole
Postfixでincludeを活かす為にはmain.cfに最低限以下の設定が必要なので注意して欲しい。
allow_mail_to_commands = alias,include
で、肝心の/etc/postfix/blackholeにはこう書く
"| cat > /dev/null"
どや、参ったか。
ローカルドメイン宛で、宛先不明のメールをブラックホールに落すにはmain.cfに以下の設定を追加する。
luser_relay = blackhole
バーチャルドメインでこの設定が出来るともっと平和になるのだが、どうやら無理のようだ。
実は今年に入ってからコソーリこのサーバを11月下旬に借り始めたVPSに引っ越している。SMTPサーバとしてPostfixを選択しているが、面白い設定があったので導入してみた。DNSを利用したオープンリレーサーバ等のブラックリストチェックだ。スパム配信に使われやすいサーバが登録されている。
/etc/postfix/main.cf(抜粋)
smtpd_recipient_restrictions =
permit_mynetworks, permit_sasl_authenticated,
reject_rbl_client spamcop.net,
reject_rbl_client dynablock.wirehub.net,
reject_rbl_client opm.blitzed.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client all.rbl.jp,
reject_rbl_client list.dsbl.org,
reject_rbl_client cn-kr.blackholes.us,
reject_rbl_client brazil.blackholes.us,
reject_rbl_client russia.blackholes.us,
permit_auth_destination,
reject
私のサーバにはまともなメールは一日に多い日で100数十通程度しかこない。はっきり言って使っているブラックリストが多すぎるが、トラフィックが少ないことと、同じサーバでBINDをキャッシュサーバとしても動かしているので許して欲しい。
reject_rbl_clientで並んでいる下の三つは過激だ。中国や韓国、ブラジル、ロシア(スパム多発国)に割り当てられているIPアドレスを持つメールサーバからの配信を全て拒否してしまう。
これを導入してからスパムが激減した。導入前はMUA側のベイジアンフィルターで自動的にごみ箱逝きにするしかなかったのだが、このブラックリストを通過してくるスパムは一日一通から二通の状況が続いている。Postfixを自前で動かしていてスパムに悩まされている方は試してみて欲しい。
同じ原理を応用したMovabletype用のプラグインであるMT-DSBLも導入してみた。その名のとおり、DSBLのみを参照している。ここ数週間はコメントスパムが来ないので、楽しみにして待つことにしたい。
先日、2chに書き込む為のSquidの設定を紹介した。今回は更に一歩進めて、怪しいサイトを巡回するときに使える、送受信時のデータ浄化を行うPrivoxyと、匿名自動多段proxyのTorの設定を紹介してみる。それぞれのツールの詳細については実際に使う前に専門サイトで調べて欲しい。
ここではTorをprivoxyの下請けとして動作させてみる。もちろんlocalhostのユーザはtorを直接利用可能だ。この設定では外部ユーザへのインタフェースとしては単なるhttp proxyということになる。
privoxyもtorもRPMパッケージが存在しているので、パッケージ導入した方が実行ユーザの作成やらinitスクリプトを作成したりする手間が省けるので楽だ。設定も他のサービスアプリに比べると簡単だ。
まず、入口側のprivoxyの設定だが、localhostでしか使わないのであれば、特に触らなくてもデフォルトで動作する。
インターネットに設置しているサーバに設置する際は、当然注意が必要で、アクセスを厳しく制限し、listenするportも変えた方がいいだろう。誰か知らない人がこれを使って爆破予告をする事態を想像して欲しい。
以下に、公開する場合の設定例を挙げる。設定ファイルは/etc/privoxy/configだ。localhostでしか使わない方はtorの設定まで読み飛ばして欲しい。
privoxyの待ち受けアドレスとポートの設定(4.1)
listen-address 1.3.6.9:7743
privoxyのアクセス制限(4.5)
特定のIPアドレスからのアクセスのみ許可する(強く推奨) 。iptables等のファイアウォールでdrop(臭いものに蓋)してしまってもよいが、何かのテストの際に問題切り分けの為一時的にiptablesを外したような場合に問題になる。面倒でもここは手を抜かない方がいいと思われる。iptablesの設定例は後で紹介する。permit-access 127.0.0.1 permit-access 1.2.3.4 permit-access 1.2.4.0/24
次にprivoxyを通した後にtorをかます設定を行う前に、torの設定を見直す。設定ファイルは/etc/tor/torrcだ。
torの待ち受けアドレスとポートの設定
torはlocalhostでしか使わないのでデフォルトのまま。SocksPort 9050 # what port to advertise for application connections SocksBindAddress 127.0.0.1 # accept connections only from localhost
torをデーモン化する設定
privoxyと同時に使うならtorもデーモン化した方がいいだろう。RunAsDaemon 1
続いてprivoxyからtorに中継する設定を行う。再びprivoxyの設定ファイルを開く。
privoxyからtorへの転送設定(5.2)
forward-socks4a / localhost:9050 .
これだけだが、自分のサイトや信頼できるサイト、それからtor経由では書き込めない2ch等には直接アクセスする例外を設定する。(5.1)
forward .2ch.net . forward vartmp.net .
最後にファイアウォール(iptables)の設定を追加して仕上げる。ここではINPUTをDROPするポリシーを前提にしている。先ほどprivoxyに1.3.6.9:7743でlistenさせる設定をし、アクセス制限を加えた。それと整合する設定を追加する。最低限、以下が必要だ。
#/sbin/iptables -P INPUT DROP #/sbin/iptables -A INPUT -i lo -j ACCEPT #/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #/sbin/iptables -A INPUT -p tcp -s 1.2.3.4 --dport 7743 -d 1.3.6.9 -j ACCEPT #/sbin/iptables -A INPUT -p tcp -s 1.2.4.0/24 --dport 7743 -d 1.3.6.9 -j ACCEPT
wgetでも使いたい方は/etc/wgetrcを書き換える。今回の設定例ではlocalhostでlistenさせていないので、localhostから使う場合でも外に出ているインターフェースを使う必要がある。設定ファイルは/etc/wgetrcだ。
http_proxy = 1.3.6.9:7743wgetrcを書き換えると、明示的にオプションを指定しない限り、privoxyが使われる。直接アクセスする際は-Y offのオプションが必要だ。
念のため、自動起動関連の操作も説明しておく。
自動起動スクリプト確認
#/sbin/chkconfig --list
自動起動スクリプト登録
#/sbin/chkconfig --add privoxy #/sbin/chkconfig --add tor
自動起動スクリプト設定
#/sbin/chkconfig --level 345 privoxy on #/sbin/chkconfig --level 345 tor on
起動
#/sbin/service privoxy start #/sbin/service tor start
参考情報(使用したバージョン)
Privoxy : 3.0.3 (stable) Tor: 0.0.9.2末筆ながら、このような素晴しいツールの作者、並びにtorのネットワークを維持しているonion routersの運営者に感謝したい。
ほぼ毎日使うアプリが大体固まってきた。ここまで色々やってみて思うのは、わざわざLinuxでやる必要はなかったかなという事だ。今回紹介するアプリは全てWindowsでも動作するので、一体何をやっていたのだろうと思う。インスコ厨って奴だろうか。まあ、またWindowsをスクラッチからインスコするのも面倒だし、これから開発環境の整備を行う過程でLinuxで良かった(あるいは、更なるあれがないこれがない攻撃)と思える事があるかも知れないので、しばらくこのままの環境を維持してみようと思う。
