CentOS3 安裝后的調整以及設置
1. 檢查系統是否正常
# more /var/log/messages (檢查有無系統內核級錯誤(error)信息)
# dmesg (檢查有無硬件錯誤(error)信息)
# ifconfig(檢查網卡設置是否正確)
# ping www.discuz.net (檢查網絡是否正常)
2. 關閉不需要的服務
ntsysv
以下僅列出需要啟動的服務,未列出的服務一律可以關閉:
crond
irqbalance (僅當服務器CPU支持S.M.P-對稱多路處理器架構時才需開啟, 例如有2個或2個以上的CPU。否則關閉)
microcode_ctl
network
random
sendmail
sshd
syslog
3. 對TCP/IP網絡參數進行調整,加強抗syn_flood能力
# echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf
# sysctl –p
4. 配置yum
1) rpm --import /usr/share/doc/centos-release-3/RPM-GPG-KEY-CentOS-3
2) yum list | tee /etc/yum.list
解釋:yum是一個功能強大的可以方便管理系統中RPM包的工具,使用yum可以通過網絡免費升級、安裝系統中的RPM包,并且在升級安裝過程當中自動判斷解決依賴性問題,同時,也可以卸載刪除RPM包,詳細信息請參見Discuz!知識庫中Linux部分對yum的詳細介紹 (http://kb.discuz.com/index.php?title=%E4%BD%BF%E7%94%A8yum%E7%AE%A1%E7%90%86CentOS_RPM)
5. 安裝所需的RPM
在安裝前,請先使用 rpm -qa | grep NAME 檢查是否已經安裝了以下的RPM包(將命令中的NAME替換為下列包名稱即可),如果系統顯示已經安裝過該RPM包,則無需使用yum再次安裝!
gcc
gcc-c++
ntp
flex
bzip2-devel
ncurses-devel
libjpeg-devel
libpng-devel
libtiff-devel
freetype-devel
pam-devel
perl-CGI
perl-DBI
zlib-devel
yum install NAME (將NAME替換為上面列表中的RPM包名稱即可開始自動網絡安裝)
6. 檢查系統時間并設置定期時間同步
1) date (確認系統時間是否正確)
2) ntpdate 210.72.145.44 (與中國國家授時中心進行時間校正)
3) crontab -e 加入一行任務,每隔30分鐘進行一次時間同步:
*/30 * * * * ntpdate 210.72.145.44 > /dev/null 2>&1
7. 重新啟動系統
init 6
8. 源碼編譯安裝環境所需的軟件
1) LibXML2
# cd /usr/local/src
# wget http://download.discuz.net/env/libxml2-2.6.24.tar.bz2
# tar xjvf libxml2-2.6.24.tar.bz2
# cd libxml2-2.6.24
# ./configure --prefix=/usr/local/libxml2
# make
# make install
2) GD2
# cd /usr/local/src
# wget http://download.discuz.net/env/gd-2.0.33.tar.gz
# tar xzvf gd-2.0.33.tar.gz
# cd gd-2.0.33
# ./configure --prefix=/usr/local/gd2 --mandir=/usr/share/man
# make
# make install
[編輯]升級OpenSSL和OpenSSH加強安全性
1) 升級OpenSSL
# cd /usr/local/src
# wget http://download.discuz.net/env/openssl-0.9.7j.tar.gz
# wget http://download.discuz.net/env/openssh-4.2p1.tar.gz
# tar xzvf openssl-0.9.7j.tar.gz
# cd openssl-0.9.7j
# ./config --prefix=/usr/local/openssl
# make
# make test
# make install
# cd ..
2) 升級OpenSSH
# tar xzvf openssh-4.2p1.tar.gz
# cd openssh-4.2p1
# ./configure --prefix=/usr --with-pam --with-zlib --with-ssl- dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man
# make
# make install
3)禁止root直接登錄,此處先建立一個普通系統用戶:
# useradd username
# passwd username
# vi /etc/passwd (將passwd文件中username的登錄shell改為/bin/sh)
# vi /etc/ssh/sshd_config (將#protocol 1,2一行改為protocol 2)
# vi /etc/ssh/sshd_config (將#PermitRootLogin yes一行改為PermitRootLogin no)
# vi /usr/etc/sshd_config (將#protocol 1,2一行改為protocol 2)
# vi /usr/etc/sshd_config (將#PermitRootLogin yes一行改為PermitRootLogin no)
# /etc/rc.d/init.d/sshd restart
[編輯]安裝配置Apache+PHP+MySQL+Zend Optimizer
1) 下載軟件
# cd /usr/local/src
# wget http://download.discuz.net/env/httpd-2.0.58.tar.bz2
# wget http://download.discuz.net/env/mysql-standard-5.0.22-linux-i686.tar.gz
# wget http://download.discuz.net/env/php-5.1.4.tar.bz2
# wget http://download.discuz.net/env/ZendOptimizer-3.0.1-linux-glibc21-i386.tar.gz
2) 安裝MySQL
# tar xzvf mysql-standard-5.0.22-linux-i686.tar.gz
# useradd mysql
# mv mysql-standard-5.0.22-linux-i686 /usr/local/mysql
# cd /usr/local/mysql
# scripts/mysql_install_db --user=mysql
# chown -R root .
# chown -R mysql data
# chgrp -R mysql .
# mv data /var/lib/mysql
# ln -s /var/lib/mysql ./data
# cp support-files/my-large.cnf /etc/my.cnf
# bin/mysqld_safe --user=mysql &
# bin/mysqladmin -u root password newpassword_for_root
# bin/mysqladmin -u root -p shutdown
# cp support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
# /etc/rc.d/init.d/mysqld start
3) 編譯安裝Apache
# cd /usr/local/src
# tar xjvf httpd-2.0.58.tar.bz2
# cd httpd-2.0.58
# ./configure --prefix=/usr/local/apache2 --mandir=/usr/ share/man --enable-module=so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --enable-gzip --enable-cache --enable-file-cache --enable-mem-cache --enable-disk-cache
# make
# make install
4) 編譯安裝PHP
# cd /usr/local/src
# tar xjvf php-5.1.4.tar.bz2
# cd php-5.1.4
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/ apache2/bin/apxs --with-zlib --with-bz2 --with-tiff-dir --with-libxml-dir=/usr/local/libxml2 --with-gd=/usr/local/ gd2 --with-freetype-dir --with-jpeg-dir --with-png-dir --with-ttf --enable-mbstring --with-mysql=/usr/local/mysql --with-config-file-path=/etc --disable-ipv6 --enable-gd- native-ttf
# make
# make install
# cp php.ini-dist /etc/php.ini
5) 安裝Zend Optimizer
# cd /usr/local/src
# tar xzvf ZendOptimizer-3.0.1-linux-glibc21-i386.tar.gz
# ./ZendOptimizer-3.0.1-linux-glibc21-i386/install.sh
6) 整合Apache與PHP
# vi /usr/local/apache2/conf/httpd.conf
搜索:
DirectoryIndex index.html index.html.var
將其改為:
DirectoryIndex index.html index.htm index.php
搜索:
AddType application/x-gzip .gz .tgz
在下面添加一行:
AddType application/x-httpd-php .php
保存退出后重啟Apache
# /usr/local/apache2/bin/apachectl restart
[編輯]更改Apache運行賬戶以及建立虛擬主機
1. 更改Apache運行賬戶默認情況下Apache在Linux系統上使用nobody賬戶運行,我們下面將要更改運行賬戶提升Apache的安全性和權限可控性。
# useradd www
# su www
$ mkdir -p /home/www/wwwroot/discuz
$ exit
# vi /usr/local/apache2/conf/httpd.conf
找到:
User nobody
Group #-1
改為:
User www
Group www
2. 建立一個虛擬主機此處我們為Apache建立一個虛擬主機。
# vi /usr/local/apache2/conf/httpd.conf
找到:
#NameVirtualHost *
去調前面的“#”號以打開注釋,使用虛擬主機模式運行Apache。在該配置文件的末尾添加一個虛擬主機,且該虛擬主機日志文件存放目錄為/home/www/logs
<VirtualHost *>
ServerName www.your-domain.com
DocumentRoot /home/www/wwwroot/discuz
ErrorLog /home/www/logs/discuz-error_log
CustomLog /home/www/logs/discuz-access_log combined
# 建立Discuz!論壇所需的Rewrite規則
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/archiver/([a-z0-9/-]+/.html)$ $1/archiver/index.php?$2
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)/.html$ $1/forumdisplay.php?fid=$2&page=$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)/.html$ $1/viewthread.php?tid=$2&extra=page/%3D$4&page=$3
RewriteRule ^(.*)/profile-(username|uid)-(.+)/.html$ $1/viewpro.php?$2=$3
</IfModule>
</VirtualHost>
保存并退出文件編輯,下面建立日志存放目錄:
# mkdir /home/www/logs
重新啟動Apache:
# /usr/local/apache2/bin/apachectl restart
至此,一個虛擬主機就建立好了!
[編輯]服務器優化
1. Apache優化
經過上述操作后,Apache已經能夠正常運行。但是,對于訪問量稍大的站點,Apache的這些默認配置是無法滿足需求的,我們仍需調整Apache的一些參數,使Apache能夠在大訪問量環境下發揮出更好的性能。以下我們對Apache配置文件httpd.conf中對性能影響較大的參數進行一些說明。
(1) Timeout 該參數指定Apache在接收請求或發送所請求內容之前的最長等待時間(秒),若超過該時間Apache則放棄處理該請求,并釋放連接。該參數默認值為120,推薦設置為60,對于訪問量較大的網站可以設置為30。
(2) KeepAlive 該參數控制Apache是否允許在一個連接中有多個請求,默認打開。但對于大多數論壇類型站點來說,通常設置為off以關閉該支持。
(3) MPM - prefork.c 在默認情況下Apache使用Prefork(進程)工作模式,可以說這部分的參數設置是對Apache性能影響的核心和關鍵。用戶可以在配置文檔中找到以下配置段:
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 15
MaxRequestsPerChild 0
</IfModule>
這就是控制Apache進程工作的配置段,為了更好的理解上述配置中的各項參數,下面讓我們先了解一下Apache是如何控制進程工作的。我們知道,在Unix系統中,很多服務(Service)的守護進程(Daemon)在啟動時會創建一個進程以準備應答可能的連接請求,服務即進入了端口監聽狀態,當一個來自客戶端(Client)的請求被發送至服務所監聽的端口時,該服務進程即會處理該請求,在處理過程中,該進程處于獨占狀態,也就是說如果此時有其他請求到達,這些請求只能“排隊”等待當前請求處理完成且服務進程釋放。這樣就會導致越來越多的請求處于隊列等待狀態,實際表現就是該服務處理能力非常低下。Apache使用Prefork模式很好的解決了這一問題。下面我們來看看Apache實際上是如何高效率工作的。
當Apache啟動時,Apache會啟動StartSpareServers個空閑進程同時準備接收處理請求,當多個請求到來時,StarSpareServers進行會越來越少,當空閑進程減少到MinSpareServers個時,Apache為了能夠繼續有充裕的進程處理請求,它會再啟動StartsServers個進程備用,這樣就大大減少了請求隊列等待的可能,使得服務效率提高,這也是為什么叫做Pre-fork的原因;讓我們繼續跟蹤Apache的工作,我們假設Apache已經啟動了200個進程來處理請求,理論上來說,此時Apache一共有205個進程,而過了一段時間,假設有100個請求都得到了Apache的響應和處理,那么此時這100個進程就被釋放成為空閑進程,那么此時Apache有105個空閑進程。而對于服務而言,啟動太多的空閑進程時沒有任何意義的,反而會降低服務器的整體性能,那么Apache真的會有105個空閑進程么?當然不會!實際上Apache隨時在檢查自己,當發現有超過MaxSpareServers個空閑進程時,則會自動停止關閉一些進程,以保證空閑進程不過過多。說到這里,用戶應該對Apache的工作方式有了一定的了解,如果想獲得更多更詳細的說明請參閱Apache手冊文檔。
我們還有兩個參數沒有介紹:MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一時間內最多允許有多少客戶端能夠與其連接,如果超過MaxClients個連接,客戶端將會得到一個“服務器繁忙”的錯誤頁面。我們看到默認情況下MaxClients設置為15,這對一些中型站點和大型站點顯然是遠遠不夠的!也許您需要同時允許512個客戶端連接才能滿足應用需求,好吧,那么就讓我們把MaxClients修改為512,保存httpd.conf并退出,重啟Apache,很遺憾,在重啟過程當中您看到了一些錯誤提示,Apache重啟失敗。錯誤提示中告訴您MaxClients最大只能設定為256,相信您一定很失望。不過不要沮喪,Apache作為世界一流的Web Server一定不會如此單薄的!在默認情況下,MaxClients的確只能設定為不超過256的整數,但是,如果您有需要完全可以隨意定制,此時就需要使用ServerLimit參數來配合使用,簡單的說ServerLimit就像是水桶,而MaxClients就像是水,您可以通過更換更大的水桶(將ServerLimit設定為一個較大值)來容納更多的水(MaxClients),但要注意,MaxClients的設定數值是不能大于ServerLimit的設定數值的!
下面讓我們了解一下MaxRequestPerChild參數,該參數指定一個連接進程中可以有多少個線程同時工作。也許這樣解釋過于專業,那么您只要想想“網絡螞蟻”、“網際快車FlashGet”中的“多點同時下載”即可,該參數實際上就是限制最多可以用幾個“點”。默認設置為0,即為:不限制。但需要注意,如果將該值設置的過小會引起訪問問題,如果沒有特殊需要或者訪問量壓力并非很大可以保持默認值,如果訪問量很大則推薦設置為2048。
好了,解釋了這么多,讓我們看看經過修改后Perfork.c配置段的推薦配置:
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1024
MaxClients 768
MaxRequestsPerChild 0
</IfModule>
完成了上述對Apache的調整,Apache已經獲得了較大的性能改善。記住,在修改任何參數后都需要重啟Apache才能生效的。有關Apache的優化遠遠不止這些,有興趣的用戶可以閱讀Apache手冊文檔或者尋找一些文獻資料學習。
2. PHP優化對于PHP的優化主要是對php.ini中的相關主要參數進行合理調整和設置,以下我們就來看看php.ini中的一些對性能影響較大的參數應該如何設置。
# vi /etc/php.ini
(1) PHP函數禁用找到:
disable_functions =
該選項可以設置哪些PHP函數是禁止使用的,PHP中有一些函數的風險性還是相當大的,可以直接執行一些系統級腳本命令,如果允許這些函數執行,當PHP程序出現漏洞時,損失是非常嚴重的!以下我們給出推薦的禁用函數設置:
disable_functions = phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status
需注意:如果您的服務器中含有一些系統狀態檢測的PHP程序,則不要禁用shell_exec,proc_open,proc_get_status等函數。
(2) PHP腳本執行時間找到:
max_execution_time = 30
該選項設定PHP程序的最大執行時間,如果一個PHP腳本被請求,且該PHP腳本在max_execution_time時間內沒能執行完畢,則PHP不再繼續執行,直接給客戶端返回超時錯誤。沒有特殊需要該選項可保持默認設置30秒,如果您的PHP腳本確實需要長執行時間則可以適當增大該時間設置。
(3) PHP腳本處理內存占用找到:
memory_limit = 8M
該選項指定PHP腳本處理所能占用的最大內存,默認為8MB,如果您的服務器內存為1GB以上,則該選項可以設置為12MB以獲得更快的PHP腳本處理效率。
(4) PHP全局函數聲明找到:
register_globals = Off
網絡上很多關于PHP設置的文章都推薦將該選項設置為On,其實這是一種及其危險的設置方法,很可能引起嚴重的安全性問題。如果沒有特殊的需要,強烈推薦保留默認設置!
(5) PHP上傳文件大小限制找到:
upload_max_filesize = 2M
該選項設定PHP所能允許最大上傳文件大小,默認為2MB。根據實際應用需求,可以適當增大該設置。
(6) Session存儲介質找到:
session.save_path
如果你的PHP程序使用Session對話,則可以將Session存儲位置設置為/dev/shm,/dev/shm是Linux系統獨有的TMPFS文件系統,是以內存為主要存儲方式的文件系統,比RAMDISK更優秀,因為可以使用DISKSWAP作為補充,而且是系統自帶的功能模塊,不需要另行配置。想想看,從磁盤IO操作到內存操作,速度會快多少?只是需要注意,存儲在/dev/shm的數據,在服務器重啟后會全部丟失。不過這對于Session來說是無足輕重的。
3. MySQL優化
在Apache, PHP, MySQL的體系架構中,MySQL對于性能的影響最大,也是關鍵的核心部分。對于Discuz!論壇程序也是如此,MySQL的設置是否合理優化,直接影響到論壇的速度和承載量!同時,MySQL也是優化難度最大的一個部分,不但需要理解一些MySQL專業知識,同時還需要長時間的觀察統計并且根據經驗進行判斷,然后設置合理的參數。
下面我們了解一下MySQL優化的一些基礎,MySQL的優化我分為兩個部分,一是服務器物理硬件的優化;二是MySQL自身(my.cnf)的優化。
(1) 服務器硬件對MySQL性能的影響
a) 磁盤尋道能力(磁盤I/O),以目前高轉速SCSI硬盤(7200轉/秒)為例,這種硬盤理論上每秒尋道7200次,這是物理特性決定的,沒有辦法改變。MySQL每秒鐘都在進行大量、復雜的查詢操作,對磁盤的讀寫量可想而知。所以,通常認為磁盤I/O是制約MySQL性能的最大因素之一,對于日均訪問量在100萬PV以上的Discuz!論壇,由于磁盤I/O的制約,MySQL的性能會非常低下!解決這一制約因素可以考慮以下幾種解決方案:
使用RAID-0+1磁盤陣列,注意不要嘗試使用RAID-5,MySQL在RAID-5磁盤陣列上的效率不會像你期待的那樣快;
拋棄傳統的硬盤,使用速度更快的閃存式存儲設備。經過Discuz!公司技術工程的測試,使用閃存式存儲設備可比傳統硬盤速度高出6-10倍左右。
b) CPU 對于MySQL應用,推薦使用S.M.P.架構的多路對稱CPU,例如:可以使用兩顆Intel Xeon 3.6GHz的CPU。
c) 物理內存對于一臺使用MySQL的Database Server來說,服務器內存建議不要小于2GB,推薦使用4GB以上的物理內存。
(2) MySQL自身因素當解決了上述服務器硬件制約因素后,讓我們看看MySQL自身的優化是如何操作的。對MySQL自身的優化主要是對其配置文件my.cnf中的各項參數進行優化調整。下面我們介紹一些對性能影響較大的參數。
由于my.cnf文件的優化設置是與服務器硬件配置息息相關的,因而我們指定一個假想的服務器硬件環境:
CPU: 2顆Intel Xeon 2.4GHz
內存: 4GB DDR
硬盤: SCSI 73GB
下面,我們根據以上硬件配置結合一份已經優化好的my.cnf進行說明:
# vi /etc/my.cnf
以下只列出my.cnf文件中[mysqld]段落中的內容,其他段落內容對MySQL運行性能影響甚微,因而姑且忽略。
[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking
# 避免MySQL的外部鎖定,減少出錯幾率增強穩定性。
skip-name-resolve
# 禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。 但需要注意,如果開啟該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL 將無法正常處理連接請求!
back_log = 384
# 指定MySQL可能的連接數量。當MySQL主線程在很短的時間內接收到非常多的連接請求, 該參數生效,主線程花費很短的時間檢查連接并且啟動一個新線程。back_log 參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。 如果系統在一個短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的 TCP/IP連接的偵聽隊列的大小。不同的操作系統在這個隊列大小上有它自己的限制。 試圖設定back_log高于你的操作系統的限制將是無效的。默認值為50。對于Linux系統 推薦設置為小于512的整數。
key_buffer_size = 256M
# key_buffer_size指定用于索引的緩沖區大小,增加它可得到更好的索引處理性能。對于 內存在4GB左右的服務器該參數可設置為256M或384M。注意:該參數值設置的過大反而會是服務器整體效率降低!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
# 查詢排序時所能使用的緩沖區大小。注意:該參數對應的分配內存是每連接獨占!如果有100個連接,那么實際分配的總共排序緩沖 區大小為100 × 6 = 600MB。所以,對于內存在4GB左右的服務器推薦設置為6-8M。
read_buffer_size = 4M
# 讀查詢操作所能使用的緩沖區大小。和sort_buffer_size一樣,該參數對應的分配 內存也是每連接獨享!
join_buffer_size = 8M
# 聯合查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配 內存也是每連接獨享!
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
# 指定MySQL查詢緩沖區的大小。可以通過在MySQL控制臺執行以下命令觀察:
# > SHOW VARIABLES LIKE '%query_cache%';
# > SHOW STATUS LIKE 'Qcache%';
# 如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩沖不夠的情況;
# 如果Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,如果該值較小反而會影響效率, 那么可以考慮不用查詢緩沖;Qcache_free_blocks,如果該值非常大,則表明緩沖區中碎片很多。
tmp_table_size = 256M
max_connections = 768
# 指定MySQL允許的最大連接進程數。如果在訪問論壇時經常出現Too Many Connections的錯誤提 示,則需要增大該參數值。
max_connect_errors = 10000000
wait_timeout = 10
# 指定一個請求的最大連接時間,對于4GB左右內存的服務器可以設置為5-10。
thread_concurrency = 8
# 該參數取值為服務器邏輯CPU數量×2,在本例中,服務器有2顆物理CPU,而每顆物理CPU又支持 H.T超線程,所以實際取值為4 × 2 = 8
skip-networking
# 開啟該選項可以徹底關閉MySQL的TCP/IP連接方式,如果WEB服務器是以遠程連接的方式訪問 MySQL數據庫服務器則不要開啟該選項!否則將無法正常連接!
以上,我們對一份my.cnf做了簡單的說明,MySQL的優化是一項需要長期觀察,長期積累經驗,長期試驗的工作。有興趣的用戶可以邊查閱文檔資料邊做試驗,在實際應用中獲得更多的經驗的收獲。
優化部分至此就基本介紹完了,在所有優化操作完成后,需要重新啟動Apache和MySQL服務:
# /usr/local/apache2/bin/apachectl restart
# /etc/rc.d/init.d/mysqld restart
六、服務器iptables防火墻安全策略定制參考對于Linux服務器而言,使用iptables進行安全控制和包過濾是較好的選擇。該部分無意介紹iptables的使用方法,iptables的功能非常強大,有興趣的用戶可以在這里 (http://www.netfilter.org)找到很多有關NetFilter/Iptables的資料。下面我們以一臺裝有雙網卡的L.A.M.P服務器為例,給出一個能夠滿足較為安全訪問需求的iptables腳本。
服務器雙網卡使用情況:
eth0: 連接公網WAN
eth1: 連接私網LAN
服務器對公網WAN開放服務情況:
FTP on TCP Port 21
SSH on TCP Port 22
SMTP on TCP Port 25
HTTP on TCP Port 80
POP on TCP Port 110
# vi /usr/local/sbin/fw.sh
將下面腳本粘貼到fw.sh中:
#! /bin/bash
# This Net-Filter script was create by Discuz! - Nanu.
# Support: nanu@discuz.com
# Set FTP Passive Transfer Mode
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
# Initalize
/sbin/iptables -F -t filter
/sbin/iptables -F -t nat
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
# Enable Private Network lo & eth1 Access
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -i eth1 -j ACCEPT
#################################
#### Server Security Settings ###
#################################
# ICMP Control
/sbin/iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
# FTP Service
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# SSH Service
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Mail Service
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# WWW Service
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Deny Other Connections
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
保存完畢后,執行以下命令:
# chmod 755 /usr/local/sbin/fw.sh
# echo '/usr/local/sbin/fw.sh' >> /etc/rc.local
# /usr/local/sbin/fw.sh
查看當前iptables訪問控制策略:
# iptables -L
至此,本文全部內容介紹完畢
新聞熱點
疑難解答