2009年4月1日 星期三

....這陣子

這陣子 沒寫blog
心血來潮打算寫一下
才發現blog 不能開
當下以為是辜狗的問題
後來才發現....我自己的灰塵機上次上pre-release 7.2
因為套件有些問題
自己耍笨下了pkg_delete -af 清掉所有套件
只把php nginx php-cgi 編回去就丟著了XD

完全忘了dns 掛在那台

2009年2月20日 星期五

使用google 服務 讓你也有一台mail server 還不用管理

出神入化的google 又一讓我大驚的創舉

若我們擁有以下條件即可達成輕鬆, 不需任何成本

只要一杯咖啡的時間, 完成這個工作

1. gmail account (這個應該大家都有吧)

2. 自己的domain (這個不貴吧)

以下以funnyd.idv.tw 為例, 因我本身已提供funnyd.idv.tw 的mail services

故以下使用mail.funnyd.idv.tw 環境是BSD6.1

3 設定DNS . 新增MX 記錄 開啟funnyd.idv.tw 的zone file

mail IN MX 1 ASPMX.L.GOOGLE.COM.
mail IN MX 5 ALT1.ASPMX.L.GOOGLE.COM.
mail IN MX 5 ALT2.ASPMX.L.GOOGLE.COM.
mail IN MX 10 ASPMX2.GOOGLEMAIL.COM.
mail IN MX 10 ASPMX3.GOOGLEMAIL.COM.
mail IN MX 10 ASPMX4.GOOGLEMAIL.COM.
mail IN MX 10 ASPMX5.GOOGLEMAIL.COM.
www.mail IN CNAME ghs.google.com.

kill -1 `cat /var/run/named/pid`

4.
至https://www.google.com/a/ 申請mail.funnyd.idv.tw

然後依網頁說明step by step 建立

建立完畫面-> webmail : http://mail.google.com/a/mail.funnyd.idv.tw/

(  ̄ c ̄)y▂ξ 還送網頁空間

http://www.mail.funnyd.idv.tw-a.googlepages.com/home

還可以用 pop3 收下來Very Happy
教學如下網址
http://mail.google.com/support/bin/answer.py?ctx=%67mail&hl=zh_TW&answer=12103


另外, 你說用gmail 有什麼好處, 什麼都不用說, 光說共用行事曆這個功能就嚇嚇叫了

還要提一點...有人一次申請3000個帳號, 也過...3000 * 2GB ...趨近6TB

辜狗果然是神...

ldap

LDAP 在原本的設計是整合多個伺服器的帳號, 不過其實LDAP 可以使用在通訊錄的整合
這些通訊錄或帳號也許可以不用是本機的實體帳號
但藉由OE or thundbird 此MUA 軟體, 也可以輕鬆達到自通訊錄尋找符合特定條件的人員相關資料

STEP 1
查詢是否有安裝LDAP 相關套件
rpm -qa | grep openldap

openldap-devel-2.3.19-4
openldap-servers-2.3.19-4
openldap-2.3.19-4
openldap-clients-2.3.19-4

STEP 2
修改openldap server端的設定檔
vi /etc/openldap/sldap.conf

找到以下

database bdb
suffix "dc=EXAMPLE,dc=com"
rootdn "cn=Manager,dc=EXAMPLE,dc=com"

修改如下

database bdb
suffix "dc=orz,dc=com" ; 這邊依你的需求
rootdn "cn=Manager,dc=orz,dc=com" 這邊dc的部份要與suffix 相同

以及認證的部份

rootpw {SSHA}ph2MuDim6HvZURdNqjqTkZiqE4WMMgDl

以上加密過的密碼是如何產生的呢?

先讓我們暫時將目前的vi 工作退至背景

esc 到命令模式 ctrl +z

[1]+ Stopped vim /etc/openldap/slapd.conf

使用slappasswd -s 欲產生的密碼

ex
slappasswd -s seednet

再將{SSHA}ph2MuDim6HvZURdNqjqTkZiqE4WMMgDl (加密過的seednet)

複製到/etc/openldap/slapd.conf

ok 在bash下打fg回到vi 工作

找到rootpw 將編碼過後的密碼加到rootpw 後

server端的設定就完成了,超簡單的..

啟動ldap 吧

/etc/init.d/ldap start

再來,建立屬於你的第一個ldif 檔案

內容如下

dn: dc=orz,dc=com
dc: orz
o: orz
ObjectClass: organization
ObjectClass: dcObject


dn: ou=people,dc=orz,dc=com
ObjectClass: top
ObjectClass: organizationalUnit
ou: people


dn: uid=geeko,ou=people,dc=orz,dc=com
ObjectClass: top
ObjectClass: PosixAccount
ObjectClass: ShadowAccount
ObjectClass: inetOrgPerson
uid: geeko
uidNumber: 1010
gidNumber: 100
cn: Geeko Chameleon
givenName: Geeko
sn: Chameleon
homeDirectory: /home/geeko
loginShell: /bin/bash
shadowMax: 99999
shadowWarning: 7
shadowInactive: -1
shadowMin: 0
shadowLastChange: 12609

這邊稍微提一下,在ObjectClass 的定義,有些欄位是MUST BE 所以當你定義了

ObjectClass: PosixAccount

那麼如 uidNumber 是必須,一定要填寫的

所以同理可證 你也可以自己定義屬於你自己需求的schema

位置在/etc/openldap/schema

所以目前我們就可以加入第一筆嘍

ldapadd -v -x -D "cn=Man" -W -f test.ldif

出現

Enter LDAP Password:

這邊當然是輸入剛剛由slappasswd -s 產生的那組seednet 嘍

add dc:
orz
add o:
orz
add ObjectClass:
organization
dcObject
adding new entry "dc=orz,dc=com"
modify complete

add ObjectClass:
top
organizationalUnit
add ou:
people
adding new entry "ou=people,dc=orz,dc=com"
modify complete

add ObjectClass:
top
PosixAccount
ShadowAccount
inetOrgPerson
add uid:
geeko
add uidNumber:
1010
add gidNumber:
100
add cn:
Geeko Chameleon
add givenName:
Geeko
add sn:
Chameleon
add homeDirectory:
/home/geeko
add loginShell:
/bin/bash
add shadowMax:
99999
add shadowWarning:
7
add shadowInactive:
-1
add shadowMin:
0
add shadowLastChange:
12609
adding new entry "uid=geeko,ou=people,dc=orz,dc=com"
modify complete

霹靂啪啦就加完了

也就是說,目前你已經可以透過MUA 透過LDAP SERVER 查詢資料嘍

打開oe 點選通訊錄->工具->帳戶->新增->輸入ldap server 所在的ip->是否檢查
個人地址,這邊視個人需求->完成

再回到剛新增的通訊錄目錄服務內,選擇剛新增的ldap server 點選內容->進階

搜查依據選擇dc=orz,dc=com

再來就可以使用嘍

由ms 備份至linux

需求: Windows WebServer 要備份至Linux Server

建立folder 就叫backup

置放rar.exe

至backup folder 內

建立一Backup.bat
內容如下:
@echo off
rar a -ag[YYYYMMDD] backup @backup.lst
ftp -n -s:myfile.scr

del backup[*].rar

建立backup.lst 檔案
內容為你要備份的完整路徑
如D:\IWANNABACKUPTHISFOLDER

建立myfile.scr

內容:
open YourLinuxServerIP
user backup ->You must create before use
backup -> passwd about accout backup
hash
prompt
mput backup[*].rar
bye

建立完成後,即可使用m$內的排程工作定期執行該任務
這部份就不多賛敘了

P.s 由於這樣做對安全上是有一定的影響
iptables 要設定限制
另外
記得要/sbin/modprobe ip_conntrack_ftp

mutt db to gmail

#!/bin/sh
DATESTR=`date "+%Y%m%d%H"`
/usr/bin/mysqldump --add-locks btwoe > /root/tmp/backupb2e.$DATESTR.sql
/bin/tar -zcvf /root/tmp/etcbackup$DATESTR.tar.gz /etc
/bin/tar -zcvf /tmp/mybackup.tgz /root/tmp
echo "etc and sql backup" | mutt -a /tmp/mybackup.tgz yourgmailaccout@gmail.com "etc and sql backup"

iptables block ssh attempt attack

iptables block ssh attempt 適用於RedHat,Fedora
#容忍值可以調高一點(粗體字)
#! /bin/bash
VAL=`grep Failed /var/log/secure | awk '{print $(NF-3)}' |cut -d: -f4 | sort | uniq -c |awk '{print $1"="$2}'`
for i in $VAL
do
NUM=`echo $i|awk -F= '{print $1}'`

IP=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt 5 ] && [ -z "`iptables -vnL INPUT|grep $IP`" ]
then
iptables -I INPUT -p tcp -s $IP -j REJECT --reject-with tcp-reset
echo "platinum log: `date` $IP($NUM)" >> /var/log/val.log
fi
done
iptables block ssh attempt 適用於Debian
#容忍值可以調高一點(粗體字)
#!/bin/bash
VAL=`grep Illegal /var/log/auth.log | awk '{print $10}' | sort | uniq -c | awk '{print $1"="$2}'`
for i in $VAL
do
NUM=`echo $i|awk -F= '{print $1}'`
echo $NUM
IP=`echo $i|awk -F= '{print $2}'`
echo $IP
if [ $NUM -gt 5 ] && [ -z "`iptables -vnL INPUT|grep $IP`" ]
then
iptables -I INPUT -p tcp -s $IP -j REJECT --reject-with tcp-reset
echo "platinum log: `date` $IP($NUM)" >> /var/log/val.log
fi
done

SMTP protocol synchronization error (next input sent too soon: pipelining was not advertised)

在某些硬體spam 設備做將被隔離的信件撈回動作時, 會被exim 擋掉
錯誤訊息如下
SMTP protocol synchronization error (next input sent too soon: pipelining was not advertised)

可以將exim 的檢查選項關閉

default 是開啟的

在main configure 內

加入
smtp_enforce_sync = false

可避免再發生上敘問題

exim with DNS SPF

在exim 配置DNS SPF 檢查

在EXIM 上的應用在exim configure acl sector 加入

acl_check_rcpt:
#...

# Use spfquery to perform a pair of SPF checks (for details, see
# http://www.openspf.org/)
#
# This is quite costly in terms of DNS lookups (~6 lookups per mail). Do not
# enable if that's an issue. Also note that if you enable this, you must
# install "libmail-spf-query-perl" which provides the spfquery command.
# Missing libmail-spf-query-perl will trigger the "Unexpected error in
# SPF check" warning.

deny
message = [SPF] $sender_host_address is not allowed to send mail from \
${if def:sender_address_domain {$sender_address_domain}{$sender_helo_name}}. \
Please see http://www.openspf.org/why.html?sender=$sender_address&ip=$sender_host_address
log_message = SPF check failed.
condition = ${run{/usr/bin/spfquery --ip \"$sender_host_address\" \
--mail-from \"$sender_address\" --helo \"$sender_helo_name\"} \
{no}{${if eq {$runrc}{1}{yes}{no}}}}

defer
message = Temporary DNS error while checking SPF record. Try again later.
condition = ${if eq {$runrc}{5}{yes}{no}}

warn
message = Received-SPF: ${if eq {$runrc}{0}{pass}{${if eq {$runrc}{2}{softfail}\
{ ${if eq {$runrc}{3}{neutral}{${if eq {$runrc}{4}{unknown}\
{${if eq {$runrc}{6}{none}{error}}}}}}}}}}
condition = ${if le {$runrc}{6}{yes}{no}}

warn
log_message = Unexpected error in SPF check.
condition = ${if gt {$runrc}{6}{yes}{no}}

# Support for best-guess (see http://www.openspf.org/developers-guide.html)
warn
message = X-SPF-Guess: ${run{/usr/bin/spfquery --ip \"$sender_host_address\" \
--mail-from \"$sender_address\" \ --helo \"$sender_helo_name\" --guess true}\
{pass}{${if eq {$runrc}{2}{softfail}{${if eq {$runrc}{3}{neutral}{${if eq {$runrc}{4}{unknown}\
{${if eq {$runrc}{6}{none}{error}}}}}}}}}}
condition = ${if le {$runrc}{6}{yes}{no}}

defer
message = Temporary DNS error while checking SPF record. Try again later.
condition = ${if eq {$runrc}{5}{yes}{no}}[img][/img]

簡單來說

DNS SPF record 應先配置在dns server 上

而DNS SPF check 則應在該機制成熟後加入,減少spam 信件

exim with maildir

platform :centos 5 , exim 4.69
begin routers 區段

localuser:
driver = accept
check_local_user
# local_part_suffix = +* : -*
# local_part_suffix_optional
transport = maildir_delivery
cannot_route_message = Unknown user

begin transports 區段

maildir_delivery:
driver = appendfile
directory = /home/$local_part/maildir
delivery_date_add
envelope_to_add
return_path_add
maildir_format
check_string =


restart exim services .

log

2008-09-02 13:23:07 1KaOM7-0001P7-Bc <= lalala@mail.abc.com.tw H=mail.proeurotex.com.tw [123.123.123.123] P=esmtp S=823 id=200809020523.m825NCvl022516@mail.abc.com.tw
2008-09-02 13:23:07 1KaOM7-0001P7-Bc => admin R=localuser T=maildir_delivery
2008-09-02 13:23:07 1KaOM7-0001P7-Bc Completed

驗證一下 , 使用者家目錄

產生了maidlr 此目錄 內有cur new tmp 目錄

在new 目錄

1220332987.H475850P5403.andrew.usnei.net

在imap pop3 server 我使用dovecot

在 /etc/dovecot.conf 內

加入

mail_location = maildir:~/maildir

如果要使用ipop3 的話 ,

我不確定有沒有支援

同時我也不建議, ipop3 基本上已經過時了

dovecot 支援較多的功能

效能也一直隨著版本更新改善

2009年2月11日 星期三

更新完ports tree 後

記得 portsdb -Fu 更新ports tree index db 

給我自己看的XD

FreeBSD 更新security patch

FreeBSD 7.1 STABLE 

cp /usr/share/examples/cvsup/stable-supfile /path/cvsupfile/

vi stable-supfile 

*default host=CHANGE_THIS.FreeBSD.org -> *default host=cvsup.tw.freebsd.org 

*default release=cvs tag=RELENG_7 -> *default release=cvs tag=RELENG_7_1

cvsup -g -L 2 /path/cvsupfile/stable-supfile 

縮小pietty ....站起來倒咖啡 . 回去座位 放咖啡 走到窗戶旁. 看綠色 .....

更新完後

cd /usr/src 

make -j4 buildworld  (j4 :用4個process 處理buildworld , 衝呀!) 

但你別天真的以為這樣就會音速build 好你的新world !......建議你再去喝一杯咖啡 

跑完了之後. 

你以為等待的戲碼已經完了嗎.. 錯! (大錯特錯 不要來! ) ....(冷

再來你可以到 /usr/src/sys/i386/conf 內 

把原本的GENERIC kernel cp 一份到你想放的地方去 比如 /root/kernel的家/ ...etc 

但請切記 做個軟連結到目前目錄 

就是 cp /usr/src/sys/i386/conf/GENERIC /root/kernel_home/SUPERMANKERNEL 

     在/usr/src/sys/i386/conf/ 底下 ln -s /root/kernel_home/SUPERMANKERNEL .  <- 是的,這裡有個點

然後你就可以使用你喜歡的編輯器 vi ee  whenever ..

把你的kernel 瘦身一下  . . 把一些不必要用不到的東西拿掉 

要知道, 我的kernel 不需要全副武裝只是為了打開我家角落那台長滿灰塵 高中生看到都把他當垃圾一樣的PIII 800

好了之後

恭喜你 . 出運了 . 再來是 第三次等待

cd /usr/src 

make buildkernel KERNCONF=SUPERMANKERNEL 

................一樣照慣例 , 你可以縮小pietty . 看一下搖桿驅動程式內有沒有還沒有溫習的 (誤

在make buildkernel 完成後, 你就可以進行

make installkernel KERNCONF=SUPERMANKERNEL <- 這部份快多了, 畢竟不是重新去build 一個kernel 或world 

kernel install 完了, 請重新開機 reboot 

開機選單選6 
在OK 後面輸入 boot -s 進入單人模式 

進來之後 你會發現 囧 只有 /  

沒關希  mount -u /  <- 這個動作就像是 linux 的mount -o remount rw / 

再mount -a  <- 依據/etc/fstab 將 partition mount 起來

df 一下..哇~ 都回來了 

cd /usr/src 

開始mergemaster -p  建立一個臨時環境 把新的config 文件放在這 然後跟系統的文件比較

the directory specified for temporary root environment, /var/tmp/temproot, 

exist , This can be a security risk if untrusted user have access to the system 

他說, 將這個目錄指定到root 的環境, 但是這會有風險的 如果曾經有不可信任的使用者存取過這個系統

都這樣講了, 我們就選擇d 先刪除原有的目錄 再新建一個臨時的目錄供他存放

再來

我們就make installworld  這部份也很快滴

installworld 完之後

使用 mergemaster 將/etc 底下設定檔更新 

這時他會問你 要使用什麼方式來對該文件配置

d 不更新

i 直接用新的蓋過去

m 根據新的文件 與系統文件合併

v 查看新的跟原有的有什麼不同 

所以通常 這些事 我會再安裝新系統時做, 全部選擇 i 就好了XD

再來就重新開機 你花了幾個小時 不就為了看uname -a 居然變成了

7.1-RELEASE-p2 FreeBSD 7.1-RELEASE-p2 #1

傑克 這真是太神奇了!

再來為了不讓以後發生不必要的錯誤 及加快下次make buildworld 的速度 請記得
cd /usr/obj (存放編輯的結果) chflags -R noschg * (某些檔案在過程中會賦予不可更動的flag 把此取消) rm -rf * (做這個動作請確認你在對的目錄 對的機器上, 我通常一次會連五六台機器)
參考的網站有 
net網誌 Freebsd.doc

2009年2月8日 星期日

更新完perl , openwebmail 無法開啟 -.-

cd /var/db/pkg
portupgrade -m ENABLE_SUIDPERL=yes -f perl-5.8.\*
perl-after-upgrade perl-after-upgrade -f
portupgrade -m "-DFORCE_PKG_REGISTER" -rf perl-5.8.\* -x perl-5.8.\*

edit /usr/local/etc/pkgtools.conf

at MAKE_ARGS setcion

MAKE_ARGS = {
'lang/perl5.8' => 'ENABLE_SUIDPERL=yes', }

2009年2月3日 星期二

bsd nginx php5 fastcgi

安裝
nginx by port
php5 by port
mod_fastcgi by port
rehash
/usr/local/bin/php-cgi -h
-b | Bind Path for external FASTCGI Server mode
/usr/local/bin/php-cgi -b 127.0.0.1:9000 & 錯誤的做法 , 關聯性都搞錯了 090310
應再安裝
spawn-fcgi
此套件包在lighttpd ,不過已經分割出來成為一個獨立的project了,相關的訊息在here
anyway 開始安裝 lightttpd
pkg_add -r -v lighttpd  (-r 處理相依性, -v 詳細模式)

裝完了之後, 其實我們僅僅需要 spawn-fcgi 此執行檔

先將spawn-fcgi 搬到家目錄下

rehash

whereis spawn-fcgi

spawn-fcgi: /usr/local/bin/spawn-fcgi

cp /usr/local/bin/spawn-fcgi ~

pkg_delete -v lighttpd-1.4.18_1

vi /usr/local/etc/nginx/nginx.conf
修改server_name
location 修改
index index.php index.html

unmark 以下部分

location ~ \.php$ {
root /usr/local/www/nginx;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
紅色是修改的部分

/usr/local/etc/rc.d/nginx restart

啟動

php 的fastcgi

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -f /usr/local/bin/php-cgi

轉錄自 FreeBSDCHINAWiki 的 fastcgi script

#!/bin/sh
PROVIDES=php-cgi
LIGHTTPD_FCGI=/usr/local/bin/spawn-fcgi
SERVER_IP=127.0.0.1
SERVER_PORT=9000
SERVER_USER=www
SERVER_GROUP=www
PHP_CGI=/usr/local/bin/php-cgi
PGREP=/bin/pgrep
KILLALL=/usr/bin/killall
### No editing below ####
cmd=$1

pcgi_start(){
echo "Starting $PROVIDES..."
$LIGHTTPD_FCGI -a $SERVER_IP -p $SERVER_PORT -u $SERVER_USER -g $SERVER_GROUP -f $PHP_CGI
}

pcgi_stop(){
echo "Killing $PROVIDES..."
$KILLALL $PROVIDES
}

pcgi_restart(){
pcgi_stop
pcgi_start
}

pcgi_status(){
$PGREP $PROVIDES > /dev/null
[ $? -eq 0 ] && echo "$PROVIDES running" || echo "$PROVIDES NOT running"

}

pcgi_help(){
echo "Usage: $0 {start|stop|restart|status}"
}

case ${cmd} in
[Ss][Tt][Aa][Rr][Tt]) pcgi_start;;
[Ss][Tt][Oo][Pp]) pcgi_stop;;
[Rr][Ee][Ss][Tt][Aa][Rr][Tt]) pcgi_restart;;
[Ss][Tt][Aa][Tt][Uu][Ss]) pcgi_status ;;
*) pcgi_help ;;
esac

參考網站有

shiningray張宴義氣幫的gslin大大

及剛提到的FreeBSDChinaWiki

2009年1月19日 星期一

: undefined reference to `ieee80211_next_scan'

今天在編bsd 6.2 kernel 出現這個錯誤

結果仔細看了好一陣子.....機車的要命

是device ural # Ralink Technology RT2500USB wireless NICs 沒有刪掉

-____- gy

2009年1月5日 星期一

確定第一件事就是

自己架 blog 還要備份資料庫等等的屁事
以後還是交給google做好了
我來了. 辜狗!