Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /hd2/.XDATA/home/f2blog/_www_/include/db.php on line 18 Damon 水果報報
瀏覽模式: 普通 | 列表

EMOS 整理

不要使用 RBL功能
--------------------------------------------------------------
vi /etc/postfix/main.cf

註解掉
# check_policy_service inet:127.0.0.1:10030
--------------------------------------------------------------
標籤: Linux

新增 yum 套件 4000多套

vi  /etc/yum.repos.d/CentOS-Base.repo

最後加上

[dag]
name=Dag RPM Repostory for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
[kbs-CentOS-Misc]
name=CentOS.karan.Org-EL$releasever-Stable
gpgkey=http://centos.karan.org/PRM-GPG-KEY-karan.org.txt
gpgcheck=1
enabled=1
baseurl=http://centos.karan.org/el$releasever/misc/stable/$basearch/RPMS/
標籤: Linux

/etc/passwd 檔超過1萬個 email 帳號無力~

本文講述一個E-Mail伺服器突然變慢後的觀察、分析、解決過程。(2002-10-22 08:44:27)

By 風過留楓

一切本來都是那樣的寧靜,所有的網路服務都在默默地工作著。然而近一段時間來,經常有人打電話反映一個相同的問題:在接收E-Mail時,伺服器端經常應答超時,從而無法正常收到 E-Mail,但如果過一會兒再收,則又可能正常接收到。大家對此表現出了很大的不滿。因此,我 們就迅速動手尋找問題的根源,以爭取儘快修復這個故障。

一、查閱基本資訊

首先我們翻看了歸檔資料,確定了E-Mail運行在一個配置爲PIII 500MHz,128M記憶體,20G硬 盤的工控機上,作業系統是Redhat Linux 6.5,使用Sendmail做爲E-Mail Server,並且採用系統的 passwd文件做爲Sendmail郵件用戶的認證文件。

根據網管日誌記載該郵件系統的用戶在這一段時間以來發展十分迅速,用戶數從1萬名增加 到了超過2萬名。

二、初步分析

通過上面資訊的瞭解,我們基本上確認速度變慢的主要的原因是用戶量的增長。因此,在 這此前提下進行了分析。

我們在Linux控制臺下,輸入以下命令查看系統的進程情況:

ps –auxw

我們發現,該命令列出了大量的發送郵件和POP進程。然後根據網管日誌的記錄,分別在低 峰、平均、高峰期間進行了並發用戶數的檢查,發現在高峰情,並發的用戶數已從原來的20個 用戶上升到了40個用戶。

到此爲止,我們得出了初步的結論:由於用戶的不斷增長,並發用戶也越來越多,使得機 器無法處理完這些並發請求,以致E-Mail伺服器對用戶回應過慢,甚至超時而無法使用。因此, 我們認爲解決這一故障的辦法就是升級機器。

三、深入分析

但是,我們突然間又注意到了40這個數位,我們覺得現在使用的E-Mail Server伺服器的性能 不應該無法處理40個用戶同時訪問的呀。我們隱隱感覺得前面的分析有一定有什麽地方疏忽 了,以至得到了一個並不正確的結果。

因此,我們便查看了另外一台配置相同,正在運行WEB服務的伺服器,我們發現該伺服器 在同時處理50個用戶訪問時,並沒有感到處理能力不足。

這時,我們開始進一步分析E-Mail服務的整個過程。首先用戶的郵件接收程式通過POP協定 與伺服器的POP模組進行通訊,並提供用戶名與密碼;接著E-Mail伺服器的POP模組要將用戶提 供的密碼進行加密;然後與系統文件/etc/passwd中的用戶密碼進行逐行匹配,並找出相應的用戶 名,再進行第二次匹配;如果匹配成功,校驗通過,否則就返回用戶名或密碼不正確。校驗通 過後,伺服器開始將屬於該用戶的郵件傳送給用戶的郵件接收程式。 這時,我們想到了,所有 的用戶連接都有一個共同的環節,那就是都要打開系統文件/etc/passwd,進行用戶的驗證,會不 會是因此帶來瓶頸問題呢?

我們就在Linux控制臺上輸入以下命令,查看使用/etc/passwd文件有多少個進程:

fuser /etc/passwd

這時,列出了很多POP進程,癥結總算找到了。原來是因爲系統文件/etc/passwd是一個文本 文件,在用戶名、密碼的匹配過程中,是採用逐行進行匹配,而我們的/etc/passwd文件有2萬多 行,因此最好的情況下是第一次匹配就成功,最壞的情況就是2萬多次後才匹配成功,因此平均 需要1萬次的匹配。該過程所消耗的時間足以使得電子郵件接收程式超時,而無法等到匹配結束。

四、解決方法

故障的根源找到了,解決方法也就自然簡單。因爲伺服器POP模組通過搜索密碼文件驗證一 個用戶的身份所需的時間很長,使得進程産生了積累,從而事實上加重了系統的負擔,即此時 正在使用郵件接收程式的用戶在長時間內仍保持連接狀態,而無法正常進行下一步的工作。所 以主要是解決方法就是將採用文件文件/etc/passwd的方法轉成資料庫形式。因此可以採用以下兩 種方法之一解決:

1)使用Linux的NIS系統,將系統的密碼文件/etc/passwd轉換成爲NIS的資訊庫。由於NIS採用 的是資料庫引擎,所以運行起來,便於查找,效率可以大大提高。

2)重新配置Sendmail,使其不採用系統文件/etc/passwd來進行用戶校驗,而是採用一個特定 的資料庫存儲,由於也是採用了資料庫引擎,所以運行起來,便於查詢,效率也可以大大提 高。

你還可以採用Postfix等內建資料庫支援的E-Mail系統來替換Sendmail,由於Postfix可以直接在 Sendmail基礎上實現資料的自動轉換,因些整個操作十分簡單。

五、解決效果

我們最後採用了Postfix替換Sendmail,將其用戶密碼列表轉換成爲資料庫模式,問題就迎刃 而解。現在我們仍然在使用這台機器,而且用戶已經增長到3萬個,高峰時期用戶的並發數也已 經從40個上升到60-70個,但現在系統還是有條不紊地進行著,運行良好。

六、體會

在這個簡單的例子中,我們深深地感受到在日常的系統管理工作中必須仔細地分析問題, 而不要輕易地將問題歸結於伺服器硬體能力上。

主要的辦法是:認真地、實事求是地檢查每個進程在做什麽;認真地研究服務的整個流 程,分析問題最可能發生的地方;然後設計相應的檢測工作,收集情況,對其論證。只有這樣 才能夠最終定位問題,並在此基礎上提出行之有效的解決方案,最終解決問題。

同時也從另一個側面告訴每一個網管人員,日常積極有效地記錄下網路的一些變動情況, 在故障出現的時候,這些資料能夠有效地爲問題分析提供資料依據。
標籤: Linux

找RPM的網址

以下列出帽客常去找RPM的網址:

http://rpmfind.net
http://rpm.pbone.net/
http://www.rpmseek.com/index.html
http://benjiweber.co.uk:8080/webpin/

Labels:


標籤: Linux

硬碟空間 90% 發信通知 root

1. 至/root/bin目錄下,新增一shell script的檔案,名為diskspace.sh,內容如下:
#!/bin/bash
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge 90 ]; then
echo "Running out of space "$partition $usep%" on $(hostname) as on $(date)" | mail -s "Alert: Almost out of disk space $usep%" root
fi
done

2. # chmod 755 diskspace.sh

3. # crontab -e
-> 10 5 * * * /root/bin/diskspace.sh

這個範例用了grep,awk與cut指令來實作,可以見得它們有多好用了 :)

參考來源: http://www.cyberciti.biz/tips/shell-script-to-watch-the-disk-space.html
標籤: Linux

Linux 可讀寫 ntfs 的方式

帽客家裡的大黑(IBM桌機)有兩顆HDD,一顆是安裝CentOS5另一顆是Windows XP PRO SP2,所以有時開到CentOS的工作環境而想讀寫NTFS磁區時,我記得我之前只解決了讀的問題,昨天上Google發現到現在連寫的問題也解決了,我真是後知後覺呀!

只要安裝好ntfs-3g與fuse後,並以下面的方法mount NTFS的磁區就可以work囉~

# mount /dev/hda7 /mnt/ntfs -t ntfs-3g
# vi /etc/fstab
->
/dev/hda7 /mnt/ntfs ntfs-3g defaults 0 0
官網:
ntfs-3g
標籤: Linux

透通式防火牆設定

前言:
很多時候,在不想變動原本的網路架構下,如果有需要將網路隔離開時,就需用到透通式的防火牆,所謂的透通式的防火牆它是個in-line mode的裝置,你可以把它想成是一個Bridge裝置,但確有可以過濾封包的功能,提醒一下既然是Bridge裝置,當然它就是屬於Layer 2那一層囉!


Environment:
以下是筆者所測試的環境:

Server ---------- Firewall ---------- Client
Server IP address: 192.168.1.100
Client IP address: 192.168.1.200
Firewall IP address: 192.168.1.1

Objective:
只允許Server可以透過網芳將檔案傳送到Client端(單向),Server與Client可互相透過icmp echo request確認彼此間的連線 (雙向) 。

Setup Procedure:

1.Bind兩張網卡成一個bridge interface:
Firewall至少要有兩張網卡,然後只要將它們bind起來,Firewall就可以成了一個Bridge裝置。首先要安裝bridge-utils與bridge-utils-devel這兩個套件,這兩個套件可以把eth0與eth1 bind成一個bridge裝置,正好符合我們以上的需求,筆者是用RHEL4.4架設的,非常方便的是這兩個套件在安裝光碟裡面就有。
# rpm –ivh bridge-utils-*

緊接著將eth0與eth1 bind成bri0 interface.

# ifconfig eth0 0.0.0.0
# ifconfig eth1 0.0.0.0
# brctl addbr bri0
# brctl addif bri0 eth0
# brctl addif bri0 eth1

執行brctl show確認一下:
# brctl show
bridge name bridge id STP enabled interfaces
bri0 8000.00034730c5b3 no eth0
eth1

好了問題來了,既然bri0 interface已經建置好了,那麼是否可以在上面設定IP呢?答案當然是可以的囉~不然怎麼remote control它呢? 至於設定的方法有兩種,一種是設定Static IP,另一種是透過DHCP Server get到IP,以下是設定的方法:
Static IP:
# ifconfig bri0 192.168.1.1 netmask 255.255.255.0 up
DHCP Client:
# dhclient bri0

以上的所有動作您可以把它寫成一個shell script file,並讓它在開機時自動執行,以RHEL的話是放在/etc/rc.local,順便一提SLES是/etc/init.d/boot.local

2. Allow IP forwarding

# vi /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
#sysctl –p

請測試一下,目前Server與Client的網路是相通的。

3. 設定Policy

重頭戲來了,如何設定Policy? 一般來說Linux firewall的設定是透過iptables,iptables預設分為3個table,5個chain,我要把rule設定在那個table及那個chain是一開始該有的認知。先提醒一個觀念,iptables比對的順序為mangle->nat->filter,這是什麼意思?事實上mangle,nat與filter就是預設的三個table,若前面的規則是allow,到了後面的table卻是deny的話,那就是deny! 反之若前面是deny而後面是allow的話,那就是allow! 這是套用於不同table時,規則相互抵觸時的法則,想一想有沒有可能在相同的chain中,設定相互抵觸的規則?當然是有可能的囉!這時是first match! 當hit到規則後,則不在進行比對,這點請特別注意!

可以確定的是,利用filter table就可以設定我們的policy,接下來考慮一下要設定在那個chain? INPUT OUTPUT FORWARD? 答案是 FORWARD,別忘了!它是個Bridge裝置,封包當然是透過eth0到eth1或是eth1到eth0囉!

為了最高安全指導原則,首先要把 FORWARD default policy設定為DROP,只放行SMB protocol與icmp echo request.

# iptables –P FORWARD DROP

測試一下 Server與Client目前應該是完全不通!

設定允許n個封包之後的連線:

# iptables –A FORWARD –m state –state RELATED,ESTABLISHED –j ACCEPT

設定允許icmp echo request:

# iptables –A FORWARD –s 192.168.1.0/24 –p icmp –icmp-type 8 –j ACCEPT

設定只有Server可以透過網芳將檔案傳送到Client:

# iptables –A FORWARD –s 192.168.1.100/32 –d 192.168.1.200/32 –p tcp –dport 139 –j ACCEPT

# iptables –A FORWARD –s 192.168.1.100/32 –d 192.168.1.200/32 –p tcp –dport 445 –j ACCEPT

這樣一來便可達到我們的需求!
歡迎轉載,不過請註明出處唷~ ^^

筆者簡介:
Lawrence Chiu – 已取得RHCE與NCLP認證,曾任職於D-Link testing engineer負責資安產品的測試,現任職於TrendMicro Anti-Spam Lab administrator。
標籤: Linux

更換 ssh 服務程式的 Port

更換 ssh 服務程式的 Port

ssh 服務程式變更聆聽 Port 方式很簡單,通常修改主機的 /etc/ssh/sshd_config 檔案

配置設定 Port XXXX 然後執行 /etc/init.d/sshd restart 後

可以執行 netstat –nlp指令確認一下 sshd 是否有聆聽於 Port XXXX,有的話就表示該設定就生效了

標籤: Linux