智能CDN安裝和維護手冊

 

智能CDN安裝和維護手冊
 
一. 系統安裝
1. 系統選用
系統:CentOS5.5以上,原則上使用64位系統!
2. 系統分區
/boot 100M
/ 5-10G
Swap 4-8G
/mynet/logs 20G
/mynet 第一塊盤剩餘空間
別的盤根據系統的不同掛載不同目錄
3. 軟件選擇
爲了保證系統最大穩定性,只選擇基本系統和開發工具包
Editors, development-tools, development-libs
4. 目錄規範,所有後裝軟件放在/mynet目錄下
/mynet/app
軟件安裝目錄
/mynet/logs
日誌目錄,最好獨立分區,防止撐爆
/mynet/soft
軟件源代碼編譯目錄
/mynet/cache
緩存目錄
/mynet/webroot
網站文件
/mynet/bin
腳本目錄
/mynet/backup
備份目錄
5.  其餘路徑說明
/etc/init.d  系統啓動腳本的目錄
/etc/rc.local  跟隨系統啓動的腳本添加在裏面
Crontab  -e 添加定時執行的任務
二. 安全設置
1. BIOS安全
設置BIOS密碼且修改引導次序禁止從軟盤啓動系統
2. 口令文件
chattr命令給帳戶文件加上不可更改屬性,從而防止非授權用戶獲得權限
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
可以更改屬性
chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow
3.禁止Ctrl+Alt+Delete重新啓動機器命令
修改/etc/inittab文件,將"ca::ctrlaltdel:/sbin/shutdown -t3 -r now"一行註釋掉
3. 限制Root登陸
修改/etc/ssh/sshd_conf,把PermitRootLogin修改爲no 。
4. 添加允許sudo的用戶
Vim /etc/sudoers ,添加幾行
wenyj   ALL=(ALL)       NOPASSWD: ALL
liuzx   ALL=(ALL)       NOPASSWD: ALL
lianqf  ALL=(ALL)       NOPASSWD: ALL
這樣執行程序需要用root權限時候,在前面添加sudo即可。比如:sudo /mynet/bin/apache start
如果需要全部進入root權限:sudo su -
5. 防止IP欺騙
編輯/etc/host.conf文件並增加如下幾行來防止IP欺騙***。 
   order bind,hosts 
   multi off 
   nospoof on
6. 防止DoS***
對系統所有的用戶設置資源限制可以防止DoS類型***。如最大進程數和內存使用數量等。在/etc/security/limits.conf中添加如下幾行:
  * hard core 0 
  * hard rss 5000 
  * hard nproc 20 
  編輯/etc/pam.d/login文件檢查下面一行是否存在。 
  session required /lib/security/pam_limits.so 
  
7. 防止syn-flood***
將下邊的設置加到/etc/sysctl.conf中,防止syn-flood***,現在的服務器進行syn-flood***時會拒絕服務
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syncookies = 1
8. 修改防火牆
Vi /etc/sysconfig/iptables 
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
# Note: ifup-post will punch the current nameservers through the
# firewall; such entries will *not* be listed here.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -p tcp ! --syn -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW -j ACCEPT
COMMIT
9. .安裝安全嗅探器chkrootkit
到http://www.chkrootkit.org/ 下載最新版本的 chkrootkit
cd /mynet/soft/ 
wget "ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz" 
tar xzvf chkrootkit.tar.gz 
cd chkrootkit-0.40 
make sense
./chkrootkit  -q檢查系統是否被人放了後門程序
但是如果發現了執行結果中發現了"INFECTED"信息的話。那可能表示已經"中彈"被感染了!
10. 用setup去掉無用服務,如以下:
acpid anacron apmd atd auditd autofs bluetooth  cups dc_client dc_server dund firstboot haldaemon hidd ip6tables ipmi irda irqbalance lm_sensors lvm2-monitor  mdmonitor mdmpd messagebus netfs netplugd nscd pcscd psacct rdisc readahead_early readahead_later restorecond rhnsd rpcgssd rpcid mapd rpcsvcgssd saslauthd smartd snmptrapd wpa_supplicant ypbind yum-updatesd xfs
三.  智能DNS安裝
1. 軟件選擇: BIND 9.6-ESV-R3
2. 編譯安裝
#./configure --prefix=/mynet/app/named --enable-threads --enable-largefile --with-libxml2 --disable-openssl-version-check --disable-ipv6
#make && make install
大概解析如下:
enable-threads //打開多線程處理
enable-largefile //打開大文件支持,必須打開
with-libxml2,disable-ipv6 //打開xml支持和關閉ipv6,可以不管
3.  添加配置文件etc/named.conf
options {
        directory "/mynet/app/named/etc/"; // 配置文件路徑
        pid-file "/mynet/app/named/var/run/named.pid"; 
        version "0.0.0";  //隱藏版本號
        allow-query-cache{ “192.168.100.0/24”}; //允許解析公網域名
        allow-notify { “192.168.100.0/24”}; //允許查看服務器配置
        forwarders {
             219.141.140.10;203.196.0.6;219.141.136.10;202.106.148.1;
        }; //用於轉發的上層DNS
};
logging {
        channel query_log {
                file "/mynet/app/named/logs/query.log" versions 3 size 20m;
                severity info;
                print-time yes;
                print-category yes;
        };
        category default {
        query_log;
        };
        category queries {
        query_log;
        };
        }; //系統
4. 配置IP庫文件,在name.conf添加以下內容,如果有多個就添加多個配置文件。
include "cnc.list";
view "view_cnc" {
        match-clients {
                  CNC;
        };
        include "master/etc/cnc.conf";
};
IP的列表文件如下:cnc.list
acl "CNC" {
        110.228.0.0/14;
        110.240.0.0/12;
}
5.  生成rndc控制命令的key文件
sbin/rndc-confgen > etc/rndc.conf
cd etc
tail -10 rndc.conf | head -9 | sed s/# //g >; named.conf
6. 生成根名文件
dig > named.root
7. 生成自己的域名文件:test.com
$TTL    300  //更新時間
@       IN      SOA     test.com. root.test.com.  (
                        2010101201      ; Serial //時間戳
                        300             ; Refresh
                        3600            ; Retry
                        360000          ; Expire
                        300 )           ; Minimum
                     NS      ns1.netnet.com.  //NS記錄
                     NS      ns2.netnet.com.
                     MX      10      mail.test.com. //MX記錄
@               A       127.0.0.1
ns1             A       127.0.0.1
ns2             A       127.0.0.1
www             A       127.0.0.1
man             A       11.11.11.11
mail            A       11.11.11.11
8. 配置named.conf加如以下代碼:
zone "." IN {
        type hint;
        file "named.root";
};
zone "test.com" IN {
        type master;
        file "master/any/test.com";
};
9. 啓動域名服務器:
/mynet/app/named/sbin/named -u named -c /mynet/app/named/etc/named.conf
10. 使用腳本獲取最新的IP庫
#!/bin/sh
FILE=./ip_apnic
wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -O $FILE
grep 'apnic|CN|ipv4|' $FILE | awk -F '|' '{print $4,$5}' | while read ip cnt
do
echo $ip:$cnt
mask=$(cat << EOF | bc | tail -1
pow=32;
define log2(x) {
if (x<=1) return (pow);
pow--;
return(log2(x/2));
}
log2($cnt)
EOF)
echo $ip/$mask>> cn_ip.list
NETNAME=`whois $ip | sed -e '/./{H;$!d;}' -e 'x;/netnum/!d' |grep ^netname | sed -e 's/.*: \(.*\)/\1/g' | sed -e 's/-
.*//g'`
echo $NETNAME >> cn_id.list
done
11.  用命令將不同區域的IP分離出來,下面以CNC爲例:
#paste cn_ip.list cn_id.list >> all.list //讓IP和註冊ID一一對應
#cat all.txt | awk '/CNC/ {print $1}' >> nCNC.list //把註冊ID中包含有cnc的IP分離給cnc段
#cat all.txt | awk '/UNICOM/ {print $1}' >> cnc.list  
#vim -c ':%s/$/\;/g' cnc.list  //給ip表中每行後面添加分號
修改cnc.list給IP段前後加上頭和大擴號,讓其符合named的規則:
acl "CNC" {
IP
};
四. Squid安裝:
1. 軟件下載:選擇squid2.6系列最穩定版本
到官方網站下載:http://www.squid-cache.org
2. 解壓,修改源代碼,註釋掉一些信息泄露: vim src/errorpage.c
/*          "<HR noshade size=\"1px\">\n"
            "<ADDRESS>\n"
            "Generated %T by %h (%s)\n"
            "</ADDRESS>\n"
*/
3. 編譯安裝:
CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=nocona -O2 -pipe" CXXFLAGS="${CFLAGS}" ./configure --prefix=/mynet/app/squid1 --enable-async-io=3200 --enable-storeio=ufs,aufs --disable-icmp --enable-snmp --enable-kill-parent-hack --enable-epoll --enable-removal-policies=heap,lru --disable-delay-pools --with-large-files --with-maxfd=65535 --enable-useragent-log --enable-referer-log --enable-follow-x-forwarded-for --enable-err-languages="English Simplify_Chinese"
大概解釋如下:
CHOST 開頭的是GCC的優化參數,一般默認即可,不同的CPU有不同的參數列表,具體可到http://en.gentoo-wiki.com/wiki/Safe_Cflags查看。
--prefix //安裝路徑
--enable-async-io=3200 //打開IO進程數
--enable-storeio=ufs,aufs  //磁盤IO輪詢方式
--enable-removal-policies=heap,lru //緩存文件散列的哈希值
--with-large-files --with-maxfd=65535 //打開大文件支持,最大文件讀取65535,這兩個參數必須打開。
--enable-follow-x-forwarded-for  //打開IP轉讓,讓後端獲取到真實IP
--enable-err-languages="English Simplify_Chinese" //安裝的幫助文件,默認把所有語言安裝進去,目錄太大。
4. 修改配置文件: etc/squid.conf ,主要修改以下項目:
http_port 80 vhost vport defaultsite=cache001  //主機名和端口
cache_effective_user squid  //運行使用的用戶
cache_effective_group squid  //運行使用的組
icp_port 3333              //提供給鄰居的UDP端口
acl QUERY urlpath_regex cgi-bin admin \.php \.cgi  //不能緩存的文件路徑或者後綴名
cache_mem 4 GB               //使用內存大小
cache_dir aufs /mynet/cache 80000 16 256  //使用硬盤大小M,第一層目錄數,第二層目錄數
maximum_object_size 204800 KB    //硬盤緩存的最大文件
maximum_object_size_in_memory 2048 KB  //內存緩存的最大文件
access_log /mynet/logs/access-4.log  //訪問日誌
cache_log /mynet/app/squid4/var/logs/cache.log  //系統日誌
cache_peer      192.168.100.103 parent 80 0 no-query no-digest originserver name=web103  //前段主機名稱
cache_peer      192.168.100.42    sibling 8084 3334 name=cache-yh002  //鄰居主機名稱
refresh_pattern ^http               1440       20%     14400 override-expire override-lastmod ignore-reload ignore-no-cache ignore-private ignore-auth    //緩存規則,就是http開頭的全部緩存,最小緩存時間1440分鐘,最大14400分鐘。
error_directory /mynet/app/squid4/share/errors/Simplify_Chinese  //頁面錯誤幫助文件
5. 啓動緩存服務器和一些常用命令:
/mynet/app/squid4/sbin/squid  -z   //程序啓動之前必須要執行此命令,建立緩存目錄。/mynet/cache必須要有squid的讀寫權限。
/mynet/app/squid4/sbin/squid  -k parse  //檢查配置文件是否正確
/mynet/app/squid4/sbin/squid  -s  //啓動squid服務
/mynet/app/squid4/sbin/squid -k reconfigure  //重載配置文件
/mynet/app/squid/bin/squidclient –p8081 mgr:info //查詢命中率
五. 維護和排錯
1. DNS的更新
如果需要更新和修改DNS的域名信息,請添加host
121.199.64.91 name.mynet.cn
聯通的訪問在雅虎機房,電信的訪問在佛山機房,其它的訪問都在鐵通機房
域名生效查詢命令:
 Dig @202.106.0.20 1001.cache.mynet.cn   //網通
 Dig @219.141.136.10  1001.cache.mynet.cn  //電信
 Dig @8.8.8.8  1001.cache.mynet.cn //海外
 dig @127.0.0.1 1001.cache.mynet.cn  //查詢本機是否已經正常
如果一直不能生效,可以到121.199.64.91, 121.199.64.92,119.145.145.40這三臺機器上,手動執行/root/bin/named_update.sh看是否有什麼報錯。
2. DNS修改配置
修改配置文件:/mynet/app/named/etc/named.conf
修改域文件: /mynet/app/named/etc/master , 在這個目錄下面的子目錄裏面,根據區域不同,子目錄就不同。
區域對應:cnc-聯通,tel-電信, mob-移動鐵通,edu-教育網,any-海外
增加不同區域的域名: /mynet/app/named/etc/master/etc
3. DNS的重啓和加載
/mynet/bin/named  start  //啓動named程序
/mynet/bin/named  stop 
/mynet/bin/named   reload //重新加載配置文件
/mynet/app/squid/bin/squidclient –p8081 mgr:info //查詢命中率
4. DNS的日誌文件
/var/log/message   //程序啓動日誌
/mynet/app/named/logs/query.log  //運行狀態的解析日誌
5. Squid對應端口和產品
Squid1—8081—超級戰車
Squid2—8082—淘裏淘外
Squid3—8083—hichina組
Squid4—8084—淘裏淘外CDN
Squid5—8085—阿里阿外CDN
6. Squid的配置文件修改
不同產品線的squid不一樣,請根據產品線到/mynet/app修改不同的配置文件,文件名都是squid.conf
7. Squid的重啓和加載
/mynet/bin/squid1  start  //啓動squid1,如果是其他產品線,請修改最後一個腳本命令的數字,比如/mynet/bin/squid2
/mynet/bin/squid1  stop  //停止squid1
/mynet/bin/squid1  reload  //重新加載配置文件
8. 常見問題解決:
Squid無法提供服務,排查步驟如下:
Ps aux | grep squid     //查看squid進程是否啓動了
Netstat –lnt  | grep 80   //查看對應的端口是否已經打開
Df –h  //查看磁盤是否已經爆滿
之前遇到過一次日誌磁盤爆滿的現象,如果發現/mynet/logs空間已經是100%,請到改目錄下面對所有日誌文件進行清理,清理命令如下:
 #> /mynet/logs/access-1.log
        
9. Squid一切正常,但是負載均衡獲取不到數據,這個是防火牆和負載均衡不兼容,暫時解決方法就是關閉防火牆
/etc/init.d/iptables stop
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章