如何保護您的LAMP服務器

 

LAMP堆棧代表Linux,Apache,MySQL / MariaDB和PHP / Python / Perl,是一種非常流行的免費和開源軟件組合,用於當今運行數百萬個網站。 儘管許多人選擇基於Nginx而不是Apache的高效LEMP堆棧,但是仍然有大量用戶選擇LAMP作為其項目。 實際上,如今,有超過30%的活動網站在LAMP之上運行。 該堆棧被認為是可靠的,非常適合運行高性能,高可用性的Web應用程序。 在本教程中,我們將向您展示如何保護您的LAMP堆棧 Linux VPS.

安全Linux

啟用自動更新

考慮到LAMP堆棧是基於Linux的,整個開源社區都在進行改進,因此它也被認為是安全的。 在 Ubuntu VPS,所有安全更新和補丁在Ubuntu倉庫中一經提供就可以自動進行無人值守安裝,因此,請確保將系統配置為 自動安裝安全更新 如果您擔心安全性。 如果您的服務器上未啟用此功能,並且您沒有手動安裝最新的升級和修補程序,則會使服務器面臨被利用的風險。

要啟用自動無人值守升級,您應該安裝 無人值守升級 包。

sudo apt-get install無人值守升級

要配置要自動升級的軟件包類別,您應編輯 /etc/apt/apt.conf.d/50unattended-upgrades 文件。

配置防火牆

擁有正確配置的防火牆是另一件事,對整體安全性非常重要。 UFW 是Ubuntu的默認防火牆配置工具,最初已禁用。 啟用 UFW 您可以使用:

sudo ufw啟用

啟用對基本服務的訪問,例如 OpenSSH的 和Apache:

sudo ufw允許22 sudo ufw允許80 sudo ufw允許443

啟用對其他服務的訪問非常容易。 只需將上面示例中的端口號替換為您要啟用訪問權限的服務的端口號即可。 即使系統重新啟動,防火牆規則也將處於活動狀態。

禁用未使用的服務

如果您有未使用的活動服務,則只需禁用它們即可。 例如,如果您已在服務器上啟動並運行了諸如Dovecot之類的服務,而根本沒有使用它,請使用以下命令停止並禁用該服務:

sudo systemctl停止dovecot.service sudo systemctl禁用dovecot.service

安裝Fail2ban

Fail2ban是一項服務,可掃描日誌文件中是否有太多登錄失敗並阻止顯示惡意信號的IP地址。 如果您未在諸如OpenSSH之類的服務上使用兩種因素或公用/專用身份驗證機制,則此服務非常有用。 至 安裝Fail2ban,運行以下命令:

sudo apt-get install fail2ban

創建默認配置文件的副本,以便您可以安全地進行更改,而不會被系統升級覆蓋:

須藤cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

編輯 本地監獄 文件:

須藤nano /etc/fail2ban/jail.local

[sshd] 塊應類似於以下內容:

[sshd] enabled = true端口= ssh過濾器= sshd logpath = /var/log/auth.log maxretry = 5 bantime = 600

保存文件並重新啟動Fail2ban以使更改生效:

sudo systemctl重新啟動fail2ban.service

在系統啟動時啟用Fail2ban:

sudo systemctl啟用fail2ban.service

安全的Apache

隱藏Apache敏感信息

默認值 阿帕奇 配置提供了很多敏感信息,可用於服務。 隱藏此信息至關重要,因此請繼續為新設置創建一個配置文件:

須藤nano /etc/apache2/conf-available/custom.conf

粘貼以下內容:

ServerTokens Prod ServerSignature Off TraceEnable Off選項all -Indexes標頭未設置ETag標頭始終未設置X-Powered-By FileETag無

啟用標頭Apache模塊(如果尚未啟用):

sudo a2enmod標頭

啟用配置:

須藤a2enconf custom.conf

重新啟動Apache以使更改生效:

sudo systemctl重啟apache2.service

安裝並啟用mod_security

Mod_security是Web應用程序防火牆(WAF),可以作為Apache的附加模塊安裝。 它可以用來保護Web服務器免受SQL注入,會話劫持,跨站點腳本,不良用戶代理等眾多攻擊的攻擊。 要安裝並啟用mod_security,請運行以下命令:

sudo apt-get install libapache2-modsecurity sudo a2enmod security2

安裝後,您應該配置模塊並啟用OWASP ModSecurity核心規則集(CRS)。

sudo mv /etc/modsecurity/modsecurity.conf-推薦/etc/modsecurity/modsecurity.conf

然後,打開 /etc/modsecurity/modsecurity.conf 文件並編輯/添加以下設置:

SecRuleEngine開SecResponseBodyAccess關SecRequestBodyLimit 8388608 SecRequestBodyNoFilesLimit 131072 SecRequestBodyInMemoryLimit 262144

保存並關閉文件。 刪除當前的CRS,並使用以下命令下載OWASP CRS:

sudo rm -rf / usr / share / modsecurity-crs sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git / usr / share / modsecurity-crs cd / usr / share / modsecurity-crs sudo mv crs-setup.conf.example crs-setup.conf

編輯 /etc/apache2/mods-enabled/security2.conf 文件。 它看起來應該像下面這樣:

SecDataDir / var / cache / modsecurity IncludeOptional /etc/modsecurity/*.conf IncludeOptional“ /usr/share/modsecurity-crs/*.conf” IncludeOptional“ /usr/share/modsecurity-crs/rules/*.conf

最後,重新啟動Apache以使更改生效:

sudo systemctl重啟apache2.service

安裝並啟用mod_evasive

Mod_evasive是一個Apache模塊,可用於保護Web服務器免受DoS(拒絕服務),DDoS(分佈式拒絕服務)和暴力攻擊。 要在服務器上安裝mod_evasive,請運行以下命令:

須藤apt-get install libapache2-mod-evasive

打開默認配置文件 /etc/apache2/mods-enabled/evasive.conf 並編輯設置,使其如下所示:

DOSPageCount 20 DOSSiteCount 5 DOSPageInterval 50 DOSSiteInterval 1 DOSBlockingPeriod 1 DOSLogDir“ / var / log / mod_evasive”

保存並關閉文件。 為日誌文件創建目錄:

sudo mkdir / var / log / mod_evasive sudo chown -R www-data:/ var / log / mod_evasive

重新啟動Apache:

sudo systemctl重啟apache2.service

安全的MySQL

保護MySQL服務器部署

確保MySQL服務安全的第一件事是運行 mysql_secure_installation 腳本。

sudo mysql_secure_installation

該腳本將幫助您執行重要的安全任務,例如設置root密碼,禁用遠程root登錄,刪除匿名用戶等。

禁用遠程MySQL訪問

如果您不對自己的計算機執行遠程操作 MySQL服務器 然後禁用對服務的遠程訪問是非常重要的事情。 您可以通過編輯 /etc/mysql/mysql.conf.d/mysqld.cnf 文件並更改 綁定地址 到127.0.0.1。

bind-address = 127.0.0.1

重新啟動服務以使更改生效。

sudo systemctl重新啟動mysql.service

創建單獨的MySQL用戶

您需要考慮的另一件事是為每個數據庫和應用程序創建單獨的MySQL用戶。

以root用戶身份登錄到MySQL:

mysql -u root -p

您可以使用以下命令創建MySQL數據庫並將所有特權授予新用戶:

mysql>創建數據庫new_db; mysql>將new_db。*上的所有特權授予“ PassW0rD”標識的“ new_user” @“ localhost”; mysql>沖洗特權; MySQL的>退出

然後,您可以為應用程序使用新創建的數據庫和用戶。

禁用本地文件

如果您明確不使用LOCAL INFILE,則最好禁用它。 再次,編輯MySQL配置文件,並在 的[mysqld] 塊:

local-infile = 0

重新啟動MySQL服務,以使更改生效。

安全的PHP

如果執行了上述步驟,則服務器應該已經安全。 確保安全的最後一部分 LAMP服務器 正在保護PHP,這是一個非常簡單的過程。 查找您的PHP ini文件的位置:

php --ini | grep“加載配置文件”

我們將對該文件進行的所有更改。

隱藏PHP基本信息

第一步是隱藏由 PHP 有些攻擊者可能會覺得有用。 打開 php.ini中 文件並更改設置以匹配以下內容:

Exposure_php =關閉display_errors =關閉mail.add_x_header =關閉

保存文件並重新啟動Apahce:

sudo systemctl重啟apache2.service

禁用危險的PHP函數

disable_functions選項 指令允許您禁用一些可能對系統有害的功能。 在您的指令中編輯指令 php.ini中 文件以匹配以下內容:

disable_functions = show_source,system,shell_exec,passthru,exec,phpinfo,popen,proc_open,allow_url_fopen,curl_exec,curl_multi_exec

在此處時,請使用以下設置禁用遠程PHP代碼執行:

allow_url_fopen =關閉allow_url_include =關閉

限製文件上傳

如果您不使用文件上傳功能,則完全安全地限制PHP中的文件上傳。 打開 php.ini中 文件並設置以下設置:

file_uploads =關閉

如果您正在使用文件上傳功能,則可以進行以下設置:

file_uploads =在upload_max_filesize = 1M

哪裡 的upload_max_filesize 是上傳大小限制。

進行這些更改後,重新啟動Apache。

設置最大執行時間

再次,編輯 php.ini中 文件並更改以下設置:

max_execution_time = 30 max_input_time = 30 memory_limit = 40M

這將設置允許腳本運行或解析數據的最長時間(以秒為單位),還將設置允許腳本分配的最大內存量。

啟用open_basedir

open_basedir指令允許您設置允許PHP訪問文件的位置。 編輯 php.ini中 文件並設置正確的位置以匹配您當前的配置:

open_basedir =“ / path / to / the / directory /”

不要忘記重啟Apache,這樣更改才能生效。

 

資源