- 1.請先更新Ubuntu套件清單
- 2.升級Ubuntu系統套件
- 3.安裝curl套件
- 4.下載VestaCP腳本並執行安裝
- 5.安裝Memcached記憶體物件快取(内存对象缓存Object Cache)
- 6.修復VestaCP的資料庫與phpMyAdmin串接問題
- 7.修改主機時區與預設語言
- 8.啟用VestaCP自動更新
- 9.設定不同方案規格並建立子帳戶
- 10.配置網站的SSL
- 11.配置VestaCP面板的SSL
- 12.修改VestaCP面板的連接埠並禁止IP直接訪問
- 13.VestaCP面板對應網域DNS
- 14.禁用部分具有風險的php函式
- 15.啟動前端Nginx的HTTP/2功能與CROS
- 16.處理phpMyAdmin無法匯入檔案較大的資料庫
- 17.配置免費WAF模組mod security
- 18.解決PHP mail無法寄信
- 19.設定SSH金鑰認證
- 20.重置VestaCP面板
- 21.升級VestaCP面板
- 22.移除VestaCP面板
- 23.解決inode滿載問題
- 24.修改phpMyAdmin預設路徑
- 25.LAMP模式下重啟後Apache無法執行問題
- 26.LAMP模式下隱藏Apache版本資訊
- 27.Set-Cookie行為增加SameSite
VestaCP提供VPS使用者簡易的網頁主機環境,
透過簡單的指令建立LNAMP+電子郵件系統,
性能優異加上圖形化管理介面方便性高,
常被當作cPanel系統的替代方案。
但是實際安裝操作下,
VestaCP有諸多細節須留意,
才能順利配置站點到VestaCP系統運行。
2017/6/15 標示新版Ubuntu16.04系統安裝VestaCP可省略操作。
2016/10/1 更新Ubuntu14.04系統安裝VestaCP並啟動HTTP/2與php7。
2019/1/23 測試Ubuntu18.04系統安裝VestaCP並啟動HTTP/2。
VestaCP官網 https://vestacp.com
VestaCP支持以下作業系統
RHEL/CentOS 5,6,7
Debian 6,7,8
Ubuntu 12.04-16.04
請留意本教程以Ubuntu 14.04示範,不同系統安裝方式會有出入。
所有操作均以root管理員身分執行,非管理員帳戶請鍵入
sudo -i
輸入帳戶密碼成為root管理員。
如需掛載外部儲存裝置,請於終端機輸入
wget -O auto_disk.sh https://dl.dropboxusercontent.com/s/clbk14z92unpt92/auto_disk.sh && sudo bash auto_disk.sh
自動將外部儲存裝置掛載於預設的admin帳戶底下(如需掛載其他帳戶請自行修改auto_disk.sh內容)。
參考資料 http://www.bt.cn
1.請先更新Ubuntu套件清單
apt-get update
※.安裝通用套件庫(新版可略)
apt-get install -y software-properties-common
參考資料 http://www.ubuntubuzz.com
※.輸入php7與新版Nginx/Apache的PPA,並預先處理本地語言為UTF-8(新版可略)
apt-get install -y language-pack-en-base LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:ondrej/php LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:chris-lea/nginx-devel LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:ondrej/apache2 LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:ondrej/mysql-5.6 apt-get update
若此時SSH終端出現
The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY xxxxxxxxxxxxxxxx 的錯誤訊息
請複製 NO_PUBKEY後方的文字輸入
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com xxxxxxxxxxxxxxxx
參考資料 https://www.digitalocean.com/community
http://www.ubuntumaniac.com/2016/05/install-nginx-1110-on-ubuntu-1604.html
http://forum.ubuntu.org.cn
2.升級Ubuntu系統套件
apt-get upgrade -y
3.安裝curl套件
apt-get install -y curl
4.下載VestaCP腳本並執行安裝
請進入VestaCP官網,點選Install,顯示Install標籤的內容
此時請先確認主機已經安裝curl,即可透過指令
curl -O http://vestacp.com/pub/vst-install.sh
下載安裝腳本到主機,
再往下捲動頁面到Advanced Install Settings
選擇站長所需的系統環境
本教程以Nginx前端+Apache後端配置,並關閉MAIL與DNS功能,
若使用者要使用其他配置須留意VestaCP可能會出現錯誤,
參考配置如下圖。
如果不需要信箱系統與DNS可以取消(選擇no),將能節省主機RAM的消耗
對於RAM不大的主機可以嘗試增加置換空間
配置教學參考 doub.io將主機預設的置換空間取消,
再參考 digitalocean教學配置一個較大的置換空間。
而防火牆Firewall亦可選擇其他伺服器防禦模組,VestaCP的Firewall亦可取消(選擇no),
推薦使用雲鎖Cloudlock強化Linux伺服器安全。
雲鎖Cloudlock 安裝教學 http://www.sztio.com/1135
自訂系統選擇好後按下Generate Install Command
會出現bash開頭的指令即可貼上終端
終端機顯示以下對話確認後執行VestaCP安裝
如果無法順利安裝時請嘗試在bash指令加上 -f 強制安裝,
如果顯示需要手動修改主機名稱請開啟/etc/hostname與/etc/hosts修改名稱並重啟主機,
如果是作業系統更新鏡像問題,有些主機商會使用自家鏡像,
可以到主機的/etc/apt/sources.list
將原本http://鏡像主機網址/ubuntu/
全部取代成http://archive.ubuntu.com/ubuntu/並保存即可
大約10分鐘左右完成VestaCP安裝,
開啟瀏覽器開啟 https://伺服器的IP:8083
輸入帳號與密碼登入管理員介面
※.安裝php7附加套件(請自行取捨需要的功能,新版可略)
apt-get install -y php7.0-common libapache2-mod-php7.0 php7.0-cgi php7.0-cli php7.0-phpdbg php7.0-fpm libphp7.0-embed php7.0-dev php7.0-curl php7.0-gd php7.0-imap php7.0-interbase php7.0-intl php7.0-ldap php7.0-mcrypt php7.0-readline php7.0-odbc php7.0-pgsql php7.0-pspell php7.0-recode php7.0-tidy php7.0-xmlrpc php7.0 php7.0-json php-all-dev php7.0-sybase php7.0-sqlite3 php7.0-mysql php7.0-opcache php7.0-bz2 php7.0-zip php7.0-soap php7.0-xml
參考資料 http://www.zhujiceping.com/16657.html
※.後端Apache停用php5,啟動php7(新版可略)
a2dismod php5 a2enmod php7.0
系統將會提示請重啟Apache
service apache2 restart
參考資料 https://forum.vestacp.com
https://www.mysterydata.com/(php版本切換參考)
5.安裝Memcached記憶體物件快取(内存对象缓存Object Cache)
apt-get install memcached -y
apt-get install php-memcache -y
安裝完成後請重啟Memcached與Apache
service memcached restart
service apache2 restart
透過以下指令檢查memcached是否執行
ps aux | grep memcached
若需要在WordPress啟用memcached快取,
請先下載Memcached Object Cache外掛 https://wordpress.org/plugins/memcached/
取得memcached.x.x.x.zip的壓縮檔請先解壓縮,
解壓縮檔中取出object-cache.php上傳至WordPress的/wp-content資料夾底下
即可進入WordPress後台的設定>WP Super Cache外掛>進階選項,
勾選”使用 object 快取來儲存快取檔案。 (實驗選項)”即可。
預設占用64MB記憶體,調整使用量請在終端鍵入
vi /etc/memcached.conf
將-m 64修改成-m 128或其他數值(單位 MB)即可保存並退出,
重啟後即可生效。
提高Memcached安全性避免攻擊,
請在memcached.conf檔案確認127.0.0.1是否有-1綁定,
並加上-U 0禁用UDP
-l 127.0.0.1 -U 0
針對WordPress相同資料表前綴的多個站點memcached快取問題,
請在wp-config.php檔案寫入如下(site1的字串各個站點都獨立一個)
define('WP_CACHE_KEY_SALT', 'site1');
參考資料 http://www.servermom.org https://serverfault.com
https://www.mxp.tw https://zhangge.net/5097.html
https://www.digitalocean.com/community/tutorials/
※.處理phpMyAdmin切換php版本後無法執行的問題(新版可略)
apt-get install -y php7.0-mbstring
安裝後請重啟系統
需留意phpMyAdmin的匯出資料庫功能在PHP7會出現500 error,
請編輯/usr/share/phpmyadmin/export.php
vi /usr/share/phpmyadmin/export.php
查看第864行,找到break 2;
if (! $export_plugin->exportStructure( $db, $table, $crlf, $err_url, 'triggers', $export_type, $do_relation, $do_comments, $do_mime, $do_dates )) { break 2; }
修改成break;並保存。
參考資料 http://stackoverflow.com
http://superuser.com/a/1111548
6.修復VestaCP的資料庫與phpMyAdmin串接問題
由於目前這個VestaCP版本會出現phpMyAdmin無法連接資料庫的問題
(測試過CentOS7系統並不會有這個問題,CentOS7系統可以跳過本節教學)
請先執行以下指令(由cloudwp提供的教學)
cd /usr/share/doc/phpmyadmin/examples
gunzip config.sample.inc.php.gz
cp ./config.sample.inc.php /etc/phpmyadmin/config.inc.php
或透過WinSCP以SFTP連接主機(按這裡前往阿榮福利味下載程式),
將/usr/share/doc/phpmyadmin/examples底下的
config.sample.inc.php複製到本地電腦改名為config.inc.php
再上傳到/etc/phpmyadmin/覆蓋原始檔案即可
新版建議額外安裝php-zip套件,讓phpmyadmin可以解壓縮zip打包的資料庫,請於終端機鍵入
apt-get install php-zip -y
安裝完成後請重新載入系統即可。
針對Ubuntu18.04版本運行phpmyadmin會遇到
./libraries/sql.lib.php#613
./libraries/plugin_interface.lib.php#551
的錯誤訊息,請在終端輸入
vi /usr/share/phpmyadmin/libraries/sql.lib.php
將613行 (count($analyzed_sql_results[‘select_expr’] == 1)代碼修改為
((count($analyzed_sql_results['select_expr']) == 1)
鍵入:w保存,:q退出,再次輸入
vi /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
將551行 if ($options != null && count($options) > 0) { 代碼修改為
if ($options != null ) {
鍵入:w保存,:q退出,完成後請重新載入系統即可。
※.安裝繁體中文語言包(新版可略)
(目前新版0.9.8已經解決切換中文500錯誤的問題,可以跳過本節教學)
接下來安裝繁體中文的語言包到VestaCP,請在終端輸入
wget https://raw.githubusercontent.com/serghey-rodin/vesta/master/web/inc/i18n/tw.php -O /usr/local/vesta/web/inc/i18n/tw.php
登入VestaCP管理員面板
先點選管理員帳戶更改語言
Language選擇tw並保存,即可出現繁體中文操作介面
7.修改主機時區與預設語言
點選”服務器”選項
點選齒輪圖示配置伺服器
更改伺服器預設時區與預設語言
配置伺服器的備份數量與備份位置(提供FTP/SFTP遠程備份的功能)
8.啟用VestaCP自動更新
為了降低VestaCP未及時更新造成伺服器空窗問題,請點選”更新”
啟用自動更新,讓VestaCP自動升級到最新的系統
但如果擔心升級會影響站點穩定性請停用自動更新改成手動操作。
9.設定不同方案規格並建立子帳戶
VestaCP面板提供多帳戶管理的服務(類似WHM),
點選”套件”,在某個方案按下”編輯”即可調整不同方案的規格
包括網頁主機空間、流量、資料庫數量、備份量,以及是否開放SSH連線
配置好套件方案的規格後,即可新增VestaCP的子帳戶,
請點選”使用者”並按下增加的圖示即可建立
一般建議給子帳戶SSH存取設定為nologin,
或設定成rssh,提供比較安全的SFTP連接
10.配置網站的SSL
(本節的SSL教學為手動安裝已取得的域名SSL憑證,如果沒有SSL憑證請跳第16節的教學)
站點SSL已經是網站基本配備,
VestaCP網站安裝需要安裝SSL時點選”網頁”,新增或編輯網域對應配置
勾選SSL功能,選擇好SSL家目錄後分別貼上證書代碼
若使用Apache格式的SSL證書,
請務必補齊SSL中級憑證避免斷裂問題,完成後儲存即可
※.安裝VestaCP Let’s Encrypt自動更新模組(新版可略)
(本節透過VestaCP Let’s Encrypt自動更新模組取得站點SSL憑證)
下載git到主機
cd /usr/local git clone https://github.com/certbot/certbot.git git clone https://github.com/interbrite/letsencrypt-vesta.git
建立webroot資料夾
mkdir -p /etc/letsencrypt/webroot
連接/usr/local/bin/便於控制帳戶
ln -s /usr/local/certbot/certbot-auto /usr/local/bin/certbot-auto ln -s /usr/local/letsencrypt-vesta/letsencrypt-vesta /usr/local/bin/letsencrypt-vesta
由於後端為Apache,輸入
ln -s /usr/local/letsencrypt-vesta/letsencrypt.conf /etc/apache2/conf.d/letsencrypt.conf
重啟Apache
service apache2 restart
檢查自動更新模組是否啟用
which at atd atq atrm service atd status
若顯示未啟用或錯誤,請請鍵入
apt-get install at
並啟動at
service atd start
接下來即可配置Let’s Encrypt到站點,
請留意站點的使用者帳戶名稱與域名是否正確,
僅支持頂級域名與二級域名,
使用二級域名的站點務必刪除VestaCP產生www開頭的三級域名,
並確認域名A紀錄已經對應到主機IP後,
輸入規則為
letsencrypt-vesta -a 60 USERNAME DOMAIN
其中-a 60為60天自動renew
USERNAME為帳戶名稱
DOMAIN是要簽發Let’s Encrypt證書的域名,
完成Let’s Encrypt配置。
VestaCP Let’s Encrypt模組 GitHub https://github.com/interbrite/letsencrypt-vesta
11.配置VestaCP面板的SSL
網頁的SSL配置可以透過VestaCP面板進行處理,
但是VestaCP面板本身的SSL需要上傳到
/usr/local/vesta/ssl/底下
務必使用Nginx格式的SSL憑證,
若使用Apache格式SSL憑證時,
請將中級憑證加入網域憑證中串接再上傳到伺服器上覆蓋
certificate.crt
certificate.key
確認VestaCP面板可透過https訪問表示SSL已經生效
新版請從VestaCP面板>伺服器>設定>Vesta SSL配置即可。
參考資料 https://becoder.org/vestacp-lets-encrypt/
12.修改VestaCP面板的連接埠並禁止IP直接訪問
針對VestaCP面板的安全性來說,可以修改port提高安全性
請點選”防火牆”,按下/VESTA編輯
加上VestaCP面板欲使用的port
再編輯/usr/local/vesta/nginx/conf/nginx.conf檔案
vi /usr/local/vesta/nginx/conf/nginx.conf
尋找
server { listen 8083; server_name _; root /usr/local/vesta/web; charset utf-8;
將8083修改成所需的port,
並將server_name _;修改成VestaCP後台域名,例如
server_name vestacp.example.com;
如果VestaCP控制面板域名已經完成IP解析,請在server{
}下方加上
server { listen 8083 default_server; server_name _; return 403; ssl on; ssl_certificate /usr/local/vesta/ssl/certificate.crt; ssl_certificate_key /usr/local/vesta/ssl/certificate.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; }
請務必將8083的部分修改成所需的port,
禁止直接透過IP訪問VestaCP面板。
重新啟動伺服器讓VestaCP面板新port生效
13.VestaCP面板對應網域DNS
再到網域DNS配置指向伺服器IP完成VestaCP建置
※.處理VestaCP子帳戶無法串接資料庫問題(新版可略)
(目前新版0.9.8已經解決切換中文500錯誤的問題,可以跳過本節教學)
建議管理員可以在資料庫選項新增一個空白資料庫,
主要防止子帳戶無法對資料庫進行連接的問題。
VestaCP面板配置到此完成,
其他的附加應用可以訪問VestaCP論壇 https://forum.vestacp.com/
比方說cPanel主機常見的一鍵安裝功能,
VestaCP面板同樣有腳本可以使用,請參考以下連結
https://forum.vestacp.com/viewtopic.php?f=19&t=8523
※.解決VestaCP SSL的Weak DH安全性問題(新版可略)
openssl dhparam -out /etc/nginx/dhparams.pem 2048
key生成時間較長,可先用WinSCP進行以下操作
請開啟/etc/nginx/nginx.conf檔案修改內容
vi /etc/nginx/nginx.conf
請在ssl_ciphers後方加上
ssl_dhparam /etc/nginx/dhparams.pem;
如果站點有HSTS的需求,請一併加上
add_header Strict-Transport-Security "max-age=15552000"; 或 add_header Strict-Transport-Security "max-age=15552000; includeSubdomains";
配置完成後請重新載入Nginx設定
nginx -s reload
須留意HSTS不能設定在後端Apache的.htaccess會出現錯誤。
參考資料 https://becoder.org/vestacp-weakdh/
14.禁用部分具有風險的php函式
請開啟/etc/php/7.0/apache2/php.ini
vi /etc/php/7.0/apache2/php.ini
在disable_functions =後方加上
apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode,
重啟Apache
service apache2 restart
參考資料 https://vestacp.com/docs/
https://becoder.org/secure-vestacp-php-phpmyadmin/
15.啟動前端Nginx的HTTP/2功能與CROS
請開啟/home/(vesta_user)/conf/web/snginx.conf
其中(vesta_user)請替換成使用者名稱,
如果VestaCP尚無站點啟用SSL將無法進行以下操作。
vi /home/(vesta_user)/conf/web/snginx.conf
請將
server {
listen xx.xx.xx.xx:443;
…
}
修改成
server { listen xx.xx.xx.xx:443 http2; ... }
再將
location / {
proxy_pass https://%ip%:%web_ssl_port%;
location ~* ^.+\.(%proxy_extentions%)$ {
root %sdocroot%;
access_log /var/log/%web_system%/domains/%domain%.log combined;
access_log /var/log/%web_system%/domains/%domain%.bytes bytes;
expires max;
try_files $uri @fallback;
}
}
修改成
location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; access_log /var/log/%web_system%/domains/%domain%.log combined; access_log /var/log/%web_system%/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; add_header Access-Control-Allow-Origin *; } }
保存並重啟Nginx
nginx -s reload
接下來編輯預設模板自動將未來新增的站點啟動HTTP/2與CROS
請開啟/usr/local/vesta/data/templates/web/nginx/default.stpl
vi /usr/local/vesta/data/templates/web/nginx/default.stpl
請將
server {
listen %ip%:%proxy_ssl_port%;
server_name %domain_idn% %alias_idn%;
ssl on;
修改成
server { listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; ssl on;
如果其他站點Nginx選擇不同模式,請一併修改
/usr/local/vesta/data/templates/web/nginx/hosting.stpl
/usr/local/vesta/data/templates/web/nginx/caching.stpl
參考資料 https://forum.vestacp.com
https://forum.vestacp.com https://www.mf8.biz
※.解決VestaCP防火牆CIDR輸入格式錯誤問題(新版可略)
如果站點有使用CloudFlare可根據
https://www.cloudflare.com/ips
建立封鎖規則,但這個目前VestaCP新版0.9.8配置CIDR會回報格式錯誤
請直接開啟/usr/local/vesta/data/firewall/rules.conf編輯VestaCP防火牆規則
vi /usr/local/vesta/data/firewall/rules.conf
內容範例如下
RULE='11' ACTION='DROP' PROTOCOL='UDP' PORT='53' IP='0.0.0.0/0' COMMENT='DNS' SUSPENDED='no' TIME='21:56:40' DATE='2016-09-28' RULE='12' ACTION='ACCEPT' PROTOCOL='TCP' PORT='80,443,8083' IP='103.21.244.0/22' COMMENT='CloudFlare' SUSPENDED='no' TIME='17:15:41' DATE='2014-09-16'
其中RULE=’##’為規則編號
ACTION=’ACCEPT/DROP’規則控制允許連線或封鎖
PROTOCOL=’ICMP/TCP/UDP’規則控制通訊協定
PORT=’##,###,####’規則控制連接埠,以,隔開
COMMENT=’NAME’為規則的名稱
參考資料 https://forum.vestacp.com
16.處理phpMyAdmin無法匯入檔案較大的資料庫
請開啟/etc/php/7.0/apache2/php.ini
vi /etc/php/7.0/apache2/php.ini
分別編輯 max_execution_time = 60 腳本超時時間
max_input_time = 60
memory_limit = 256M 腳本占用記憶體上限
post_max_size = 10M POST提交上限
upload_max_filesize = 10M 檔案上傳大小上限
須留意數值大小memory_limit > post_max_size > upload_max_filesize
接下來請開啟/etc/mysql/my.cnf
vi /etc/mysql/my.cnf
請修改max_allowed_packet = 1M的大小
(例如 max_allowed_packet = 10M)
設定完成後請重啟主機
reboot
參考資料 http://actionpc.pixnet.net/blog
17.配置免費WAF模組mod security
安裝mod_security
apt install -y libapache2-mod-security2
使用預設的配置文件
cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
編輯mod_security配置
vi /etc/modsecurity/modsecurity.conf
請將SecRuleEngine DetectionOnly
修改成
SecRuleEngine On
並儲存。
接下來啟動CRS規則,編輯
vi /etc/apache2/mods-enabled/security2.conf
請在</IfModule>前方加上
IncludeOptional /usr/share/modsecurity-crs/*.conf IncludeOptional /usr/share/modsecurity-crs/activated_rules/*.conf
並儲存。
開始匯入需要的CRS預設提供的規則。
ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_23_request_limits.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_23_request_limits.conf ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_30_http_policy.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_30_http_policy.conf ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_35_bad_robots.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_35_bad_robots.conf ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_35_bad_robots.data /usr/share/modsecurity-crs/activated_rules/modsecurity_35_bad_robots.data ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_35_scanners.data /usr/share/modsecurity-crs/activated_rules/modsecurity_35_scanners.data ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_45_trojans.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_45_trojans.conf ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_47_common_exceptions.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_47_common_exceptions.conf
除了CRS預設規則外,也能匯入ComodoWAF的防禦規則
Comodo WAF官網 https://waf.comodo.com
免費註冊ComodoWAF後,請下載取得以下規則,
22_PHP_PHPGen.conf
26_Apps_Joomla.conf
28_Apps_WordPress.conf
29_Apps_WPPlugin.conf
31_Apps_Drupal.conf
並添加到/usr/share/modsecurity-crs/activated_rules/即可。
啟動mod_security模組
a2enmod security2
完成後請重新載入Apache
service apache2 restart
需留意mod_security模組啟動後,
phpMyAdmin匯入功能無法直接匯入.sql格式檔案,
請先將檔案壓縮成檔名.sql.zip格式的壓縮檔再上傳即可。
查看mod_security攔截日誌
cat /var/log/apache2/modsec_audit.log
如果要停用mod_security模組請輸入
a2dismod security2
並重新載入Apache即可
如果是運行WordPressCMS站點,
可以額外安裝WAF外掛(NinjaFirewall (WP Edition))進行防禦
NinjaFirewall (WP Edition)外掛頁面 https://wordpress.org/plugins/ninjafirewall/
參考資料 http://blog.topspeedsnail.com
https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual
※.修正REMOTE_ADDR顯示訪客ip(負載平衡)
Apache使用負載平衡節點後,
REMOTE_ADDR將顯示為節點ip而非訪客ip,
修改mod_rpaf仍無法獲取ip時可以改用mod_remoteip設定。
請於終端輸入
vi /etc/apache2/mods-available/remoteip.conf
創建新檔,內容寫入
<IfModule mod_remoteip.c> RemoteIPHeader X-Real-IP RemoteIPInternalProxy 127.0.0.1 RemoteIPInternalProxy xxx.xxx.8.1 // 主機ip </IfModule>
鍵入:w保存:q退出,接著停用mod_rpaf
a2dismod rpaf
啟用mod_remoteip並重起Apache
a2enmod remoteip
service apache2 restart
透過php代碼獲取REMOTE_ADDR判斷ip是否正確
<?php echo $_SERVER['REMOTE_ADDR']; ?>
確認無誤後移除mod_rpaf
apt-get remove libapache2-mod-rpaf
參考資料 https://forum.vestacp.com https://gist.github.com
18.解決PHP mail無法寄信
請於終端機鍵入
apt-get install sendmail -y
WordPress可透過WP Mail SMTP外掛測試PHP mail(),
若仍然無法寄送請檢查防火牆是否已阻擋SMTP端口。
須留意如果啟用寄信程式後,主機名若未完成解析時會持續寄送解析錯誤信件,
內容像是sudo: unable to resolve host vps.example.top
請直接設定主機hostname解析到本地即可,請在終端機鍵入
vi /etc/hosts
按i輸入一行
127.0.0.1 localhost localhost.localdomain vps.example.top
按Esc停止輸入,鍵入:w寫入檔案,鍵入:q退出檔案即可
參考資料 https://stackoverflow.com http://www.flogiston.net
2022/5/25 更新
部分VPS配置會自動覆蓋/etc/hosts紀錄導致重啟後失效,請在終端機鍵入
vi /etc/cloud/templates/hosts.debian.tmpl
接著同樣按i輸入原本應寫入/etc/hosts的紀錄即可
19.設定SSH金鑰認證
這項操作請分別在root帳戶與admin帳戶(與其他子帳戶)的終端介面取得金鑰
建立帳戶的/.ssh隱藏資料夾並給予權限
mkdir -p ~/.ssh chmod 700 ~/.ssh
產生金鑰
ssh-keygen
接下來對話均輸入Enter預設即可
金鑰產生後將id_rsa.pub輸出成authorized_keys檔案
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
下載帳戶/.ssh/id_rsa檔案,
將檔案透過PuTTYgen讀取轉存成.ppk私密金鑰(private key)
PuTTYgen 下載官網 http://www.chiark.greenend.org.uk
接著請將SSH連接配置.ppk驗證確定可以訪問。
當所有帳戶均取得金鑰後,請以root帳戶身分開啟/etc/ssh/sshd_config
vi /etc/ssh/sshd_config
將PasswordAuthentication設定為no
PubkeyAuthentication啟用並設定為yes
PasswordAuthentication no PubkeyAuthentication yes
保存檔案後請輸入reboot重啟主機使設定生效。
※.禁用主機預設的root帳戶(新版禁用)
請透過VestaCP的admin管理員帳戶與伺服器SSH連線,
鍵入sudo -i後輸入密碼以管理員身分操作
請開啟/etc/ssh/sshd_config
vi /etc/ssh/sshd_config
按下i進入編輯模式
將PermitRootLogin yes修改成PermitRootLogin no
按下鍵盤ESC退出編輯模式
輸入:w(含w左邊的半形冒號)保存sshd_config
輸入:q退出vi編輯器
接下來請輸入reboot重啟主機使設定生效。
參考資料 http://www.vixual.net/blog/archives/234
https://dotblogs.com.tw/may05005/2015/12/23/134838
20.重置VestaCP面板
VestaCP面板若出現無法訪問的情形,可以透過重置的方式解決問題
請在終端操作
apt-get install vesta-nginx --reinstall
apt-get install vesta-php --reinstall
參考資料 https://forum.vestacp.com
21.升級VestaCP面板
如果用戶關閉VestaCP面板自動更新可以透過終端手動升級
請在終端操作
v-update-sys-vesta-all
參考資料 https://forum.vestacp.com
22.移除VestaCP面板
如果需要移除VestaCP面板
請在終端操作
service vesta stop
停止VestaCP運行
接下來執行移除指令
針對RHEL/CentOS 5,6,7系統
請執行 yum remove vesta* rm -f /etc/yum.repos.d/vesta.repo
針對Debian 6,7,8/Ubuntu 12.04-15.10系統
請執行 apt-get remove vesta* rm -f /etc/apt/sources.list.d/vesta.list
最後再刪除檔案目錄及corn即可
rm-rf /usr/local/vesta
23.解決inode滿載問題
請先開啟php.ini,在終端輸入
vi /etc/php/7.0/apache2/php.ini
將session.gc_probability數值由0修改為1後保存並重啟Apache。
參考資料 https://github.com
24.修改phpMyAdmin預設路徑
請先開啟phpmyadmin.conf,在終端輸入
vi /etc/apache2/conf.d/phpmyadmin.conf
找到
Alias /phpmyadmin /usr/share/phpmyadmin
將Alias後方的/phpmyadmin改成新的路徑
(自訂,例如 Alias /phpmyadmin_new )保存後退出
重起apache
service apache2 restart
接著在終端輸入
vi /usr/local/vesta/web/templates/admin/list_db.html
修改admin帳戶vestacp面板的phpmyadmin路徑,找到
if ($data[$key]['TYPE'] == 'mysql') $db_admin_link = "http://".$http_host."/phpmyadmin/";
將/phpmyadmin/修改成新的路徑(例如 /phpmyadmin_new/)
保存後退出,如果要修改user帳戶請在終端輸入
vi /usr/local/vesta/web/templates/user/list_db.html
操作方式同admin帳戶。
參考資料 https://forum.vestacp.com
25.LAMP模式下重啟後Apache無法執行問題
重啟主機可能發生VestaCP的Nginx占用Apache端口,
因為Apache沒有使用Nginx當作前端導致無法正常運行
在終端介面輸入
service nginx stop
service apache2 start
若此時Apache可以正常運行,請輸入
apt-get remove nginx
移除多餘的nginx程序
參考資料 https://www.digitalocean.com/community
26.LAMP模式下隱藏Apache版本資訊
有些站長會希望隱藏Apache資訊,可以在終端介面輸入
vi /etc/apache2/apache2.conf
在apache2.conf新增如下
ServerTokens Prod ServerSignature Off
鍵入:w寫入與:q退出,再鍵入
service apache2 restart
重啟Apache即可。
27.Set-Cookie行為增加SameSite
根據綠界金流說明,
Chrome瀏覽器從84版開始將未設置Set-Cookie的SameSite屬性強制指定Lax導致結帳資訊異常,
官方提供的解決方法包括啟用https與針對所有cookies加上SameSite=None屬性。
先啟用mod_headers模組並重啟Apache,在終端輸入
a2enmod header
service apache2 restart
接著在.htaccess檔案寫入以下內容即可。
<IfModule mod_headers.c> <If "%{HTTP_USER_AGENT} !~ /(iPhone; CPU iPhone OS 1[0-2]|iPad; CPU OS 1[0-2]|iPod touch; CPU iPhone OS 1[0-2]|Macintosh; Intel Mac OS X.*Version\x2F1[0-2].*Safari|Macintosh;.*Mac OS X 10_14.* AppleWebKit.*Version\x2F1[0-3].*Safari)/i"> Header edit Set-Cookie ^(.*)$ "$1; SameSite=None; Secure" </If> </IfModule>
另外測試aaPanel(寶塔面板)的寫法有所不同,
Header內容須更改成
Header always edit Set-Cookie ^(.*)$ "$1; SameSite=None; Secure"
如果是LiteSpeed網頁主機的話整段改用
<IfModule LiteSpeed> <If "%{HTTP_USER_AGENT} !~ /(iPhone; CPU iPhone OS 1[0-2]|iPad; CPU OS 1[0-2]|iPod touch; CPU iPhone OS 1[0-2]|Macintosh; Intel Mac OS X.*Version\x2F1[0-2].*Safari|Macintosh;.*Mac OS X 10_14.* AppleWebKit.*Version\x2F1[0-3].*Safari)/i"> ForceSecureCookie secure same_site_none </If> </IfModule>
參考資料 https://devarticles.in
https://community.shopify.com
https://www.ecpay.com.tw/CascadeFAQ/CascadeFAQ_Qa?nID=3914