2011年10月4日火曜日

ひさびさに投稿してみました。

ここ数年のずっと考えていたのは今後どういう方向性で自分たちの仕事を進めていくのか?ということです。

こちらのblogは主に技術的なトピックを中心にその記録的な位置付けでやってきたのですが、
今後はもうちょっと間口を広げて試行錯誤している過程自体も取り上げていこうと思います。

ここ数年かつてあったような、コンピュータやネットワークへの情熱も良くも悪くも落ち着いてきました。 それは日常の業務を技術的に「こなす」だけならそれほどの意思をもたなくても、できるようになったことも ありますし、個人的には最近技術的にわくわくするようなことも多くなくなってきたからです。

ですので、ここ2,3年は今後の自分の身の振り方を模索する過程となっています。
わかっているのは、これからに向けていろいろな意味で、今までの自分たちのやり方では駄目で、
さまざまなことをパラダイムチェンジさせていかなけらばならない、ということです。

しかも、そのパラダイムチェンジを成し遂げるためには、大きな決意と、普段からの地道な努力が 必要だということ。ただその方向性の見極めには慎重をきさないといけないということ。
けれどもそれは立ち止まってではなく、少なくとも歩きながらなされないといけません。

だけで、海図なき航海のはかなさににて、それは時にとても孤独だし、不安にもなります。
ただ現状の延長線上に明るい未来は難しいと思うのが正直なところです。

日々技術やノウハウはコモディティ化し、陳腐化が早いです。
しかし、原理、原則はかわりません。でも、自分の基礎的な力はまだまだ低く、
こちらの養成はかかせません。 厳しい道のりだとは思いますが、
模索しつづけたいと思います。

2009年11月12日木曜日

qmail + vpopmail + sophos anti virus + spamassassin + ezmlm + ezmlm-idx+ qmail-scanner + tcpserver + checkpasswd

今はもっといい方法があるかも

qmail + vpopmail + sophos anti virus + spamassassin + ezmlm + ezmlm-idx
+ qmail-scanner + tcpserver + checkpasswd

ご覧のとおり長い作業が必要です。

install qmail-1.03

tar zxvf qmail-1.03.tar.gz
cd qmail-1.03

大規模配信用patchの適用
patch < ../big-concurrency.patch

error.hの書き換え

>extern int errno;
#include %lt;errno.h>

○qmailユーザーの作成
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias -s /bin/true alias
useradd -g nofiles -d /var/qmail -s /bin/true qmaild
useradd -g nofiles -d /var/qmail -s /bin/true qmaill
useradd -g nofiles -d /var/qmail -s /bin/true qmailp
groupadd qmail
useradd -g qmail -d /var/qmail -s /bin/true qmailq
useradd -g qmail -d /var/qmail -s /bin/true qmailr
useradd -g qmail -d /var/qmail -s /bin/true qmails

○ローカルタイム関連のパッチを当てる
cd qmail-1.03
patch -p1 < ../qmail-date-localtime.patch

○make setup check

○config-fastで設定
[root@server qmail-1.03]# ./config-fast server.sample.com
Your fully qualified host name is server.sample.com.
Putting server.sample.com into control/me...
Putting sample.com into control/defaultdomain...
Putting sample.com into control/plusdomain...
Putting server.sample.com into control/locals...
Putting server.sample.com into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to server.sample.com.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

○大規模配信用設定
vi /var/qmail/control/concurrencylocal
vi /var/qmail/control/concurrencyremote


○管理者用アドレスの設定
#cd /var/qmail/alias
# echo "hoge@sample.com" > .qmail-postmaster
# echo "hoge@sample.com" > .qmail-mailer-daemon
# echo "hoge@sample.com" > .qmail-root
# chmod 644 .qmail-postmaster .qmail-mailer-daemon .qmail-root

○sendmailの置き換え
#cd /usr/sbin
# mv sendmail sendmail.orig
# ln -s /var/qmail/bin/sendmail sendmail
# ls -l sendmail
lrwxrwxrwx 1 root root 23 Sep 7 15:17 sendmail -> /var/qmail/bin/sendmail

○qmailの起動
cp qmail-1.03/home /var/qmail/rc
sh /var/qmail/rc &

「./Mailbox」は「./Maildir/」に。「./Maildir/」の末尾の「/」はdirであることを示す
ために必要。
止めるときには、qmail-sendプロセスをkill

○checkpasswordの導入
# tar zxvf checkpassword-0.90.tar.gz
error.hの書き換え
>extern int errno;
#include

# cd checkpassword-0.90
# make setup check



○tcpserverの導入
# tar zxvf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
error.hの書き換え
>extern int errno;
#include
# make setup check

○pop3,smtpようのアクセスデータベースの作成

-----------/etc/tcp.pop3-----------------start
:allow
-----------/etc/tcp.pop3-----------------end
/usr/local/bin/tcprules /etc/tcp.pop3.cdb /etc/tcp.pop3.tmp < /etc/tcp.pop3

-----------/etc/tcp.smtp-----------------start
192.168.1.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
XXX.YYY.ZZZ.64-71:allow,RELAYCLIENT=""
:allow
-----------/etc/tcp.smtp-----------------end
/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

○tcpserverのもとでのpop3,smtp各サービスの起動
二つともchmod a+x
-----------------/var/qmail/start_pop3---------------------start
#!/bin/sh

/usr/local/bin/tcpserver -v -x /etc/tcp.pop3.cdb \
-R -H 0 pop3 /var/qmail/bin/qmail-popup \
server.sample.com \
/bin/checkpassword /var/qmail/bin/qmail-pop3d \
Maildir 2>&1 \
|/var/qmail/bin/splogger pop3d 3 &
-----------------/var/qmail/start_pop3---------------------end


-----------------/var/qmail/start_smtp---------------------start
#!/bin/sh

#qmail main program "kill qmail-send.pid"
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue"
export QMAILQUEUE
/bin/csh -cf /var/qmail/rc &


/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb \
-R -H -u 505 -g 504 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1 \
|/var/qmail/bin/splogger smtp 3 &
-----------------/var/qmail/start_smtp---------------------end

○Qmail-Scannerの導入
前提条件
・qmail
・perl
・Time::HiRes
・DB_File
・reformime (maildropに含まれる)
・unzip
・Sys::Syslog
・TNEF

・maildropの導入
#tar jxvf maildrop-1.8.1.tar.bz2
#cd maildrop-1.8.1
#./configure
#make
#make install

・qmailへのパッチ
#cd qmail-1.03
#patch -p1 < ../qmailqueue-patch
#make setup check

○これはつかわない
・sophos anti virusのインストール
#tar xvf linux.intel.libc6.glibc.2.2.tar
#cd sav-install/
#./install.sh -ni

・spammassassinのインストール
うちには既に入っていたので、一応update
#yum update spammassassin
groupadd spamd
useradd -g spamd spamd
/etc/sysconfig/spamassassinの書き換え
SPAMDOPTIONS="-d -c -m5 -H /home/spamd -u spamd"


・qmail-scanner本体のインストール
# groupadd qscand
# useradd -g qscand -s /bin/false qscand
# tar zxvf qmail-scanner-1.25.tgz
# cd qmail-scanner-1.25
#./configure --install --add-dscr-hdrs yes --admin postmaster
# /var/qmail/bin/qmail-scanner-queue.pl -g

・qmail-scannerのラッパーの導入
# cd qmail-scanner-1.25/contrib
# make install
# cd /var/qmail/bin
# chmod 0755 qmail-scanner-queue.pl

・qmail-scanner-queue.pl スクリプトの
先頭を
#!/usr/bin/perl
にして「-T」を取る。

・テスト
# cd /usr/local/src/qmail-scanner-1.25/contrib
# ./test_installation.sh -doit

○vpopmailのインストール
# groupadd -g 89 vchkpw
# useradd -u 89 -g vchkpw -d /home/vpopmail -m -s /bin/bash vpopmail
# tar zxvf vpopmail-5.4.10.tar.gz
# ./configure --enable-clear-passwd=n \
--enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp \
--enable-relay-clear-minutes=40 \
--enable-roaming-users=y \
--enable-qmail-ext=y \
--enable-domainquotas

vpopmail 5.4.10
Current settings
---------------------------------------

vpopmail directory = /home/vpopmail
uid = 89
gid = 89
roaming users = ON --enable-roaming-users
tcpserver file = /home/vpopmail/etc/tcp.smtp
open_smtp file = /home/vpopmail/etc/open-smtp
rebuild tcpserver file = ON --enable-rebuild-tcpserver-file (default)
password learning = OFF --disable-learn-passwords (default)
md5 passwords = ON --enable-md5-passwords (default)
file locking = ON --enable-file-locking (default)
vdelivermail fsync = OFF --disable-file-sync (default)
make seekable = ON --enable-make-seekable (default)
clear passwd = OFF --disable-clear-passwd
user dir hashing = ON --enable-users-big-dir (default)
address extensions = ON --enable-qmail-ext
ip alias = OFF --disable-ip-alias-domains (default)
domain quotas = ON --enable-domainquotas
auth module = cdb --enable-auth-module=cdb (default)
auth inc = -Icdb
auth lib =
system passwords = OFF --disable-passwd (default)
pop syslog = show only failed attempts
--enable-logging=e (default)
auth logging = ON --enable-auth-logging (default)


#make
#make install-strip

・起動スクリプトの変更
----------------/var/qmail/start_pop3--------------start
#!/bin/sh

/usr/local/bin/tcpserver -v -x /etc/tcp.pop3.cdb \
-R -H 0 pop3 /var/qmail/bin/qmail-popup \
server.sample.com \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d \
Maildir 2>&1 \
|/var/qmail/bin/splogger pop3d 3 &
----------------/var/qmail/start_pop3--------------end


----------------/var/qmail/start_smtp--------------start
#!/bin/sh

#qmail main program "kill qmail-send.pid"
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue"
export QMAILQUEUE
/bin/csh -cf /var/qmail/rc &


/usr/local/bin/tcpserver -v -x /home/vpopmail/etc/tcp.smtp.cdb \
-R -H -u 505 -g 504 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1 \
|/var/qmail/bin/splogger smtp 3 &
----------------/var/qmail/start_smtp--------------end



・pop before smtpのデータ削除用プログラムのcron登録
40 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null


・vpopmailの管理
domainの追加(rootで)
#/home/vpopmail/bin/vadddomain sample.com
userの追加(root,vpopmailいずれかで)
$ /home/vpopmail/bin/vadduser hoga@sample.com password_string



○spamの学習
sa-learn --spam /home/vpopmail/domains/sample.com/spamregist/Maildir/new/
sa-learn --ham /home/vpopmail/domains/sample.com/spamdelete/Maildir/new/


○SPAM、HAMのそれぞれの登録用アドレスを作成し
セット
[root@green ~]# cat spam.sh
#!/bin/sh
/usr/bin/sa-learn -u spamd --spam /home/vpopmail/domains/sample.com/spamregist/Maildir/new/
/usr/bin/sa-learn -u spamd --ham /home/vpopmail/domains/sample.com/spamdelete/Maildir/new/
/bin/rm -f /home/vpopmail/domains/sample.com/spamregist/Maildir/new/*
/bin/rm -f /home/vpopmail/domains/sample.com/spamdelete/Maildir/new/*



○ezmlm-idx
tar zxvf ezmlm-0.53.tar.gz
tar zxvf ezmlm-idx-0.40.tar.gz
cd ../ezmlm-idx-0.40
mv -f ./* ../ezmlm-0.53/
cd ../ezmlm-0.53
patch < idx.patch
vi error.h > #inlcude
make
make man
make setup



pgpool 縮退運転からの復旧 --pg_dumpallを使ったバージョン--

○事前準備
・portなどから、運転しているものと停止しているものを確認(メモ必須)
・psql dbname -> show pool_status;を行い状態確認

下記の例は
/etc/rc.d/init.d/postgresql
が停止していたため復旧作業をおこなったDB(port 5432)
/etc/rc.d/init.d/postgresql2
が生きていたDB(port 5431)

#su - postgres
$pg_dumpall -p 5431 -o -c >dumpall5431.out
$exit
#pgpool stop;
#/etc/rc.d/init.d/postgresql2 stop;
#/etc/rc.d/init.d/postgresql start
#su - postgres
$psql -p 5432 -e template1 < dumpall5431.out
$exit
#/etc/rc.d/init.d/postgresql2 start

注)
・pg_dumpall
-o oidまで取得(DBを完全に一致させる)
-c 最初にDBのdropをつける(つまり上書き設定)
・psql
-e echo コマンド
template1 dummyのDB(上書きされる)

全ての作業はなるたけすみやかに行われるべし

2008年2月21日木曜日

/etc/sysconfig/iptableにおける、*filter と *natの設定例

OP25対策を施す必要がでてきたので、587へのアクセスを25へiptablesを利用して
飛ばす。本当なら、これじゃ駄目だと思うけど、もろもろのことはデータセンター側の
ネットワークでやってくれているので、良しとした。

かなりの精度でspamは遮断できているし、自分のところでもやっている。
/etc/rc.localや、/etc/rc.firewallというやつにOP25対策の部分は
書かれているのだが、頻繁にiptablesを再起動しているので、こちらに書くことにした。

--------------------------------------- ここから -------------------------------------------------------
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT


#Brasil
-A RH-Firewall-1-INPUT -s XXX.XXX.XXX.XXX/15 -j DROP


-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT

COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 25

#-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
---------------------------   ここまで ------------------------------------------------------------

2008年2月7日木曜日

JavaScript:selectの連動させてtableを動的に変更する

selectフォームで選択をするとeventが発生。その際にselectのオプションの値の数だけ、
テーブルを行追加する。


-------------------------------------------------- sample.html -------------------------------------------
<html>
<head>
<meta http-equiv="content-type" content="text/html">
<script type="text/javascript">
var mydoc = document;

function action_tr(){
var table,tbody,tr,td;
var val
val = document.form1.aa.options[document.form1.aa.selectedIndex].value;
table = document.getElementById("tet");
trows = table.rows.length -1;
for(i = trows; i > 0; i--){
table.deleteRow(i);
}
for(i = 1; i < val; i++){
new_row = table.insertRow(i);
new_row.insertCell(0).appendChild(document.createTextNode('AA'));
new_row.insertCell(1).appendChild(document.createTextNode('BB'));
}
}
</script>
</head>
<body>
<form id="form1" name="form1" action="" method="post">
<table id="tet" border=1>
<tr>
<td>
<select name="aa" onChange="action_tr();">
<option value="">-</option>
<option value="2">1</option>
<option value="3">2</option>
<option value="4">3</option>
<option value="5">4</option>
</select>
</td>
<td> dounanoyo
</td>
</tr>


</table>
<div id="tt"></div>
</form >
</body>
</html>
-------------------------------------------------- sample.html -------------------------------------------

2008年2月3日日曜日

JavaScript: window.openで開いた子windowでのフォームの値を親に返す。

Javascriptにおいて、window.openによって、子windowを開き
その子windowでのアクションの結果(例えばフォームでの処理結果)などを親windowに
返すサンプル

parent_window.htmlから子windowを開き、
子window(child_windo.html)内のフォーム(form2)のラジオボタンでチェックした
値を渡すために親windowの関数をwindow.opener.function()を使って実行。ここで
この関数を経由して、親window内のフォーム(form1)の要素に値をセットする。

-------------------- parent_winddow.html start ---------------------------
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<script type="text/javascript">

function select_val(){
var w = window.open("child_window.php", "_blank");
}

function go(val) {
alert(val);
document.form1.bon.value = val;
}

</script>
</head>
<body>
てすと 
<form name="form1" id="form1" >
<input type="text" name="bon" value="init" ><br>
<input type="button" name="" value="open child" onClick="select_val();">
</form>
</body>
</html>
-------------------- parent_winddow.html end ---------------------------




-------------------- chile_window.html start ---------------------------
<html>
<head>
<script type="text/javascript">
function feed(){
for(var i = 0; i < document.form2.aa.length; i++) {
if (document.form2.aa[i].checked == true) {
alert (document.form2.aa[i].value);
window.opener.go(document.form2.aa[i].value);
//document.document.form2.aa[i].value);
}
}
}
</script>
</head>
<body>
<form name="form2" id="form2">
<input type="radio" name="aa" value="bb"> bb<br />
<input type="radio" name="aa" value="cc"> cc<br />
<input type="button" name="" value="戻す" onClick="feed();"> cc<br />
</form>
<body>
</html>
-------------------- chile_window.html end ---------------------------

2008年2月1日金曜日

Postgresqlの移行に際して(文字コードの問題)

PostgreSQL8.1.0からPostgreSQL8.2.1へ
pg_dumpによって、データを移行する際にEUC_JPの文字コードのチェックによる
エラーによって移行ができないケースがあった。

そこで、
strtohex
を古いほうの環境に導入し、移行するテーブルにたいして
select * from members where strtohex(lastname) ~ '8195' ;
みないな感じで、カラムをチェック
そのチェック引っかかった行を削除して、restore
事なきを得る

strtohex

PostgreSQLのsrc/contrib
でtarballを展開し、makeする。

参考URL 
http://ml.postgresql.jp/pipermail/pgsql-jp/2007-June/021713.html