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

2008年1月11日金曜日

magic-smtpd 導入ログ

http://www.linuxmagic.com/opensource/magicmail/magic-smtpd
こちらを参考にして。

# tar -zxvf magicmail-.tar.gz
# cd magicmail-
# make
# mkdir -p /etc/magic-mail/control
# ./magic-smtpd/magic-smtpd -s

# cp magic-smtpd/magic-smtpd /var/qmail/bin/magic-smtpd
# chown root:qmail /var/qmail/bin/magic-smtpd
# mv -i /var/qmail/bin/qmail-smtpd /var/qmail/bin/qmail-smtpd.old
# ln -s /var/qmail/bin/magic-smtpd /var/qmail/bin/qmail-smtpd
# test that your email is working correctly


[root]# pwd
/etc/magic-mail/control
[root]# cat check_valid_users
1
[root]# cat ext_check_user_prog
/usr/local/bin/vpopmail-check-user.sh
[root]#

/usr/local/bin/vpopmail-check-user.sh
ALIASの部分を変更
全てにchmod +s
chown root:qmail

→/usr/local/bin/vpopmail-check-user.sh,valias,vuserinfo
--------------------------------------------------------------------------------------
#!/bin/sh
# $Header: /web/programmers/cvs/magicmail-backend/scripts/vpopmail-check-user.sh,v 1.2 200
5/02/25 20:20:09 xu Exp $


EMAIL=$1
ALIAS=`/bin/valias $EMAIL | fgrep $EMAIL >/dev/null 2>&1; echo $?`
#ALIAS=`/bin/valias $EMAIL | wc -l | /bin/grep "1" >/dev/null 2>&1 ; echo $?`
USER=`/bin/vuserinfo $EMAIL >/dev/null 2>&1; /bin/echo $? | /bin/grep "0" >/dev/null 2>&1
; /bin/echo $?`
#USER=0
if [ $ALIAS -eq 0 ] || [ $USER -eq 0 ]; then
exit 0
else
exit 1
fi
-----------------------------------------------------------------------------

2008年1月6日日曜日

Javascript カレンダー サンプル

JavaScriptによるカレンダーのサンプル
もっとも単純なもの
エラーチェックもありません。
getCalendar(2008,1); // 2008年2月

output
2008/2
Sun Mon Tue Wed Thu Fri Sat
[ -][ -][ -][ -][ -][ 1][ 2]
[ 3][ 4][ 5][ 6][ 7][ 8][ 9]
[10][11][12][13][14][15][16]
[17][18][19][20][21][22][23]
[24][25][26][27][28][29][ -]



function getCalendar (Y,M) {
dd = new Date(Y,M,1);

// week 0-6
sweek = dd.getDay();
days = new Array();
lastday = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

var year = dd.getFullYear();
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { lastday[1]++; }

for (i = 0; i < sweek; i++) { days[i] = "-"; //document.write(days[i]); //document.write("
");
}
j = 1;
for (j = 1; j < (lastday[M]+ 1); j++) { days[i] = j; i++; } for (; i < 35; i++) { days[i] = "-"; } // Month debug document.write("
");
document.write(Y);
document.write("/");
document.write((M +1));
document.write("
");


week = [0,0,0,0,0,0,0];
document.write("Sun Mon Tue Wed Thr Fri Sat");
document.write("
");
i = 0;
for (weeks = 0; weeks < 5; weeks++) {
for (week = 0; week < 7; week++) {
document.write("[");
day = days[i].toString();
if (day.length == 1) {
document.write(" ");
document.write(day);
} else {
document.write(day);
}
document.write("]");
i++;
}
document.write("");
}


document.write("
");
document.write("<hr />");
}