經過七個簡單的步驟來加固你的 Linux 服務器。php
這篇入門文章將向你介紹基本的 Linux 服務器安全知識。雖然主要針對 Debian/Ubuntu,可是你能夠將此處介紹的全部內容應用於其餘 Linux 發行版。我也鼓勵你研究這份材料,並在適用的狀況下進行擴展。linux
保護服務器安全的第一件事是更新本地存儲庫,並經過應用最新的修補程序來升級操做系統和已安裝的應用程序。nginx
在 Ubuntu 和 Debian 上:git
$ sudo apt update && sudo apt upgrade -y
複製代碼
在 Fedora、CentOS 或 RHEL:github
$ sudo dnf upgrade
複製代碼
接下來,建立一個新的用戶賬戶。永遠不要以 root 身份登陸服務器,而是建立你本身的賬戶(用戶),賦予它 sudo
權限,而後使用它登陸你的服務器。安全
首先建立一個新用戶:bash
$ adduser <username>
複製代碼
經過將 sudo
組(-G
)附加(-a
)到用戶的組成員身份裏,從而授予新用戶賬戶 sudo
權限:服務器
$ usermod -a -G sudo <username>
複製代碼
你應該使用 SSH 密鑰登陸到新服務器。你可使用 ssh-copy-id
命令將預生成的 SSH 密鑰上傳到你的新服務器:網絡
$ ssh-copy-id <username>@ip_address
複製代碼
如今,你無需輸入密碼便可登陸到新服務器。ssh
接下來,進行如下三個更改:
使用你選擇的文本編輯器打開 /etc/ssh/sshd_config
並確保如下行:
PasswordAuthentication yes
PermitRootLogin yes
複製代碼
改爲這樣:
PasswordAuthentication no
PermitRootLogin no
複製代碼
接下來,經過修改 AddressFamily
選項將 SSH 服務限制爲 IPv4 或 IPv6。要將其更改成僅使用 IPv4(對大多數人來講應該沒問題),請進行如下更改:
AddressFamily inet
複製代碼
從新啓動 SSH 服務以啓用你的更改。請注意,在從新啓動 SSH 服務以前,與服務器創建兩個活動鏈接是一個好主意。有了這些額外的鏈接,你能夠在從新啓動 SSH 服務出錯的狀況下修復全部問題。
在 Ubuntu 上:
$ sudo service sshd restart
複製代碼
在 Fedora 或 CentOS 或任何使用 Systemd 的系統上:
$ sudo systemctl restart sshd
複製代碼
如今,你須要安裝防火牆、啓用防火牆並對其進行配置,以僅容許你指定的網絡流量經過。(Ubuntu 上的)簡單的防火牆(UFW)是一個易用的 iptables 界面,可大大簡化防火牆的配置過程。
你能夠經過如下方式安裝 UFW:
$ sudo apt install ufw
複製代碼
默認狀況下,UFW 拒絕全部傳入鏈接,並容許全部傳出鏈接。這意味着服務器上的任何應用程序均可以訪問互聯網,可是任未嘗試訪問服務器的內容都沒法鏈接。
首先,確保你能夠經過啓用對 SSH、HTTP 和 HTTPS 的訪問來登陸:
$ sudo ufw allow ssh
$ sudo ufw allow http
$ sudo ufw allow https
複製代碼
而後啓用 UFW:
$ sudo ufw enable
複製代碼
你能夠經過如下方式查看容許和拒絕了哪些服務:
$ sudo ufw status
複製代碼
若是你想禁用 UFW,能夠經過鍵入如下命令來禁用:
$ sudo ufw disable
複製代碼
你還能夠(在 RHEL/CentOS 上)使用 firewall-cmd,它已經安裝並集成到某些發行版中。
Fail2ban 是一種用於檢查服務器日誌以查找重複或自動攻擊的應用程序。若是找到任何攻擊,它會更改防火牆以永久地或在指定的時間內阻止攻擊者的 IP 地址。
你能夠經過鍵入如下命令來安裝 Fail2ban:
$ sudo apt install fail2ban -y
複製代碼
而後複製隨附的配置文件:
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
複製代碼
重啓 Fail2ban:
$ sudo service fail2ban restart
複製代碼
這樣就好了。該軟件將不斷檢查日誌文件以查找攻擊。一段時間後,該應用程序將創建至關多的封禁的 IP 地址列表。你能夠經過如下方法查詢 SSH 服務的當前狀態來查看此列表:
$ sudo fail2ban-client status ssh
複製代碼
幾乎全部 Linux 服務器操做系統都啓用了一些面向網絡的服務。你可能但願保留其中大多數,然而,有一些你或許但願刪除。你可使用 ss
命令查看全部正在運行的網絡服務:(LCTT 譯註:應該是隻保留少部分,而全部確認無關的、無用的服務都應該停用或刪除。)
$ sudo ss -atpu
複製代碼
ss
的輸出取決於你的操做系統。下面是一個示例,它顯示 SSH(sshd
)和 Ngnix(nginx
)服務正在偵聽網絡並準備鏈接:
tcp LISTEN 0 128 *:http *:* users:(("nginx",pid=22563,fd=7))
tcp LISTEN 0 128 *:ssh *:* users:(("sshd",pid=685,fd=3))
複製代碼
刪除未使用的服務的方式因你的操做系統及其使用的程序包管理器而異。
要在 Debian / Ubuntu 上刪除未使用的服務:
$ sudo apt purge <service_name>
複製代碼
要在 Red Hat/CentOS 上刪除未使用的服務:
$ sudo yum remove <service_name>
複製代碼
再次運行 ss -atup
以確認這些未使用的服務沒有安裝和運行。
本教程介紹了加固 Linux 服務器所需的最起碼的措施。你應該根據服務器的使用方式啓用其餘安全層。這些安全層能夠包括諸如各個應用程序配置、入侵檢測軟件(IDS)以及啓用訪問控制(例如,雙因素身份驗證)之類的東西。
via: opensource.com/article/19/…
做者:Patrick H. Mullins 選題:lujun9972 譯者:wxy 校對:wxy