如何保護Linux伺服器

2020-08-12 17:00:39

如何保護Linux伺服器
不斷髮展的如何保護Linux伺服器的方法指南,希望也能教給您一些有關安全性及其重要性的知識。

CC-BY-SA

目錄
介紹
指導目標
爲什麼要保護伺服器安全
爲什麼還有另一本指南
其他指南
要做/新增
指南概述
關於本指南
我的用例
編輯組態檔-對於懶惰的人
貢獻
在你開始前
確定你的原則
選擇Linux發行版
安裝Linux
之前/之後的安裝要求
其他重要說明
SSH伺服器
SSH公鑰/私鑰
爲AllowGroups建立SSH組
安全 /etc/ssh/sshd_config
刪除Diffie-Hellman短鍵
SSH的2FA / MFA
基礎
限制誰可以使用sudo
NTP用戶端
保護/ proc
強制帳戶使用安全密碼
自動安全更新和警報
更安全的隨機熵池(WIP)
網路
帶UFW的防火牆(不復雜的防火牆)
使用PSAD進行iptables入侵檢測和預防
Fail2Ban的應用程式入侵檢測和預防
審計
使用AIDE(WIP)監視檔案/資料夾完整性
使用ClamAV(WIP)進行防病毒掃描
使用Rkhunter(WIP)進行Rootkit檢測
使用chrootkit(WIP)進行Rootkit檢測
logwatch-系統日誌分析器和報告器
ss-檢視伺服器正在監聽的埠
Lynis-Linux安全審覈
危險地帶
雜項
Gmail和Exim4作爲具有隱式TLS的MTA
單獨的iptables日誌檔案
剩下的
與我聯繫
有用的網址
致謝
許可和版權
(使用nGitHubTOC製作的TOC )

介紹
指導目標
本指南的目的是教您如何保護Linux伺服器。

要保護Linux伺服器安全,您可以做很多事情,本指南將嘗試涵蓋儘可能多的內容。隨着我的學習或人們的貢獻,將新增更多主題/材料。

(目錄)

爲什麼要保護伺服器安全
我假設您正在使用本指南,是因爲您希望已經瞭解了爲什麼良好的安全性很重要。這本身就是一個繁重的話題,因此,將其分解爲本指南所不具備的範圍。如果您不知道該問題的答案,建議您先進行研究。

從較高的角度講,第二種裝置(例如伺服器)處於公共領域(即外部可見),它成爲行爲不端者的目標。不安全的裝置是那些想要存取您的數據或將您的伺服器用作大規模DDOS攻擊的另一個節點的不良行爲者的遊樂場。

更糟糕的是,如果沒有良好的安全性,您可能永遠不會知道伺服器是否受到威脅。行爲不端的人可能已經獲得了對伺服器的未經授權的存取,並且在不進行任何更改的情況下複製了數據,因此您永遠不會知道。否則您的伺服器可能是DDOS攻擊的一部分,而您可能不知道。看新聞中的許多大規模數據泄露事件-直到不良行爲者消失很久以後,兩家公司通常才發現數據泄漏或入侵。

與流行的看法相反,壞蛋並不總是想改變某些東西或將您鎖定在金錢之外。有時,他們只是希望將伺服器上的數據用於其數據倉庫(大數據中有大筆錢),或者祕密地將伺服器用於其惡意目的。

(目錄)

爲什麼還有另一本指南
該指南可能看起來是重複的/不必要的,因爲在線上有無數的文章告訴您如何保護Linux,但是該資訊分佈在不同的文章中,涵蓋了不同的內容,並且使用的方式也不同。誰有時間瀏覽數百篇文章?

在研究Debian版本的過程中,我記下了筆記。最後,我意識到,除了已經知道的知識和正在學習的知識之外,我還掌握了使用指南。我想我會將它放在網上是爲了希望幫助別人學習和節省時間。

我從未找到涵蓋所有內容的指南,這是我的嘗試。

本指南中介紹的許多內容可能是基本的/瑣碎的,但我們大多數人並非每天都安裝Linux,因此很容易忘記這些基本的東西。

諸如Ansible,Chef,Jenkins,Puppet等IT自動化工具可幫助完成繁瑣的安裝/設定伺服器任務,但恕我直言,它們更適合於多個或大規模部署。恕我直言,使用這種型別的自動化工具所需的開銷對於一次性安裝一臺家用的伺服器完全沒有必要。

(目錄)

其他指南
專家,行業領導者以及發行版本身提供了許多指南。包含這些指南中的所有內容都是不切實際的,有時甚至是侵犯版權的。我建議您在開始使用本指南之前先進行檢查。

在網際網路安全中心(CIS)提供的基準是詳盡的,行業值得信賴的,一步一步的指示爲確保Linux的許多口味。檢視他們的關於我們頁面以獲取詳細資訊。我的建議是先閱讀本指南,然後再閱讀CIS的指南。這樣,他們的建議將勝過本指南中的所有內容。
有關發行版特定的強化/安全性指南,請檢視發行版文件。
https://security.utexas.edu/os-hardening-checklist/linux-7-Red Hat Enterprise Linux 7加固清單
https://cloudpro.zone/index.php/2018/01/18/debian-9-3-server-setup-guide-part-1/-#Debian 9.3伺服器設定指南
https://blog.vigilcode.com/2011/04/ubuntu-server-initial-security-quick-secure-setup-part-i/-Ubuntu伺服器初始安全性指南
https://www.tldp.org/LDP/sag/html/index.html
https://seifried.org/lasg/
https://news.ycombinator.com/item?id=19178964
https://wiki.archlinux.org/index.php/安全性 -許多人也推薦了這個
https://securecompliance.co/linux-server-hardening-checklist/
(目錄)

要做/新增
 Fail2ban的自定義監獄
 MAC(強制性存取控制)和Linux安全模組(LSM)
https://wiki.archlinux.org/index.php/security#Mandatory_access_control
增強安全性的Linux / SELinux
https://en.wikipedia.org/wiki/Security-Enhanced_Linux
https://linuxtechlab.com/beginners-guide-to-selinux/
https://linuxtechlab.com/replicate-selinux-policies-among-linux-machines/
https://teamignition.us/how-to-stop-being-a-scrub-and-learn-to-use-selinux.html
AppArmor
https://wiki.archlinux.org/index.php/AppArmor
https://security.stackexchange.com/questions/29378/comparison-between-apparmor-and-selinux
http://www.insanitybit.com/2012/06/01/why-i-like-apparmor-more-than-selinux-5/
 磁碟加密
 Rkhunter和chrootkit
http://www.chkrootkit.org/
http://rkhunter.sourceforge.net/
https://www.cyberciti.biz/faq/howto-check-linux-rootkist-with-detectors-software/
https://www.tecmint.com/install-rootkit-hunter-scan-for-rootkits-backdoors-in-linux/
運送/備份日誌-https: //news.ycombinator.com/item?id=19178681
CIS-CAT- https://learn.cisecurity.org/cis-cat-landing-page
debsums- https: //blog.sleeplessbeastie.eu/2015/03/02/how-to-verify-installed-packages/
(目錄)

指南概述
關於本指南
本指南...

... 是一項正在進行的工作。
... 是專注於在家裏的 Linux伺服器。這裏的所有概念/建議都適用於大型/專業環境,但是這些用例需要更高階,更專業的設定,這些設定不在本指南的範圍之內。
... 不會教您有關Linux,如何安裝Linux或如何使用它的知識。如果您不熟悉Linux,請存取https://linuxjourney.com/。
... 是意味着是Linux發行版無關。
... 不會教您所有需要瞭解的有關安全性的知識,也不會涉及系統/伺服器安全性的所有方面。例如,物理安全性超出了本指南的範圍。
... 沒有談論程式/工具的工作方式,也沒有深入研究它們的角落和縫隙。本指南參照的大多數程式/工具都非常強大且可高度設定。我們的目標是覆蓋生活必需品-足以激發您的食慾,並使您足夠飢餓以至於想去瞭解更多。
... 旨在通過提供您可以複製貼上的程式碼來簡化此操作。貼上之前,您可能需要修改命令,以便隨手使用您喜歡的文字編輯器。
... 的組織順序對我來說是合乎邏輯的-即在安裝防火牆之前先保護SSH。因此,本指南旨在按照提供的順序進行操作,但並非必須如此。請注意,如果您以不同的順序執行操作,某些部分需要完成前面的部分。
(目錄)

我的用例
伺服器型別很多,用例也不同。儘管我希望本指南儘可能通用,但有些情況可能不適用於所有/其他用例。閱讀本指南時,請根據自己的最佳判斷。

爲了幫助將上下文與本指南中涉及的許多主題聯繫起來,我的用例/設定是:

桌上型電腦...
使用單個NIC ...
連線到消費級路由器...
獲取ISP提供的動態WAN IP ...
通過IPV4上的WAN + LAN ...
和區域網使用NAT ...
我希望能夠通過SSH從未知的計算機和未知的位置(即朋友的家)遠端進行。
(目錄)

編輯組態檔-對於懶惰的人
我很懶惰,如果不需要,我不喜歡手動編輯檔案。我還假設其他人也和我一樣。:)

因此,在可能的情況下,我提供了一些code片段來快速執行所需的操作,例如在組態檔中新增或更改行。

該code片段使用像基本的命令echo,cat,sed,awk,和grep。該如何code片斷工作,像什麼每個命令/部分呢,是的範圍本指南出來-的man網頁是你的朋友。

注意:程式碼code片段無法驗證/驗證所經歷的更改-即該行實際上已新增或更改。我將把驗證部分交給您有能力的人。本指南中的步驟確實包括對將要更改的所有檔案進行備份。

並非所有程式碼code片段都可以自動進行更改。這些更改需要好的,老式的手動編輯。例如,您不能僅將一行附加到INI型別檔案中。使用您喜歡的 Linux文字編輯器。

(目錄)

貢獻
我想將本指南放到GitHub上以使其易於共同作業。貢獻者越多,本指南將變得越完善和完善。

要做出貢獻,您可以分叉並提交請求請求或提交新的問題。

(目錄)

在你開始前
確定你的原則
在開始之前,您將需要確定您的原則。您的威脅模型是什麼?需要考慮的一些事情:

爲什麼要保護伺服器安全?
您想要或不想要多少安全性?
您願意爲安全性折衷多少,反之亦然?
您想防禦哪些威脅?您的情況具體如何?例如:
對伺服器/網路的物理存取是否可能成爲攻擊手段?
您是否會在路由器上開啓埠,以便可以在家外存取伺服器?
您是否將在伺服器上託管檔案共用,該檔案共用將安裝在臺式機上?臺式機被感染並進而感染伺服器的可能性是什麼?
如果您的安全實施將您鎖定在自己的伺服器之外,您是否有恢復的方法?例如,您禁用了root登錄或受密碼保護的GRUB。
這些只是要考慮的幾件事。在開始保護伺服器之前,您將需要瞭解要保護的內容以及原因,因此您知道需要執行的操作。

(目錄)

選擇Linux發行版
本指南旨在與發行版無關,因此使用者可以使用所需的任何發行版。話雖如此,但請記住以下幾點:

您想要一個發行版...

... 是穩定的。除非您喜歡在凌晨2點偵錯問題,否則您不希望無人蔘與的升級或手動的軟體包/系統更新來使伺服器無法執行。但這也意味着您可以不用執行最新的,最出色的最新軟體。
... 保持最新的安全修補程式。您可以保護伺服器上的所有內容,但是,如果您正在執行的核心操作系統或應用程式具有已知漏洞,則永遠不會安全。
... 您很熟悉。如果您不瞭解Linux,我建議您先嚐試使用Linux,然後再嘗試保護它。您應該對此感到滿意,並且知道自己的方法,例如如何安裝軟體,組態檔在何處等等。
... 得到很好的支援。即使是經驗最豐富的管理員,也時不時需要幫助。有一個可以尋求幫助的地方可以節省您的理智。
(目錄)

安裝Linux
本指南不介紹安裝Linux,因爲每個發行版的安裝方式都不同,並且安裝說明通常都記錄在案。如果需要幫助,請從發行版本的文件開始。無論分佈如何,高層流程通常都是這樣的:

下載ISO
將其燒錄/複製/傳輸到您的安裝媒介(例如CD或USB記憶棒)
從安裝媒介啓動伺服器
按照提示進行安裝
如果適用,請使用專家安裝選項,以便您可以更嚴格地控​​制伺服器上正在執行的內容。只安裝您絕對需要的東西。我個人不安裝除SSH以外的任何產品。

(目錄)

之前/之後的安裝要求
如果要在路由器上開啓埠,以便可以從外部存取伺服器,請禁用埠轉發,直到系統啓動並受到保護。
除非您要進行物理連線到伺服器的所有操作,否則您將需要遠端存取,因此請確保SSH可以正常工作。
使您的系統保持最新(即sudo apt update && sudo apt upgrade在基於Debian的系統上)。
確保執行特定於設定的任何任務,例如:
設定網路
在中設定安裝點 /etc/fstab
建立初始使用者帳戶
安裝您想要的核心軟體 man
等等...
您的伺服器將需要能夠發送電子郵件,以便您可以獲得重要的安全警報。如果您不設定郵件伺服器,請選中Gmail和Exim4作爲具有隱式TLS的MTA。
我還建議您先閱讀CIS基準測試,然後再開始本指南。
(目錄)

其他重要說明
本指南正在Debian上編寫和測試。下面 下麪的大多數內容都可以在其他發行版上使用。如果您發現沒有的東西,請與我聯繫。分隔每個分發的主要內容是其程式包管理系統。由於我使用Debian,因此我將提供適用apt於所有基於Debian的發行版的適當命令。如果有人願意爲其他發行版提供相應的命令,我將新增它們。
檔案路徑和設定也可能略有不同-如果遇到問題,請與發行版本的文件聯繫。
在開始之前,請閱讀整個指南。您的用例和/或委託人可能要求不做某事或更改順序。
不要在不瞭解所貼上內容的情況下盲目複製和貼上。在您需要使用某些命令之前,您需要對其進行修改,例如使用者名稱。
(目錄)

SSH伺服器
SSH公鑰/私鑰
爲什麼
使用SSH公用/專用金鑰比使用密碼更安全。這也使連線到我們的伺服器變得更加輕鬆快捷,因爲您不必輸入密碼。

這個怎麼運作
請檢視以下參考資料以獲取更多詳細資訊,但在更高層次上,公用/專用金鑰通過使用一對金鑰來驗證身份來起作用。

一個金鑰,即公共金鑰,只能加密數據,而不能解密數據
另一個金鑰(私鑰)可以解密數據
對於SSH,將在用戶端上建立公用和專用金鑰。您要確保兩個金鑰(尤其是私鑰)的安全。即使公開金鑰本來就是公開的,但確保兩個金鑰都不落入不正確的人是明智的。

當您連線到SSH伺服器時,SSH將在您要連線~/.ssh/authorized_keys的伺服器上的檔案中尋找與您要連線的用戶端匹配的公鑰。請注意,該檔案位於您要連線的ID 的主資料夾中。因此,在建立公鑰之後,您需要將其附加到~/.ssh/authorized_keys。一種方法是將其複製到USB記憶棒並將其物理傳輸到伺服器。另一種方法是使用use ssh-copy-id來傳輸和附加公共金鑰。

在建立金鑰並將公鑰新增到~/.ssh/authorized_keys主機後,SSH使用公鑰和私鑰驗證身份,然後建立安全連線。如何驗證身份是一個複雜的過程,但是Digital Ocean很好地記錄了其工作原理。在較高的級別上,身份由伺服器驗證,用公鑰加密質詢訊息,然後將其發送給用戶端。如果用戶端無法使用私鑰解密質詢訊息,則無法驗證身份並且將無法建立連線。

它們被認爲更安全,因爲您需要私鑰來建立SSH連線。如果設定PasswordAuthentication no爲/etc/ssh/sshd_config,則SSH將不允許您在沒有私鑰的情況下進行連線。

您還可以爲金鑰設定一個密碼短語,當使用公鑰/私鑰進行連線時,將要求您輸入金鑰密碼短語。請記住,這樣做意味着您無法使用自動金鑰,因爲您將無法在指令碼中發送密碼。ssh-agent是許多Linux發行版中附帶的程式(通常已經執行),該程式使您可以將未加密的私鑰在記憶體中保留一段可設定的持續時間。只需執行ssh-add,它將提示您輸入密碼。在可設定的持續時間過去之前,不會再次提示您輸入密碼。

根據https://linux-audit.com/,我們將使用Ed25519鍵:

它使用的是橢圓曲線簽名方案,它比ECDSA和DSA提供更好的安全性。同時,它還具有良好的效能。

目標
ED25519公用/專用SSH金鑰:
您客戶的私鑰
伺服器上的公鑰
筆記
您需要對要從/連線到伺服器的每台計算機和帳戶執行此步驟。
參考文獻
https://www.ssh.com/ssh/public-key-authentication
https://help.ubuntu.com/community/SSH/OpenSSH/Keys
https://linux-audit.com/using-ed25519-openssh-keys-instead-of-dsa-rsa-ecdsa/
https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process
https://wiki.archlinux.org/index.php/SSH_Keys
https://www.ssh.com/ssh/copy-id
man ssh-keygen
man ssh-copy-id
man ssh-add
腳步
在要用來連線到伺服器的計算機上,用戶端(而不是伺服器本身)使用以下命令建立Ed25519金鑰ssh-keygen:

ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519.
Your public key has been saved in /home/user/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:F44D4dr2zoHqgj0i2iVIHQ32uk/Lx4P+raayEAQjlcs user@client
The key's randomart image is:
+--[ED25519 256]--+
|xxxx  x          |
|o.o +. .         |
| o o oo   .      |
|. E oo . o .     |
| o o. o S o      |
|... .. o o       |
|.+....+ o        |
|+.=++o.B..       |
|+..=**=o=.       |
+----[SHA256]-----+
注意:如果您設定了密碼,則每次使用此金鑰連線到伺服器時都需要輸入密碼,除非您使用ssh-agent。

現在,您需要將~/.ssh/id_ed25519.pub用戶端的公鑰附加到~/.ssh/authorized_keys伺服器上的檔案。由於我們大概仍在區域網中,因此我們可能免受MIM攻擊,因此我們將用於ssh-copy-id傳輸和附加公鑰:

ssh-copy-id user @ server
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_ed25519.pub"
The authenticity of host 'host (192.168.1.96)' can't be established.
ECDSA key fingerprint is SHA256:QaDQb/X0XyVlogh87sDXE7MR8YIK7ko4wS5hXjRySJE.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
user@host's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'user@host'"
and check to make sure that only the key(s) you wanted were added.
現在是執行特定於您的設定的任務的好時機。

(目錄)

爲AllowGroups建立SSH組
爲什麼
爲了便於控制誰可以通過SSH連線到伺服器。通過使用組,我們可以快速向該組新增/刪除帳戶,以快速允許或不允許SSH存取伺服器。

這個怎麼運作
我們將在SSH的組態檔中使用AllowGroups選項/etc/ssh/sshd_config。告訴SSH伺服器僅允許使用者在特定UNIX組的成員中進行SSH登錄。不在該組中的任何人將無法進行SSH登錄。

目標
我們將在Secure中/etc/ssh/sshd_config使用的UNIX組,以限制誰可以SSH到伺服器
筆記
這是支援Secure中AllowGroup設定的必要步驟。/etc/ssh/sshd_config
參考文獻
man groupadd
man usermod
腳步
建立一個組:

须藤groupadd sshusers
將帳戶新增到組:

sudo usermod -a -G sshusers user1
sudo usermod -a -G sshusers user2
须藤usermod -a -G sshusers ...
您需要對伺服器上需要SSH存取的每個帳戶執行此操作。

(目錄)

安全 /etc/ssh/sshd_config
爲什麼
SSH是通往伺服器的大門。如果要在路由器上開啓埠,以便可以從家庭網路外部通過SSH到伺服器,則尤其如此。如果沒有適當地保護它,那麼行爲不端的人可能會使用它來未經授權地存取您的系統。

這個怎麼運作
/etc/ssh/sshd_config是SSH伺服器使用的預設組態檔。我們將使用此檔案來告訴SSH伺服器應使用哪些選項。

目標
安全的SSH設定
筆記
確保首先完成爲AllowGroups建立SSH組。
參考文獻
Mozilla針對OpenSSH 6.7+的OpenSSH指南,網址爲https://infosec.mozilla.org/guidelines/openssh#modern-openssh-67
https://linux-audit.com/audit-and-harden-your-ssh-configuration/
https://www.ssh.com/ssh/sshd_config/
https://www.techbrown.com/harden-ssh-secure-linux-vps-server/
https://serverfault.com/questions/660160/openssh-difference-between-internal-sftp-and-sftp-server/660325
man sshd_config
腳步
備份OpenSSH伺服器的組態檔/etc/ssh/sshd_config並刪除註釋,以使其更易於閱讀:

sudo cp --archive / etc / ssh / sshd_config / etc / ssh / sshd_config-COPY- $( date + 「%Y%m%d%H%M%S 」) 
sudo sed -i -r -e ' / ^ #| ^ $ / d ' / etc / ssh / sshd_config
編輯,/etc/ssh/sshd_config然後查詢和編輯或新增無論您的設定/設定如何都應應用的以下設定:

注意:SSH不喜歡重複的矛盾設定。例如,如果您具有ChallengeResponseAuthentication nothen ChallengeResponseAuthentication yes,則SSH將尊重第一個,而忽略第二個。您的/etc/ssh/sshd_config檔案可能已經具有以下某些設定/行。爲避免出現問題,您將需要手動瀏覽/etc/ssh/sshd_config檔案並解決所有重複的矛盾設定。(如果有人知道以程式設計方式執行此操作的方法,我很想聽聽如何做。)

########################################################################################################
# start settings from https://infosec.mozilla.org/guidelines/openssh#modern-openssh-67 as of 2019-01-01
########################################################################################################

# Supported HostKey algorithms by order of preference.
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256

Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr

MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]

# LogLevel VERBOSE logs user's key fingerprint on login. Needed to have a clear audit track of which key was using to log in.
LogLevel VERBOSE

# Use kernel sandbox mechanisms where possible in unprivileged processes
# Systrace on OpenBSD, Seccomp on Linux, seatbelt on MacOSX/Darwin, rlimit elsewhere.
# Note: This setting is deprecated in OpenSSH 7.5 (https://www.openssh.com/txt/release-7.5)
UsePrivilegeSeparation sandbox

########################################################################################################
# end settings from https://infosec.mozilla.org/guidelines/openssh#modern-openssh-67 as of 2019-01-01
########################################################################################################

# don't let users set environment variables
PermitUserEnvironment no

# Log sftp level file access (read/write/etc.) that would not be easily logged otherwise.
Subsystem sftp  internal-sftp -f AUTHPRIV -l INFO

# only use the newer, more secure protocol
Protocol 2

# disable X11 forwarding as X11 is very insecure
# you really shouldn't be running X on a server anyway
X11Forwarding no

# disable port forwarding
AllowTcpForwarding no
AllowStreamLocalForwarding no
GatewayPorts no
PermitTunnel no

# don't allow login if the account has an empty password
PermitEmptyPasswords no

# ignore .rhosts and .shosts
IgnoreRhosts yes

# verify hostname matches IP
UseDNS no

Compression no
TCPKeepAlive no
AllowAgentForwarding no
PermitRootLogin no

# don't allow .rhosts or /etc/hosts.equiv
HostbasedAuthentication no
然後查詢並編輯或新增這些設定,並根據需要設定值:

設定    有效值    例    描述    筆記
允許組    本地UNIX組名    AllowGroups sshusers    組以允許SSH存取    
ClientAliveCountMax    數    ClientAliveCountMax 0    沒有響應發送的最大用戶端活動訊息數    
ClientAliveInterval    秒數    ClientAliveInterval 300    響應請求之前的秒數    
監聽地址    用空格分隔的本地地址列表    
ListenAddress 0.0.0.0
ListenAddress 192.168.1.100
當地地址sshd應該聽    重要資訊,請參見第1期。
LoginGraceTime    秒數    LoginGraceTime 30    登錄超時之前的秒數    
MaxAuthTries    數    MaxAuthTries 2    允許的最大登錄嘗試次數    
最大對談數    數    MaxSessions 2    公開會議的最大數量    
MaxStartups    數    MaxStartups 2    最大登錄對談數    
密碼驗證    yes 要麼 no    PasswordAuthentication no    如果允許使用密碼登錄    
港口    任何開啓/可用的埠號    Port 22    sshd應該監聽的埠    
檢查man sshd_config更多詳細資訊這些設定的含義。

重新啓動ssh:

sudo服務sshd重新啓動
您可以檢查驗證使用的設定sshd -T並驗證輸出:

须藤sshd -T
port 22
addressfamily any
listenaddress [::]:22
listenaddress 0.0.0.0:22
usepam yes
logingracetime 30
x11displayoffset 10
maxauthtries 2
maxsessions 2
clientaliveinterval 300
clientalivecountmax 0
streamlocalbindmask 0177
permitrootlogin no
ignorerhosts yes
ignoreuserknownhosts no
hostbasedauthentication no
...
subsystem sftp internal-sftp -f AUTHPRIV -l INFO
maxstartups 2:30:2
permittunnel no
ipqos lowdelay throughput
rekeylimit 0 0
permitopen any
(目錄)

刪除Diffie-Hellman短鍵
爲什麼
根據Mozilla針對OpenSSH 6.7+的OpenSSH指南,「正在使用的所有Diffie-Hellman模數均應至少爲3072位長」。

SSH使用Diffie-Hellman演算法來建立安全連線。模數(金鑰大小)越大,加密越強。

目標
刪除所有少於3072位長的Diffie-Hellman金鑰
參考文獻
Mozilla針對OpenSSH 6.7+的OpenSSH指南,網址爲https://infosec.mozilla.org/guidelines/openssh#modern-openssh-67
https://infosec.mozilla.org/guidelines/key_management
man moduli
腳步
備份SSH的模數檔案/etc/ssh/moduli:

sudo cp --archive / etc / ssh / moduli / etc / ssh / moduli-COPY- $( date + 「%Y%m%d%H%M%S 」)
刪除短模量:

sudo awk ' $ 5> = 3071 ' / etc / ssh / moduli | sudo tee /etc/ssh/moduli.tmp
须藤MV /etc/ssh/moduli.tmp / etc / ssh / moduli
(目錄)

SSH的2FA / MFA
爲什麼
即使SSH是門窗的很好的安全防護措施,它仍然是壞角色可以看到並嘗試強行進入的可見門。Fail2ban將監視這些強行嘗試,但沒有這種事情因爲太安全了 需要兩個因素增加了額外的安全性。

使用兩因素身份驗證(2FA)/多因素身份驗證(MFA)要求輸入的任何人都必須輸入兩個金鑰,這使得不良行爲者更難。這兩個鍵是:

他們的密碼
每30秒更改一次的6位數令牌
沒有這兩個鑰匙,他們將無法進入。

爲什麼不
許多人可能會覺得這種麻煩或煩人的經歷。而且,對系統的存取取決於生成程式碼的隨附身份驗證器應用程式。

這個怎麼運作
在Linux上,PAM負責身份驗證。您可以在https://en.wikipedia.org/wiki/Linux_PAM上閱讀有關PAM的四個任務。本節討論身份驗證任務。

當您直接從控制檯或通過SSH登錄伺服器時,進入的門會將請求發送到PAM的身份驗證任務,PAM將詢問並驗證您的密碼。您可以自定義每個門使用的規則。例如,當您直接從控制檯登錄時,可能會有一套規則,而通過SSH登錄時,可能會有另一組規則。

本部分將更改通過SSH登錄時的身份驗證規則,以同時要求輸入密碼和6位數位程式碼。

我們將使用Google的libpam-google-authenticator PAM模組來建立和驗證TOTP金鑰。https://fastmail.blog/2016/07/22/how-totp-authenticator-apps-work/和https://jemurai.com/2018/10/11/how-it-works-totp-based-mfa /關於TOTP的工作原理非常出色。

我們要做的是告訴伺服器的SSH PAM設定,要求使用者提供密碼,然後要求其數位令牌。然後,PAM將驗證使用者的密碼,如果正確,則會將身份驗證請求路由到libpam-google-authenticator,後者將詢問並驗證您的6位數令牌。當且僅當一切都很好時,身份驗證纔會成功,並允許使用者登錄。

目標
爲所有SSH連線啓用2FA / MFA
筆記
在執行此操作之前,您應該瞭解2FA / MFA的工作方式,並且需要手機上的身份驗證器應用程式才能 纔能繼續。
我們將使用google-authenticator-libpam。
隨着下面 下麪的設定,使用者只需要當他們登錄上自己的密碼,但進入他們的2FA / MFA程式碼沒有,如果他們使用SSH公鑰/私鑰。檢視有關如何更改此行爲以適合您的要求的文件。
參考文獻
https://github.com/google/google-authenticator-libpam
https://zh.wikipedia.org/wiki/Linux_PAM
https://zh.wikipedia.org/wiki/基於時間的_一次性密碼_演算法
https://fastmail.blog/2016/07/22/how-totp-authenticator-apps-work/
https://jemurai.com/2018/10/11/how-it-works-totp-based-mfa/
腳步
安裝它libpam-google-authenticator。

在基於Debian的系統上:

sudo apt安裝libpam-google-authenticator
確保以要啓用2FA / MFA的ID登錄並執行 google-authenticator以建立必要的令牌數據:

谷歌身份驗證器
Do you want authentication tokens to be time-based (y/n) y
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@host%3Fsecret%3DR4ZWX34FQKZROVX7AGLJ64684Y%26issuer%3Dhost

...

Your new secret key is: R3NVX3FFQKZROVX7AGLJUGGESY
Your verification code is 751419
Your emergency scratch codes are:
  12345678
  90123456
  78901234
  56789012
  34567890

Do you want me to update your "/home/user/.google_authenticator" file (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, tokens are good for 30 seconds. In order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with
poor time synchronization, you can increase the window from its default
size of +-1min (window size of 3) to about +-4min (window size of
17 acceptable tokens).
Do you want to do so? (y/n) y

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y
注意,這不是作爲root執行的。

爲它詢問的所有問題選擇預設選項(大多數情況下爲y),並記住儲存緊急暫存程式碼。

備份PAM的SSH組態檔/etc/pam.d/sshd:

sudo cp --archive /etc/pam.d/sshd /etc/pam.d/sshd-COPY- $( date + 「%Y%m%d%H%M%S 」)
現在,我們需要通過將以下行新增到來將其啓用爲SSH的身份驗證方法/etc/pam.d/sshd:

auth       required     pam_google_authenticator.so nullok
注意:在這裏檢查nullok意味着什麼。

對於懶惰的人:

echo -e 「 \ nauth required pam_google_authenticator.so nullok#由$( whoami )在$(日期+ 」%Y-%m-%d @%H:%M:%S 「)中新增 」  | sudo tee -a /etc/pam.d/sshd
告訴SSH通過在以下位置新增或編輯此行來利用它/etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
對於懶惰的人:

sudo sed -i -r -e 「 s / ^(challengeresponseauthentication。*)$ /#\ 1#由$( whoami )在$(日期+ 」%Y-%m-%d @%H:%M: %S 「) / I 」 / etc / ssh / sshd_config
 echo -e 「 \ nChallengeResponseAuthentication是#由$( whoami )在$(日期+ 」%Y-%m-%d @%H:%M:%S上新增「) 」  | sudo tee -a / etc / ssh / sshd_config
重新啓動ssh:

sudo服務sshd重新啓動
(目錄)

基礎
限制誰可以使用sudo
爲什麼
sudo允許帳戶像其他帳戶一樣執行命令,包括root。我們要確保只有我們想要的帳戶才能 纔能使用sudo。

目標
sudo特權僅限於我們指定的組中的那些人
筆記
您的安裝可能已經這樣做,或者可能已經有一個專門用於此目的的組,因此請首先檢查。
Debian建立sudo組
RedHat建立車輪組
腳步
建立一個組:

sudo groupadd sudousers
將帳戶新增到組:

sudo usermod -a -G sudousers使用者1
sudo usermod -a -G sudousers使用者2
sudo usermod -a -G sudousers ...
您需要對伺服器上需要sudo特權的每個帳戶執行此操作。

備份sudo的組態檔/etc/sudoers:

sudo cp --archive / etc / sudoers / etc / sudoers-COPY- $( date + 「%Y%m%d%H%M%S 」)
編輯sudo的組態檔/etc/sudoers:

蘇多維蘇多
sudousers通過新增以下行來告訴sudo僅允許組中的使用者使用sudo:

%sudousers   ALL=(ALL:ALL) ALL
(目錄)

NTP用戶端
爲什麼
許多安全協定利用時間。如果您的系統時間不正確,則可能會對伺服器造成負面影響。NTP用戶端可以通過使系統時間與全域性NTP伺服器保持同步來解決該問題

這個怎麼運作
NTP代表網路時間協定。在本指南的上下文中,伺服器上的NTP用戶端用於通過從官方伺服器提取的官方時間來更新伺服器時間。檢查https://www.pool.ntp.org/en/以獲取所有公共NTP伺服器。

目標
已安裝NTP用戶端並保持伺服器時間同步
參考文獻
https://cloudpro.zone/index.php/2018/01/27/debian-9-3-server-setup-guide-part-4/
https://zh.wikipedia.org/wiki/Network_Time_Protocol
https://www.pool.ntp.org/en/
https://serverfault.com/questions/957302/securing-hardening-ntp-client-on-linux-servers-config-file/957450#957450
https://tf.nist.gov/tf-cgi/servers.cgi
腳步
安裝ntp。

在基於Debian的系統上:

须藤apt安裝ntp
備份NTP用戶端的組態檔/etc/ntp.conf:

sudo cp --archive /etc/ntp.conf /etc/ntp.conf-COPY- $( date + 「%Y%m%d%H%M%S 」)
至少在Debian上,預設設定已經相當安全了。我們唯一要確保的是我們是pool指令,而不是任何server指令。該pool指令允許NTP用戶端無響應或服務不佳時停止使用伺服器。爲此,請註釋掉所有server指令並將以下內容新增到中/etc/ntp.conf。

pool pool.ntp.org iburst
對於懶惰的人:

sudo sed -i -r -e 「 s / ^((server | pool)。*)/#\ 1#由$( whoami )在$( date + 」%Y-%m-%d @%H上評論: %M:%S 「) / 」 /etc/ntp.conf
 echo -e 「 \ npool pool.ntp.org iburst#由$( whoami )在$(日期+ 」%Y-%m-%d @%上新增H:%M:%S 「) 」  | sudo tee -a /etc/ntp.conf
範例/etc/ntp.conf:

driftfile /var/lib/ntp/ntp.drift
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
restrict 127.0.0.1
restrict ::1
restrict source notrap nomodify noquery
pool pool.ntp.org iburst         # added by user on 2019-03-09 @ 10:23:35
重新啓動ntp:

sudo服務ntp重新啓動
檢查ntp服務的狀態:

sudo systemctl狀態ntp
● ntp.service - LSB: Start NTP daemon
   Loaded: loaded (/etc/init.d/ntp; generated; vendor preset: enabled)
   Active: active (running) since Sat 2019-03-09 15:19:46 EST; 4s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1016 ExecStop=/etc/init.d/ntp stop (code=exited, status=0/SUCCESS)
  Process: 1028 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/ntp.service
           └─1038 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:113

Mar 09 15:19:46 host ntpd[1038]: Listen and drop on 0 v6wildcard [::]:123
Mar 09 15:19:46 host ntpd[1038]: Listen and drop on 1 v4wildcard 0.0.0.0:123
Mar 09 15:19:46 host ntpd[1038]: Listen normally on 2 lo 127.0.0.1:123
Mar 09 15:19:46 host ntpd[1038]: Listen normally on 3 enp0s3 10.10.20.96:123
Mar 09 15:19:46 host ntpd[1038]: Listen normally on 4 lo [::1]:123
Mar 09 15:19:46 host ntpd[1038]: Listen normally on 5 enp0s3 [fe80::a00:27ff:feb6:ed8e%2]:123
Mar 09 15:19:46 host ntpd[1038]: Listening on routing socket on fd #22 for interface updates
Mar 09 15:19:47 host ntpd[1038]: Soliciting pool server 108.61.56.35
Mar 09 15:19:48 host ntpd[1038]: Soliciting pool server 69.89.207.199
Mar 09 15:19:49 host ntpd[1038]: Soliciting pool server 45.79.111.114
檢查ntp的狀態:

须藤ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 pool.ntp.org    .POOL.          16 p    -   64    0    0.000    0.000   0.000
*lithium.constan 198.30.92.2      2 u    -   64    1   19.900    4.894   3.951
 ntp2.wiktel.com 212.215.1.157    2 u    2   64    1   48.061   -0.431   0.104
(目錄)

保護/ proc
爲什麼
參照https://linux-audit.com/linux-system-hardening-adding-hidepid-to-proc/:

當/proc您查詢時,您會發現很多檔案和目錄。其中許多隻是數位,代表有關特定進程ID(PID)的資訊。預設情況下,Linux系統已部署爲允許所有本地使用者檢視所有資訊。這包括來自其他使用者的過程資訊。這可能包括您可能不想與其他使用者共用的敏感詳細資訊。通過應用一些檔案系統設定調整,我們可以更改此行爲並提高系統的安全性。

目標
/proc已安裝,hidepid=2因此使用者只能看到有關其過程的資訊
參考文獻
https://linux-audit.com/linux-system-hardening-adding-hidepid-to-proc/
https://likegeeks.com/secure-linux-server-hardening-best-practices/#Hardening-proc-Directory
https://www.cyberciti.biz/faq/linux-hide-processes-from-other-users/
腳步
備份以下內容/etc/fstab:

sudo cp --archive / etc / fstab / etc / fstab-COPY- $( date + 「%Y%m%d%H%M%S 」)
加入這一行/etc/fstab已經/proc安裝有hidepid=2:

proc     /proc     proc     defaults,hidepid=2     0     0
對於懶惰的人:

回聲 -e 「 \ NPROC / PROC PROC預設值,hidepid = 2 0 0#通過加入$( WHOAMI )上$(日期+ 」%Y-%間- %d @%H:%M:%S 「) 」  | sudo tee -a / etc / fstab
重新啓動系統:

sudo現在重新啓動
注意:或者,您可以重新安裝/proc而不用重新啓動sudo mount -o remount,hidepid=2 /proc

(目錄)

強制帳戶使用安全密碼
爲什麼
預設情況下,帳戶可以使用所需的任何密碼,包括錯誤的密碼。pwquality / pam_pwquality通過提供「一種設定系統密碼的預設密碼品質要求的方式」並檢查「其相對於系統字典的強度以及用於識別錯誤選擇的一組規則」來解決此安全漏洞。

這個怎麼運作
在Linux上,PAM負責身份驗證。您可以在https://en.wikipedia.org/wiki/Linux_PAM上閱讀有關PAM的四個任務。本節討論密碼任務。

當需要設定或更改帳戶密碼時,PAM的密碼任務將處理該請求。在本節中,我們將告訴PAM的密碼任務將請求的新密碼傳遞給libpam-pwquality,以確保它滿足我們的要求。如果滿足要求,則使用/設定;如果不符合要求,則會出錯並通知使用者。

目標
強制使用強密碼
腳步
安裝libpam-pwquality。

在基於Debian的系統上:

sudo apt安裝libpam-pwquality
備份PAM的密碼組態檔/etc/pam.d/common-password:

sudo cp --archive /etc/pam.d/common-password /etc/pam.d/common-password-COPY- $( date + 「%Y%m%d%H%M%S 」)
告訴PAM使用libpam-pwquality通過編輯檔案/etc/pam.d/common-password並更改以以下內容開頭的行來強制使用強密碼:

password        requisite                       pam_pwquality.so
對此:

password        requisite                       pam_pwquality.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 maxrepeat=3 gecoschec
以上選項是:

retry=3 =提示使用者3次,然後返回錯誤。
minlen=10 =密碼的最小長度,其中包括以下任何貸方(或借方):
dcredit=-1=必須至少有一位數位
ucredit=-1=必須至少有一個大寫字母
lcredit=-1=必須至少有一個小寫字母
ocredit=-1=必須至少包含一個非字母數位字元
difok=3 =新密碼中至少不能包含3個字元
maxrepeat=3 =最多允許3個重複字元
gecoschec =不允許使用帶有帳戶名的密碼
對於懶惰的人:

sudo sed -i -r -e 「 s / ^(密碼\ s +必要條件\ s + pam_pwquality.so)(。*)$ /#\ 1 \ 2#在$ { date + 」%上由$( whoami )評論Y-%m-%d @%H:%M:%S 「) \ n \ 1重試= 3 minlen = 10 difok = 3 ucredit = -1 lcredit = -1 dcredit = -1 ocredit = -1 maxrepeat = 3 gecoschec#由$( whoami )在$(日期+ 「%Y-%m-%d @%H:%M:%S 」) / 「 /etc/pam.d/common-password中新增
(目錄)

自動安全更新和警報
爲什麼
使用最新的重要安全修補程式和更新對伺服器進行更新非常重要。否則,您將面臨已知安全漏洞的風險,不良行爲者可能會利用這些漏洞獲得對伺服器的未授權存取。

除非計劃每天檢查伺服器,否則您將需要一種自動更新系統和/或獲取有關可用更新的電子郵件的方法。

您不希望進行所有更新,因爲每次更新都可能會破壞某些內容。進行關鍵更新很重要,但是其他所有操作都可以等到您有時間手動進行。

爲什麼不
自動更新和無人值守更新可能會破壞您的系統,並且您可能不在附近以對其進行修復。如果它破壞了您的SSH存取,這將尤其成問題。

筆記
每個發行版管理軟體包和更新的方式都不同。到目前爲止,我僅涉及基於Debian的系統的步驟。
您的伺服器將需要一種發送電子郵件的方法來使之正常工作
目標
自動,無人值守的關鍵安全修補程式更新
自動發送剩餘待處理更新的電子郵件
基於Debian的系統
這個怎麼運作
在基於Debian的系統上,您可以使用:

無人值守升級可自動執行所需的系統更新(即關鍵安全更新)
apt-listchanges在安裝/升級之前獲取有關軟體包更改的詳細資訊
apticron獲取有關待處理軟體包更新的電子郵件
我們將使用無人值守的升級來應用關鍵的安全修補程式。由於Debian社羣已經對它們進行了全面的測試,因此我們也可以應用穩定的更新。

參考文獻
https://wiki.debian.org/UnattendedUpgrades
https://debian-handbook.info/browse/stable/sect.regular-upgrades.html
https://blog.sleeplessbeastie.eu/2015/01/02/how-to-perform-unattended-upgrades/
https://www.vultr.com/docs/how-to-set-up-unattended-upgrades-on-debian-9-stretch
https://github.com/mvo5/unattended-upgrades
https://wiki.debian.org/UnattendedUpgrades#apt-listchanges
https://www.cyberciti.biz/faq/apt-get-apticron-send-email-upgrades-available/
https://www.unixmen.com/how-to-get-email-notifications-for-new-updates-on-debianubuntu/
/etc/apt/apt.conf.d/50unattended-upgrades
腳步
安裝無人值守的升級,apt-listchanges和apticron:

sudo apt安裝無人值守升級apt-listchanges apticron
現在,我們需要設定無人值守升級以自動應用更新。這通常是通過編輯檔案來完成/etc/apt/apt.conf.d/20auto-upgrades,並/etc/apt/apt.conf.d/50unattended-upgrades已建立由包。但是,由於將來的更新可能會覆蓋這些檔案,因此我們將建立一個新檔案。建立檔案/etc/apt/apt.conf.d/51myunattended-upgrades並新增以下內容:

// Enable the update/upgrade script (0=disable)
APT::Periodic::Enable "1";

// Do "apt-get update" automatically every n-days (0=disable)
APT::Periodic::Update-Package-Lists "1";

// Do "apt-get upgrade --download-only" every n-days (0=disable)
APT::Periodic::Download-Upgradeable-Packages "1";

// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "7";

// Send report mail to root
//     0:  no report             (or null string)
//     1:  progress report       (actually any string)
//     2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
//     3:  + trace on    APT::Periodic::Verbose "2";
APT::Periodic::Unattended-Upgrade "1";

// Automatically upgrade packages from these
Unattended-Upgrade::Origins-Pattern {
      "o=Debian,a=stable";
      "o=Debian,a=stable-updates";
      "origin=Debian,codename=${distro_codename},label=Debian-Security";
};

// You can specify your own packages to NOT automatically upgrade here
Unattended-Upgrade::Package-Blacklist {
};

// Run dpkg --force-confold --configure -a if a unclean dpkg state is detected to true to ensure that updates get installed even when the system got interrupted during a previous run
Unattended-Upgrade::AutoFixInterruptedDpkg "true";

//Perform the upgrade when the machine is running because we wont be shutting our server down often
Unattended-Upgrade::InstallOnShutdown "false";

// Send an email to this address with information about the packages upgraded.
Unattended-Upgrade::Mail "root";

// Always send an e-mail
Unattended-Upgrade::MailOnlyOnError "false";

// Remove all unused dependencies after the upgrade has finished
Unattended-Upgrade::Remove-Unused-Dependencies "true";

// Remove any new unused dependencies after the upgrade has finished
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";

// Automatically reboot WITHOUT CONFIRMATION if the file /var/run/reboot-required is found after the upgrade.
Unattended-Upgrade::Automatic-Reboot "true";

// Automatically reboot even if users are logged in.
Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
注意事項:

檢查/usr/lib/apt/apt.systemd.daily有關APT::Periodic選項的詳細資訊
檢查https://github.com/mvo5/unattended-upgrades以獲取有關Unattended-Upgrade選項的詳細資訊
執行無人值守升級的試執行,以確保您的組態檔正常:

sudo無人值守升級-d --dry-run
如果一切正常,您可以讓它在預定的任何時間執行,或通過強制執行unattended-upgrade -d。

根據自己的喜好設定apt-listchanges:

sudo dpkg重新設定apt-listchanges
對於Apticron,預設設定足夠好,但是/etc/apticron/apticron.conf如果要更改它們,可以將其檢入。例如,我的設定如下所示:

EMAIL="root"
NOTIFY_NO_UPDATES="1"
(目錄)

更安全的隨機熵池(WIP)
爲什麼
在製品

這個怎麼運作
在製品

目標
在製品

參考文獻
感謝branneman在第33 期中提出的這個想法。
https://hackaday.com/2017/11/02/what-is-entropy-and-how-do-i-get-more-of-it/
https://www.2uo.de/myths-about-urandom
https://www.gnu.org/software/hurd/user/tlecarrour/rng-tools.html
https://wiki.archlinux.org/index.php/Rng-tools
腳步
安裝rng-tools。

在基於Debian的系統上:

须藤apt-get install rng-tools
(目錄)

網路
帶UFW的防火牆(不復雜的防火牆)
爲什麼
稱我爲偏執狂,您不必同意,但是除了我明確允許的範圍外,我想拒絕所有進出伺服器的流量。爲什麼我的伺服器會發送我不知道的流量?如果我不知道它是誰或什麼,爲什麼外部流量會嘗試存取我的伺服器?當涉及到良好的安全性時,我的意見是預設情況下拒絕/拒絕,並例外地允許。

當然,如果您不同意,那完全可以,並且可以設定UFW以滿足您的需求。

無論哪種方式,都要確保只有我們明確允許的流量纔是防火牆的工作。

這個怎麼運作
Linux內核提供了監視和控制網路流量的功能。這些功能通過防火牆實用程式向終端使用者公開。在Linux上,最常見的防火牆是iptables。但是,iptables相當複雜和混亂(恕我直言)。這就是UFW的用武之地。將UFW視爲iptables的前端。它簡化了管理iptables規則的過程,這些規則告訴Linux內核如何處理網路流量。

UFW的工作原理是讓您設定以下規則:

允許或拒絕
輸入或輸出流量
到或從埠
您可以通過顯式指定埠或使用指定埠的應用程式設定來建立規則。

目標
除我們明確允許的網路流量外,所有網路流量(輸入和輸出)均被阻止
筆記
安裝其他程式時,需要啓用必要的埠/應用程式。
參考文獻
https://launchpad.net/ufw
腳步
安裝ufw。

在基於Debian的系統上:

sudo apt安裝UFW
拒絕所有傳出流量:

sudo ufw預設拒絕傳出評論'拒絕所有傳出流量'
Default outgoing policy changed to 'deny'
(be sure to update your rules accordingly)
如果您不像我那麼偏執,並且不想拒絕所有傳出的流量,可以允許它:

sudo ufw預設允許傳出評論'允許所有傳出流量'
拒絕所有傳入流量:

sudo ufw預設拒絕傳入評論'拒絕所有傳入流量'
顯然,我們希望通過以下方式進行SSH連線:

须藤UFW限制在 SSH意見「允許SSH連線」
Rules updated
Rules updated (v6)
根據您的需求允許其他流量。一些常見的用例:

#允許埠53上的流量通過-DNS 
sudo ufw允許53註釋 '允許DNS呼叫'

#允許埠123上的流量流出 
-NTP sudo ufw允許123註釋 '允許NTP輸出'

#允許流量出去HTTP,HTTPS,FTP或
#這取決於你正在使用的來源容易的威力需要 
须藤UFW允許出HTTP意見 「允許HTTP流量進行」 
须藤UFW允許出HTTPS評論 「允許HTTPS流量進行」 
须藤UFW允許ftp註釋 '允許FTP流量'

#允許域名註冊 
须藤UFW允許進行域名註冊評論 「允許的whois 」

#允許埠68上的流量通過-DHCP用戶端
#僅在使用DHCP時才需要 
sudo ufw allow out 68註釋 '允許DHCP用戶端更新'
啓動ufw:

sudo ufw 啓用
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
如果要檢視狀態:

sudo ufw狀態
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     LIMIT       Anywhere                   # allow SSH connections in
22/tcp (v6)                LIMIT       Anywhere (v6)              # allow SSH connections in

53                         ALLOW OUT   Anywhere                   # allow DNS calls out
123                        ALLOW OUT   Anywhere                   # allow NTP out
80/tcp                     ALLOW OUT   Anywhere                   # allow HTTP traffic out
443/tcp                    ALLOW OUT   Anywhere                   # allow HTTPS traffic out
21/tcp                     ALLOW OUT   Anywhere                   # allow FTP traffic out
Mail submission            ALLOW OUT   Anywhere                   # allow mail out
43/tcp                     ALLOW OUT   Anywhere                   # allow whois
53 (v6)                    ALLOW OUT   Anywhere (v6)              # allow DNS calls out
123 (v6)                   ALLOW OUT   Anywhere (v6)              # allow NTP out
80/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow HTTP traffic out
443/tcp (v6)               ALLOW OUT   Anywhere (v6)              # allow HTTPS traffic out
21/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow FTP traffic out
Mail submission (v6)       ALLOW OUT   Anywhere (v6)              # allow mail out
43/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow whois
要麼

sudo ufw狀態詳細
Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     LIMIT IN    Anywhere                   # allow SSH connections in
22/tcp (v6)                LIMIT IN    Anywhere (v6)              # allow SSH connections in

53                         ALLOW OUT   Anywhere                   # allow DNS calls out
123                        ALLOW OUT   Anywhere                   # allow NTP out
80/tcp                     ALLOW OUT   Anywhere                   # allow HTTP traffic out
443/tcp                    ALLOW OUT   Anywhere                   # allow HTTPS traffic out
21/tcp                     ALLOW OUT   Anywhere                   # allow FTP traffic out
587/tcp (Mail submission)  ALLOW OUT   Anywhere                   # allow mail out
43/tcp                     ALLOW OUT   Anywhere                   # allow whois
53 (v6)                    ALLOW OUT   Anywhere (v6)              # allow DNS calls out
123 (v6)                   ALLOW OUT   Anywhere (v6)              # allow NTP out
80/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow HTTP traffic out
443/tcp (v6)               ALLOW OUT   Anywhere (v6)              # allow HTTPS traffic out
21/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow FTP traffic out
587/tcp (Mail submission (v6)) ALLOW OUT   Anywhere (v6)              # allow mail out
43/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow whois
預設應用
ufw附帶了一些預設應用程式。您可以通過以下方式看到它們:

sudo ufw應用程式列表
Available applications:
  AIM
  Bonjour
  CIFS
  DNS
  Deluge
  IMAP
  IMAPS
  IPP
  KTorrent
  Kerberos Admin
  Kerberos Full
  Kerberos KDC
  Kerberos Password
  LDAP
  LDAPS
  LPD
  MSN
  MSN SSL
  Mail submission
  NFS
  OpenSSH
  POP3
  POP3S
  PeopleNearby
  SMTP
  SSH
  Socks
  Telnet
  Transmission
  Transparent Proxy
  VNC
  WWW
  WWW Cache
  WWW Full
  WWW Secure
  XMPP
  Yahoo
  qBittorrent
  svnserve
要獲取有關該應用程式的詳細資訊,例如其包含的埠,請鍵入:

sudo ufw應用資訊[應用名稱]
sudo ufw應用程式資訊DNS
Profile: DNS
Title: Internet Domain Name Server
Description: Internet Domain Name Server

Port:
  53
定製應用
如果不想通過顯式提供埠號來建立規則,則可以建立自己的應用程式設定。爲此,請在中建立一個檔案/etc/ufw/applications.d。

例如,這是用於Plex的內容:

貓/etc/ufw/applications.d/plexmediaserver
[PlexMediaServer]
title=Plex Media Server
description=This opens up PlexMediaServer for http (32400), upnp, and autodiscovery.
ports=32469/tcp|32413/udp|1900/udp|32400/tcp|32412/udp|32410/udp|32414/udp|32400/udp
然後,您可以像其他任何應用程式一樣啓用它:

sudo ufw允許plexmediaserver
(目錄)

使用PSAD進行iptables入侵檢測和預防
爲什麼
即使您有防火牆來保護您的門,也可以嘗試在任何一個受保護的門中強行強行使用。我們想要監視所有網路活動以檢測潛在的入侵嘗試,例如反覆 反復嘗試進入並阻止它們的行爲。

這個怎麼運作
我無法解釋它比任何使用者更好FINESEC從https://serverfault.com/:在做https://serverfault.com/a/447604/289829。

Fail2BAN掃描各種應用程式的日誌檔案,例如apache,ssh或ftp,並自動禁止顯示惡意跡象的IP,例如自動登錄嘗試。另一方面,PSAD掃描iptables和ip6tables日誌訊息(通常爲/ var / log / messages)以檢測並可選地阻止掃描和其他型別的可疑流量,例如DDoS或OS指紋嘗試。可以同時使用這兩個程式,因爲它們在不同的級別上執行。

而且,由於我們已經在使用UFW,因此我們將按照netson在https://gist.github.com/netson/c45b2dc4e835761fbccc上的出色指示進行操作,以使PSAD與UFW一起使用。

參考文獻
http://www.cipherdyne.org/psad/
http://www.cipherdyne.org/psad/docs/config.html
https://www.thefanclub.co.za/how-to/how-install-psad-intrusion-detection-ubuntu-1204-lts-server
https://serverfault.com/a/447604/289829
https://serverfault.com/a/770424/289829
https://gist.github.com/netson/c45b2dc4e835761fbccc-
腳步
安裝psad。

在基於Debian的系統上:

sudo apt安裝psad
備份psad的組態檔/etc/psad/psad.conf:

sudo cp --archive /etc/psad/psad.conf /etc/psad/psad.conf-COPY- $(日期+ 「%Y%m%d%H%M%S 」)
檢視並更新中的設定選項/etc/psad/psad.conf。請特別注意以下幾點:

設定    調成
EMAIL_ADDRESSES    您的電子郵件地址
HOSTNAME    您伺服器的主機名
ENABLE_AUTO_IDS    ENABLE_AUTO_IDS Y;
ENABLE_AUTO_IDS_EMAILS    ENABLE_AUTO_IDS_EMAILS Y;
EXPECT_TCP_OPTIONS    EXPECT_TCP_OPTIONS Y;
有關更多詳細資訊,請參閱位於http://www.cipherdyne.org/psad/docs/config.html的 psad組態檔的文件。

現在,我們需要對ufw進行一些更改,以便告訴ufw記錄所有流量,以便psad對其進行分析,從而使其與psad一起使用。爲此,請編輯兩個檔案,並在末尾但在COMMIT行之前新增這些行。

進行備份:

sudo cp --archive /etc/ufw/before.rules /etc/ufw/before.rules-COPY- $( date + 「%Y%m%d%H%M%S 」) 
sudo cp --archive / etc /ufw/before6.rules /etc/ufw/before6.rules-COPY- $(日期+ 「%Y%m%d%H%M%S 」)
編輯檔案:

/etc/ufw/before.rules
/etc/ufw/before6.rules
並在末尾但在COMMIT行之前新增:

# log all traffic so psad can analyze
-A INPUT -j LOG --log-tcp-options --log-prefix "[IPTABLES] "
-A FORWARD -j LOG --log-tcp-options --log-prefix "[IPTABLES] "
注意:我們正在爲所有iptables日誌新增一個日誌字首。我們需要用它來將iptables日誌分離到它們自己的檔案中。

例如:

...

# log all traffic so psad can analyze
-A INPUT -j LOG --log-tcp-options --log-prefix "[IPTABLES] "
-A FORWARD -j LOG --log-tcp-options --log-prefix "[IPTABLES] "

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
現在,我們需要重新載入/重新啓動ufw和psad才能 纔能使更改生效:

sudo ufw重新載入

须藤psad -R
sudo psad --sig更新
须藤psad -H
分析iptables規則中的錯誤:

须藤psad --fw-analyze
[+] Parsing INPUT chain rules.
[+] Parsing INPUT chain rules.
[+] Firewall config looks good.
[+] Completed check of firewall ruleset.
[+] Results in /var/log/psad/fw_check
[+] Exiting.
注意:如果有任何問題,您將收到一封包含該錯誤的電子郵件。

檢查psad的狀態:

sudo psad-狀態
[-] psad: pid file /var/run/psad/psadwatchd.pid does not exist for psadwatchd on vm
[+] psad_fw_read (pid: 3444)  %CPU: 0.0  %MEM: 2.2
    Running since: Sat Feb 16 01:03:09 2019

[+] psad (pid: 3435)  %CPU: 0.2  %MEM: 2.7
    Running since: Sat Feb 16 01:03:09 2019
    Command line arguments: [none specified]
    Alert email address(es): root@localhost

[+] Version: psad v2.4.3

[+] Top 50 signature matches:
        [NONE]

[+] Top 25 attackers:
        [NONE]

[+] Top 20 scanned ports:
        [NONE]

[+] iptables log prefix counters:
        [NONE]

    Total protocol packet counters:

[+] IP Status Detail:
        [NONE]

    Total scan sources: 0
    Total scan destinations: 0

[+] These results are available in: /var/log/psad/status.out
(目錄)

Fail2Ban的應用程式入侵檢測和預防
爲什麼
UFW告訴您的伺服器要登上哪些門,以便沒人能看到它們,以及允許授權使用者通過的門。PSAD監視網路活動以檢測和防止潛在的入侵-反覆 反復嘗試進入。

但是,您的伺服器正在執行的應用程式/服務(例如SSH和Apache)將防火牆設定爲允許存取。即使允許存取,也並不意味着所有存取嘗試都是有效且無害的。如果有人試圖強行進入您正在伺服器上執行的Web應用程式,該怎麼辦?這就是Fail2ban出現的地方。

這個怎麼運作
Fail2ban監視您的應用程式(如SSH和Apache)的日誌,以檢測並防止潛在的入侵。它將監視網路流量/日誌,並通過阻止可疑活動(例如,在短時間內出現多個連續的失敗連線)來防止入侵。

目標
網路監視可疑活動,並自動禁止違規IP
筆記
到目前爲止,此伺服器上唯一執行的是SSH,因此我們希望Fail2ban監視SSH並在必要時禁止。
在安裝其他程式時,需要建立/設定適當的監獄並啓用它們。
參考文獻
https://www.fail2ban.org/
https://blog.vigilcode.com/2011/05/ufw-with-fail2ban-quick-secure-setup-part-ii/
https://dodwell.us/security/ufw-fail2ban-portscan.html
https://www.howtoforge.com/community/threads/fail2ban-and-ufw-on-debian.77261/
腳步
安裝fail2ban。

在基於Debian的系統上:

须藤apt安裝fail2ban
我們不想進行編輯,/etc/fail2ban/fail2ban.conf或者/etc/fail2ban/jail.conf由於將來的更新可能會覆蓋這些內容,因此我們將建立一個本地副本。建立檔案/etc/fail2ban/jail.local和該更換後新增到它[LAN SEGMENT],並[your email]用適當的值:

[DEFAULT]
# the IP address range we want to ignore
ignoreip = 127.0.0.1/8 [LAN SEGMENT]

# who to send e-mail to
destemail = [your e-mail]

# who is the email from
sender = [your e-mail]

# since we're using exim4 to send emails
mta = mail

# get email alerts
action = %(action_mwl)s
注意:您的伺服器將需要能夠發送電子郵件,以便Fail2ban可以讓您知道可疑活動以及何時禁止IP。

我們需要爲SSH建立一個監獄,該監獄告訴fail2ban檢視SSH日誌,並根據需要使用ufw禁止/取消禁止IP。通過建立檔案/etc/fail2ban/jail.d/ssh.local並將其新增到其中來爲SSH建立一個監獄:

[sshd]
enabled = true
banaction = ufw
port = ssh
filter = sshd
logpath = %(sshd_log)s
maxretry = 5
對於懶惰的人:

貓<<  EOF | sudo tee /etc/fail2ban/jail.d/ssh.local 
[sshd] 
啓用=真
banaction = ufw 
埠= ssh 
過濾器= sshd 
logpath =%(sshd_log)s 
maxretry = 5 
EOF
在上面的程式碼中,我們告訴fail2ban將ufw用作banaction。Fail2ban附帶了ufw的操作組態檔。你可以在裏面看到它/etc/fail2ban/action.d/ufw.conf

爲SSH啓用fail2ban和jail:

sudo fail2ban-client啓動
sudo fail2ban-用戶端重新載入
sudo fail2ban-client新增sshd
要檢查狀態:

sudo fail2ban-用戶端狀態
Status
|- Number of jail:      1
`- Jail list:   sshd
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:
定製監獄
我還不需要建立自定義監獄。完成操作後,我將找出方法,然後將本指南更新。或者,如果您知道如何請幫助做出貢獻。

取消IP
要取消IP限制,請使用以下命令:

fail2ban-client 設定 [jail] unbanip [IP]
[jail]是具有被禁止IP的監獄的名稱,並且[IP]是您要取消禁止的IP地址。例如,要完全禁止192.168.1.100使用SSH,您可以執行以下操作:

fail2ban-client 設定 sshd unbanip 192.168.1.100
(目錄)

審計
使用AIDE(WIP)監視檔案/資料夾完整性
爲什麼
在製品

這個怎麼運作
在製品

目標
在製品

參考文獻
https://aide.github.io/
https://www.hiroom2.com/2017/06/09/debian-8-file-integrity-check-with-aide/
https://blog.rapid7.com/2017/06/30/how-to-install-and-configure-aide-on-ubuntu-linux/
https://www.stephenrlang.com/2016/03/using-aide-for-file-integrity-monitoring-fim-on-ubuntu/
https://www.howtoforge.com/how-to-configure-the-aide-advanced-intrusion-detection-environment-file-integrity-scanner-for-your-website
https://www.tecmint.com/check-integrity-of-file-and-directory-using-aide-in-linux/
https://www.cyberciti.biz/faq/debian-ubuntu-linux-software-integrity-checking-with-aide/
腳步
安裝AIDE。

在基於Debian的系統上:

sudo apt安裝助手
備份AIDE的預設檔案:

须藤cp -p / etc / default / aide / etc / default / aide-COPY- $( date + 「%Y%m%d%H%M%S 」)
/etc/default/aide根據您的要求仔細檢查並設定AIDE的預設值。如果您希望AIDE每天執行並通過電子郵件發送給您,請確保設定CRON_DAILY_RUN爲yes。

備份AIDE的組態檔:

须藤cp -pr / etc / aide / etc / aide-COPY- $( date + 「%Y%m%d%H%M%S 」)
在基於Debian的系統上:

AIDE的組態檔在中/etc/aide/aide.conf.d/。
您將需要閱讀AIDE的文件和組態檔,以根據您的要求進行設定。
如果要進行新設定,例如要監視新資料夾,則需要將其新增到/etc/aide/aide.conf或/etc/aide/aide.conf.d/。
備份庫存組態檔:sudo cp -pr /etc/aide /etc/aide-COPY-$(date +"%Y%m%d%H%M%S")。
建立一個新的數據庫,並安裝它。

在基於Debian的系統上:

须藤愛
Running aide --init...
Start timestamp: 2019-04-01 21:23:37 -0400 (AIDE 0.16)
AIDE initialized database at /var/lib/aide/aide.db.new
Verbose level: 6

Number of entries:      25973

---------------------------------------------------
The attributes of the (uncompressed) database(s):
---------------------------------------------------

/var/lib/aide/aide.db.new
  RMD160   : moyQ1YskQQbidX+Lusv3g2wf1gQ=
  TIGER    : 7WoOgCrXzSpDrlO6I3PyXPj1gRiaMSeo
  SHA256   : gVx8Fp7r3800WF2aeXl+/KHCzfGsNi7O
             g16VTPpIfYQ=
  SHA512   : GYfa0DJwWgMLl4Goo5VFVOhu4BphXCo3
             rZnk49PYztwu50XjaAvsVuTjJY5uIYrG
             tV+jt3ELvwFzGefq4ZBNMg==
  CRC32    : /cusZw==
  HAVAL    : E/i5ceF3YTjwenBfyxHEsy9Kzu35VTf7
             CPGQSW4tl14=
  GOST     : n5Ityzxey9/1jIs7LMc08SULF1sLBFUc
             aMv7Oby604A=


End timestamp: 2019-04-01 21:24:45 -0400 (run time: 1m 8s)
測試一切正常,保持不變。

在基於Debian的系統上:

sudo aide.wrapper-檢查
Start timestamp: 2019-04-01 21:24:45 -0400 (AIDE 0.16)
AIDE found NO differences between database and filesystem. Looks okay!!
Verbose level: 6

Number of entries:      25973

---------------------------------------------------
The attributes of the (uncompressed) database(s):
---------------------------------------------------

/var/lib/aide/aide.db
  RMD160   : moyQ1YskQQbidX+Lusv3g2wf1gQ=
  TIGER    : 7WoOgCrXzSpDrlO6I3PyXPj1gRiaMSeo
  SHA256   : gVx8Fp7r3800WF2aeXl+/KHCzfGsNi7O
             g16VTPpIfYQ=
  SHA512   : GYfa0DJwWgMLl4Goo5VFVOhu4BphXCo3
             rZnk49PYztwu50XjaAvsVuTjJY5uIYrG
             tV+jt3ELvwFzGefq4ZBNMg==
  CRC32    : /cusZw==
  HAVAL    : E/i5ceF3YTjwenBfyxHEsy9Kzu35VTf7
             CPGQSW4tl14=
  GOST     : n5Ityzxey9/1jIs7LMc08SULF1sLBFUc
             aMv7Oby604A=


End timestamp: 2019-04-01 21:26:03 -0400 (run time: 1m 18s)
進行一些更改後,測試一切正常。

在基於Debian的系統上:

须藤觸控/etc/test.sh
须藤觸控/root/test.sh

sudo aide.wrapper-檢查

须藤rm /etc/test.sh
须藤rm /root/test.sh

须藤aideinit -y -f
Start timestamp: 2019-04-01 21:37:37 -0400 (AIDE 0.16)
AIDE found differences between database and filesystem!!
Verbose level: 6

Summary:
  Total number of entries:      25972
  Added entries:                2
  Removed entries:              0
  Changed entries:              1

---------------------------------------------------
Added entries:
---------------------------------------------------

f++++++++++++++++: /etc/test.sh
f++++++++++++++++: /root/test.sh

---------------------------------------------------
Changed entries:
---------------------------------------------------

d =.... mc.. .. .: /root

---------------------------------------------------
Detailed information about changes:
---------------------------------------------------

Directory: /root
  Mtime    : 2019-04-01 21:35:07 -0400        | 2019-04-01 21:37:36 -0400
  Ctime    : 2019-04-01 21:35:07 -0400        | 2019-04-01 21:37:36 -0400


---------------------------------------------------
The attributes of the (uncompressed) database(s):
---------------------------------------------------

/var/lib/aide/aide.db
  RMD160   : qF9WmKaf2PptjKnhcr9z4ueCPTY=
  TIGER    : zMo7MvvYJcq1hzvTQLPMW7ALeFiyEqv+
  SHA256   : LSLLVjjV6r8vlSxlbAbbEsPcQUB48SgP
             pdVqEn6ZNbQ=
  SHA512   : Qc4U7+ZAWCcitapGhJ1IrXCLGCf1IKZl
             02KYL1gaZ0Fm4dc7xLqjiquWDMSEbwzW
             oz49NCquqGz5jpMIUy7UxA==
  CRC32    : z8ChEA==
  HAVAL    : YapzS+/cdDwLj3kHJEq8fufLp3DPKZDg
             U12KCSkrO7Y=
  GOST     : 74sLV4HkTig+GJhokvxZQm7CJD/NR0mG
             6jV7zdt5AXQ=


End timestamp: 2019-04-01 21:38:50 -0400 (run time: 1m 13s)
而已。如果設定CRON_DAILY_RUN爲yesin,/etc/default/aide則cron將/etc/cron.daily/aide每天執行並通過電子郵件發送輸出。

更新數據庫
每次對AIDE監視的檔案/資料夾進行更改時,都需要更新數據庫以捕獲這些更改。要在基於Debian的系統上做到這一點:

须藤aideinit -y -f
(目錄)

使用ClamAV(WIP)進行防病毒掃描
爲什麼
在製品

這個怎麼運作
ClamAV是病毒掃描程式
ClamAV-Freshclam是一項可更新病毒定義的服務
ClamAV-Daemon保持clamd進程執行以加快掃描速度
目標
在製品

筆記
這些說明不會告訴您如何啓用ClamAV守護程式服務以確保clamd始終執行。clamd僅當您正在執行郵件伺服器並且不提供檔案的實時監視時。相反,您想手動或按計劃掃描檔案。
參考文獻
https://www.clamav.net/documents/installation-on-debian-and-ubuntu-linux-distributions
https://wiki.debian.org/ClamAV
https://www.osradar.com/install-clamav-debian-9-ubuntu-18/
https://www.lisenet.com/2014/automate-clamav-to-perform-daily-system-scan-and-send-email-notifications-on-linux/
https://www.howtoforge.com/tutorial/configure-clamav-to-scan-and-notify-virus-and-malware/
https://serverfault.com/questions/741299/is-there-a-way-to-keep-clamav-updated-on-debian-8
https://askubuntu.com/questions/250290/how-do-i-scan-for-viruses-with-clamav
https://ngothang.com/how-to-install-clamav-and-configure-daily-scanning-on-centos/
腳步
安裝ClamAV。

在基於Debian的系統上:

sudo apt安裝clamav clamav-freshclam clamav-daemon
備份clamav-freshclam的組態檔/etc/clamav/freshclam.conf:

sudo cp --archive /etc/clamav/freshclam.conf /etc/clamav/freshclam.conf-COPY- $( date + 「%Y%m%d%H%M%S 」)
clamav-freshclam的預設設定可能已經足夠了,但是如果要更改它們,則可以編輯檔案/etc/clamav/freshclam.conf或使用dpkg-reconfigure:

须藤dpkg重新設定clamav-freshclam
注意:預設設定每天將更新24次定義。要更改間隔,請檢查中的Checks設定/etc/clamav/freshclam.conf或使用dpkg-reconfigure。

啓動clamav-freshclam服務:

sudo服務clamav-freshclam啓動
您可以確保clamav-freshclam執行:

sudo服務clamav-freshclam狀態
● clamav-freshclam.service - ClamAV virus database updater
   Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled; vendor preset: enabled)   Active: active (running) since Sat 2019-03-16 22:57:07 EDT; 2min 13s ago
     Docs: man:freshclam(1)
           man:freshclam.conf(5)
           https://www.clamav.net/documents
 Main PID: 1288 (freshclam)
   CGroup: /system.slice/clamav-freshclam.service
           └─1288 /usr/bin/freshclam -d --foreground=true

Mar 16 22:57:08 host freshclam[1288]: Sat Mar 16 22:57:08 2019 -> ^Local version: 0.100.2 Recommended version: 0.101.1
Mar 16 22:57:08 host freshclam[1288]: Sat Mar 16 22:57:08 2019 -> DON'T PANIC! Read https://www.clamav.net/documents/upgrading-clamav
Mar 16 22:57:15 host freshclam[1288]: Sat Mar 16 22:57:15 2019 -> Downloading main.cvd [100%]
Mar 16 22:57:38 host freshclam[1288]: Sat Mar 16 22:57:38 2019 -> main.cvd updated (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
Mar 16 22:57:40 host freshclam[1288]: Sat Mar 16 22:57:40 2019 -> Downloading daily.cvd [100%]
Mar 16 22:58:13 host freshclam[1288]: Sat Mar 16 22:58:13 2019 -> daily.cvd updated (version: 25390, sigs: 1520006, f-level: 63, builder: raynman)
Mar 16 22:58:14 host freshclam[1288]: Sat Mar 16 22:58:14 2019 -> Downloading bytecode.cvd [100%]
Mar 16 22:58:16 host freshclam[1288]: Sat Mar 16 22:58:16 2019 -> bytecode.cvd updated (version: 328, sigs: 94, f-level: 63, builder: neo)
Mar 16 22:58:24 host freshclam[1288]: Sat Mar 16 22:58:24 2019 -> Database updated (6086349 signatures) from db.local.clamav.net (IP: 104.16.219.84)
Mar 16 22:58:24 host freshclam[1288]: Sat Mar 16 22:58:24 2019 -> ^Clamd was NOT notified: Can't connect to clamd through /var/run/clamav/clamd.ctl: No such file or directory
注意:不用擔心那Local version行。有關更多詳細資訊,請存取https://serverfault.com/questions/741299/is-there-a-way-to-keep-clamav-updated-on-debian-8。

備份clamav-daemon的組態檔/etc/clamav/clamd.conf:

sudo cp --archive /etc/clamav/clamd.conf /etc/clamav/clamd.conf-COPY- $( date + 「%Y%m%d%H%M%S 」)
您可以clamav-daemon通過編輯檔案/etc/clamav/clamd.conf或使用來更改的設定dpkg-reconfigure:

sudo dpkg重新設定clamav守護程式
掃描檔案/資料夾
要掃描檔案/資料夾,請使用該clamscan程式。
clamscan 以其執行的使用者身份執行,因此需要其正在掃描的檔案/資料夾的讀取許可權。
使用clamscanas root很危險,因爲如果檔案實際上是病毒,則存在使用根特權的風險。
要掃描檔案:clamscan /path/to/file。
掃描目錄:clamscan -r /path/to/folder。
您可以使用該-i開關僅列印受感染的檔案。
檢查clamscan的man其他交換機/選項頁。
(目錄)

使用Rkhunter(WIP)進行Rootkit檢測
爲什麼
在製品

這個怎麼運作
在製品

目標
在製品

參考文獻
http://rkhunter.sourceforge.net/
https://www.cyberciti.biz/faq/howto-check-linux-rootkist-with-detectors-software/
https://www.tecmint.com/install-rootkit-hunter-scan-for-rootkits-backdoors-in-linux/
腳步
安裝Rkhunter。

在基於Debian的系統上:

sudo apt安裝rkhunter
備份rkhunter的預設檔案:

须藤cp -p / etc / default / rkhunter / etc / default / rkhunter-COPY- $( date + 「%Y%m%d%H%M%S 」)
rkhunter的組態檔是/etc/rkhunter.conf。無需對其進行更改,而是建立並使用該檔案/etc/rkhunter.conf.local:

须藤cp -p /etc/rkhunter.conf /etc/rkhunter.conf.local
瀏覽組態檔/etc/rkhunter.conf.local並設定爲您的要求。我的建議:

設定    注意
UPDATE_MIRRORS=1    
MIRRORS_MODE=0    
MAIL-ON-WARNING=root    
COPY_LOG_ON_ERROR=1    如果有錯誤,則儲存日誌副本
PKGMGR=...    根據文件設定爲適當的值
PHALANX2_DIRTEST=1    閱讀文件以瞭解原因
WEB_CMD=""    這是爲了解決Debian軟體包的問題,​​該問題禁用了rkhunter進行自我更新的功能。
USE_LOCKING=1    防止rkhunter多次執行出現問題
SHOW_SUMMARY_WARNINGS_NUMBER=1    檢視實際發現的警告數量
您希望rkhunter每天執行並通過電子郵件將結果發送給您。您可以編寫自己的指令碼,或檢查https://www.tecmint.com/install-rootkit-hunter-scan-for-rootkits-backdoors-in-linux/中可使用的範例cron指令碼。

在基於Debian的系統上,rkhunter附帶cron指令碼。爲了使他們能夠檢查/etc/default/rkhunter或使用dpkg-reconfigure並Yes回答所有問題:

sudo dpkg-重新設定rkhunter
完成所有更改後,請確保所有設定均有效:

须藤rkhunter -C
更新rkhunter及其數據庫:

sudo rkhunter --versioncheck
sudo rkhunter-更新
须藤rkhunter --propupd
如果要進行手動掃描並檢視輸出:

sudo rkhunter-檢查
(目錄)

使用chrootkit(WIP)進行Rootkit檢測
爲什麼
在製品

這個怎麼運作
在製品

目標
在製品

參考文獻
http://www.chkrootkit.org/
https://www.cyberciti.biz/faq/howto-check-linux-rootkist-with-detectors-software/
https://askubuntu.com/questions/258658/eth0-packet-sniffer-sbin-dhclient
腳步
安裝chkrootkit。

在基於Debian的系統上:

sudo apt安裝chkrootkit
進行手動掃描:

须藤chkrootkit
ROOTDIR is `/'
Checking `amd'...                                           not found
Checking `basename'...                                      not infected
Checking `biff'...                                          not found
Checking `chfn'...                                          not infected
Checking `chsh'...                                          not infected
...
Checking `scalper'...                                       not infected
Checking `slapper'...                                       not infected
Checking `z2'...                                            chklastlog: nothing deleted
Checking `chkutmp'...                                       chkutmp: nothing deleted
Checking `OSX_RSPLUG'...                                    not infected
備份chkrootkit的組態檔/etc/chkrootkit.conf:

sudo cp --archive /etc/chkrootkit.conf /etc/chkrootkit.conf-COPY- $(日期+ 「%Y%m%d%H%M%S 」)
您希望chkrootkit每天執行並通過電子郵件將結果發送給您。

在基於Debian的系統上,chkrootkit附帶了cron指令碼。爲了使他們能夠檢查/etc/chkrootkit.conf或使用dpkg-reconfigure並對Yes第一個問題說:

须藤dpkg-reconfigure chkrootkit
(目錄)

logwatch-系統日誌分析器和報告器
爲什麼
您的伺服器將生成大量可能包含重要資訊的日誌。除非計劃每天檢查伺服器,否則您將需要一種獲取伺服器日誌的電子郵件摘要的方法。爲此,我們將使用logwatch。

這個怎麼運作
logwatch掃描系統日誌檔案並進行彙總。您可以直接從命令列執行它,也可以計劃將其按定期計劃執行。logwatch使用服務檔案來了解如何讀取/彙總日誌檔案。您可以在中檢視所有庫存服務檔案/usr/share/logwatch/scripts/services。

logwatch的組態檔/usr/share/logwatch/default.conf/logwatch.conf指定預設選項。您可以通過命令列參數覆蓋它們。

目標
Logwatch設定爲發送有關所有伺服器狀態和日誌的每日電子郵件摘要
筆記
您的伺服器將需要能夠發送電子郵件才能 纔能正常工作
以下步驟將導致logwatch每天執行。如果要更改時間表,請根據自己的喜好修改cronjob。您還需要更改range選項以覆蓋您的重複視窗。有關範例,請參見https://www.badpenguin.org/configure-logwatch-for-weekly-email-and-html-output-format。
如果由於電子郵件行長而導致logwatch無法傳遞郵件,請檢查https://blog.dhampir.no/content/exim4-line-length-in-debian-stretch-mail-delivery-failed-returning-message到發件人,如第29期中所述。如果您使用Gmail和Exim4作爲具有隱式TLS的MTA,則我們已經在步驟7中進行了處理。
參考文獻
感謝amacheema修復了步驟中的某些問題,並讓我知道了第29期中記錄的exim4的長線錯誤。
https://sourceforge.net/projects/logwatch/
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps
腳步
安裝logwatch。

在基於Debian的系統上:

sudo apt安裝logwatch
要檢視logwatch收集的範例,可以直接執行它:

sudo / usr / sbin / logwatch-輸出標準輸出-格式化文字-昨天範圍-全部服務

 ################### Logwatch 7.4.3 (12/07/16) ####################
        Processing Initiated: Mon Mar  4 00:05:50 2019
        Date Range Processed: yesterday
                              ( 2019-Mar-03 )
                              Period is day.
        Detail Level of Output: 5
        Type of Output/Format: stdout / text
        Logfiles for Host: host
 ##################################################################

 --------------------- Cron Begin ------------------------
...
...
 ---------------------- Disk Space End -------------------------


 ###################### Logwatch End #########################
/usr/share/logwatch/default.conf/logwatch.conf在繼續之前,請仔細閱讀Logwatch的自我記錄組態檔。有沒有必要改變任何東西在這裏,但要特別注意的Output,Format,MailTo,Range,和Service那些是那些我們會使用。出於我們的目的,我們無需在組態檔中指定選項,而是在執行logwatch的日常cron作業中將它們作爲命令列參數傳遞。這樣,如果曾經修改過組態檔(例如,在更新過程中),我們的選項仍然存在。

備份logwatch的每日cron檔案/etc/cron.daily/00logwatch並取消設定執行位:

sudo cp --archive /etc/cron.daily/00logwatch /etc/cron.daily/00logwatch-COPY- $( date + 「%Y%m%d%H%M%S 」) 
sudo chmod -x / etc / cron.daily / 00logwatch。*
預設情況下,logwatch輸出到stdout。由於目標是獲取日常電子郵件,因此我們需要更改logwatch用於發送電子郵件的輸出型別。我們可以通過上面的組態檔來做到這一點,但這將在每次執行時都適用-即使我們手動執行它並希望在螢幕上看到輸出。相反,我們將更改執行logwatch的cron作業以發送電子郵件。這樣,當手動執行時,我們仍將獲得輸出,stdout而當cron執行時,它將發送電子郵件。我們還將確保它檢查所有服務,並將輸出格式更改爲html,以便無論組態檔說什麼都更易於閱讀。在檔案中/etc/cron.daily/00logwatch找到執行行並將其更改爲:

/usr/sbin/logwatch --output mail --format html --mailto root --range yesterday --service all
#!/bin/bash

#Check if removed-but-not-purged
test -x /usr/share/logwatch/scripts/logwatch.pl || exit 0

#execute
/usr/sbin/logwatch --output mail --format html --mailto root --range yesterday --service all

#Note: It's possible to force the recipient in above command
#Just pass --mailto [email protected] instead of --output mail
對於懶惰的人:

sudo sed -i -r -e 「 s,^($( sudo which logwatch )。*?),#\ 1#由$( whoami )在$( date + 」%Y-%m-%d @% H:%M:%S 「) \ n $( sudo which logwatch )-輸出郵件--format html --mailto root --range昨天--service all#由$( whoami )在$( date + 」%Y-%m-%d @%H:%M:%S 「),」 /etc/cron.daily/00logwatch
您可以通過執行以下命令來測試cron作業:

须藤/etc/cron.daily/00logwatch
注意:如果由於電子郵件行長而導致logwatch無法傳遞郵件,請檢查https://blog.dhampir.no/content/exim4-line-length-in-debian-stretch-mail-delivery-failed-returning -訊息對發送者的記錄在問題#29。如果您將Gmail和Exim4作爲具有隱式TLS的MTA進行跟蹤,那麼我們已經在步驟7中進行了處理。

(目錄)

ss-檢視伺服器正在監聽的埠
爲什麼
埠是應用程式,服務和進程之間相互通訊的方式-伺服器內部或網路中其他裝置之間的通訊。當您在伺服器上執行應用程式或服務(例如SSH或Apache)時,它們會偵聽特定埠上的請求。

顯然,我們不希望您的伺服器偵聽我們不知道的埠。我們將使用ss檢視服務正在偵聽的所有埠。這將幫助我們跟蹤並停止可能帶來危險的流氓服務。

目標
找出非本地主機打開了哪些埠並監聽連線
參考文獻
https://www.reddit.com/r/linux/comments/arx7st/howtosecurealinuxserver_an_evolving_howto_guide/egrib6o/
https://www.reddit.com/r/linux/comments/arx7st/howtosecurealinuxserver_an_evolving_howto_guide/egs1rev/
https://www.tecmint.com/find-open-ports-in-linux/
man ss
腳步
要檢視所有監聽流量的埠:

须藤ss -lntup
Netid  State      Recv-Q Send-Q     Local Address:Port     Peer Address:Port
udp    UNCONN     0      0                      *:68                  *:*        users:(("dhclient",pid=389,fd=6))
tcp    LISTEN     0      128                    *:22                  *:*        users:(("sshd",pid=4390,fd=3))
tcp    LISTEN     0      128                   :::22                 :::*        users:(("sshd",pid=4390,fd=4))
開關說明:

l =顯示監聽插座
n =現在嘗試解析服務名稱
t =顯示TCP通訊端
u =顯示UDP通訊端
p =顯示過程資訊
如果發現任何可疑的東西(例如您不知道的埠或不知道的過程),請進行必要的調查和修復。

(目錄)

Lynis-Linux安全審覈
爲什麼
從https://cisofy.com/lynis/:

Lynis是經過測試的安全工具,適用於執行Linux,macOS或基於Unix操作系統的系統。它對您的系統執行全面的執行狀況掃描,以支援系統強化和合規性測試。

目標
Lynis已安裝
筆記
CISOFY提供了許多發行版的軟體包。檢查https://packages.cisofy.com/以獲取特定於發行版的安裝說明。
參考文獻
https://cisofy.com/documentation/lynis/get-started/
https://packages.cisofy.com/community/#debian-ubuntu
https://thelinuxcode.com/audit-lynis-ubuntu-server/
https://www.vultr.com/docs/install-lynis-on-debian-8
腳步
安裝lynis。https://cisofy.com/lynis/#installation包含有關如何爲您的發行版安裝的詳細說明。

在基於Debian的系統上,使用CISOFY的社羣軟體儲存庫:

sudo apt安裝apt-transport-https ca-certificates主機
须藤wget -O-https://packages.cisofy.com/keys/cisofy-software-public.key | sudo apt鍵新增-
须藤回聲 「的deb https://packages.cisofy.com/community/lynis/deb/穩定的主」  | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list
sudo apt更新
sudo apt安裝lynis主機
更新它:

sudo lynis更新資訊
執行安全審覈:

sudo lynis審覈系統
這將掃描您的伺服器,報告其審計結果,最後它會爲您提供建議。花一些時間根據需要解決輸出和間隙問題。

(目錄)

危險地帶
繼續需要您自擔風險
本節介紹了高風險的事物,因爲它們有可能使您的系統無法使用,或者由於風險超過任何回報而被許多人認爲是不必要的。

!! 繼續需要您自擔風險 !!

!! 繼續需要您自擔風險 !!
(目錄)

雜項
Gmail和Exim4作爲具有隱式TLS的MTA
爲什麼
除非您打算設定自己的郵件伺服器,否則您將需要一種從伺服器發送電子郵件的方法。這對於系統警報/訊息很重要。

您可以使用任何Gmail帳戶。我建議您爲此伺服器建立一個特定的伺服器。這樣,如果你的伺服器被攻破,壞的演員會不會有主帳戶的任何密碼。當然,如果您啓用了2FA / MFA並且使用了應用程式密碼,僅使用該應用程式密碼就沒有什麼壞人可以做,但是爲什麼要冒險呢?

在線上有許多指南,包括如何使用STARTTLS將Gmail設定爲MTA,包括該指南的先前版本。使用STARTTLS,會建立初始的未加密連線,然後升級爲加密的TLS或SSL連線。相反,使用下面 下麪概述的方法,從一開始就建立了加密的TLS連線。

另外,如問題29和此處所討論,對於長行的郵件,exim4將失敗。我們也會在本節中對此進行修復。

目標
mail設定爲使用Gmail從您的伺服器發送電子郵件
對exim4的長期支援
參考文獻
感謝remyabel按照問題#24和拉出請求#26中的說明弄清楚如何使其與TLS一起使用。
https://wiki.debian.org/Exim
https://wiki.debian.org/GmailAndExim4
https://www.exim.org/exim-html-current/doc/html/spec_html/ch-encrypted_smtp_connections_using_tlsssl.html
https://php.quicoto.com/setup-exim4-to-use-gmail-in-ubuntu/
https://www.fastmail.com/help/technical/ssltlsstarttls.html
exim4對於長行訊息失敗- 問題29和https://blog.dhampir.no/content/exim4-line-length-in-debian-stretch-mail-delivery-failed-returning-message-to-sender
腳步
安裝exim4。您還將需要openssl和ca證書。

在基於Debian的系統上:

sudo apt install exim4 openssl ca證書
設定exim4:

對於基於Debian的系統:

须藤dpkg-reconfigure exim4-config
系統會提示您一些問題:

提示    回答
郵件設定的常規型別    mail sent by smarthost; no local mail
系統郵件名稱    localhost
用於偵聽傳入SMTP連線的IP地址    127.0.0.1; ::1
接受郵件的其他目的地    (預設)
本地使用者的可見域名    localhost
傳出智慧主機的IP地址或主機名    smtp.gmail.com::465
保持最少的DNS查詢數量(按需撥號)?    No
將設定拆分爲小檔案?    No
備份以下內容/etc/exim4/passwd.client:

sudo cp --archive /etc/exim4/passwd.client /etc/exim4/passwd.client-COPY- $( date + 「%Y%m%d%H%M%S 」)
像這樣新增一行 /etc/exim4/passwd.client

smtp.gmail.com:[email protected]:yourPassword
*.google.com:[email protected]:yourPassword
注意事項:

用您的詳細資訊替換[email protected]並yourPassword。如果您在Gmail上啓用了2FA / MFA,則需要在此處建立和使用應用密碼。
始終檢查host smtp.gmail.com要列出的最新域。
該檔案具有您的Gmail密碼,因此我們需要將其鎖定:

sudo chown root:Debian-exim /etc/exim4/passwd.client
须藤chmod 640 /etc/exim4/passwd.client
下一步是建立TLS證書,exim4將使用該證書與進行加密連線smtp.gmail.com。您可以使用自己的證書,例如Let's Encrypt的證書,也可以使用openssl自己建立一個證書。我們將使用exim4隨附的指令碼,該指令碼呼叫openssl製作我們的證書:

sudo bash / usr / share / doc / exim4-base / examples / exim-gencert
[*] Creating a self signed SSL certificate for Exim!
    This may be sufficient to establish encrypted connections but for
    secure identification you need to buy a real certificate!

    Please enter the hostname of your MTA at the Common Name (CN) prompt!

Generating a RSA private key
..........................................+++++
................................................+++++
writing new private key to '/etc/exim4/exim.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Code (2 letters) [US]:[redacted]
State or Province Name (full name) []:[redacted]
Locality Name (eg, city) []:[redacted]
Organization Name (eg, company; recommended) []:[redacted]
Organizational Unit Name (eg, section) []:[redacted]
Server name (eg. ssl.domain.tld; required!!!) []:localhost
Email Address []:[redacted]
[*] Done generating self signed certificates for exim!
    Refer to the documentation and example configuration files
    over at /usr/share/doc/exim4-base/ for an idea on how to enable TLS
    support in your mail transfer agent.
指示exim4使用TLS和埠465,並通過建立檔案並新增以下內容來修復exim4的長行問題/etc/exim4/exim4.conf.localmacros:

MAIN_TLS_ENABLE = 1
REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS = *
TLS_ON_CONNECT_PORTS = 465
REQUIRE_PROTOCOL = smtps
IGNORE_SMTP_LINE_LENGTH_LIMIT = true
對於懶惰的人:

貓<<  EOF | sudo tee /etc/exim4/exim4.conf.localmacros 
MAIN_TLS_ENABLE = 1 
REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS = * 
TLS_ON_CONNECT_PORTS = 465 
REQUIRE_PROTOCOL = smtps 
IGNORE_SMTP_LINE_LENGTH_LIMIT = true 
EOF
備份exim4的組態檔/etc/exim4/exim4.conf.template:

sudo cp --archive /etc/exim4/exim4.conf.template /etc/exim4/exim4.conf.template-COPY- $( date + 「%Y%m%d%H%M%S 」)
將以下內容新增到/etc/exim4/exim4.conf.template該.ifdef REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS ... .endif塊之後:

.ifdef REQUIRE_PROTOCOL
  protocol = REQUIRE_PROTOCOL
.endif
.ifdef REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS
  hosts_require_tls = REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS
.endif
.ifdef REQUIRE_PROTOCOL
    protocol = REQUIRE_PROTOCOL
.endif
.ifdef REMOTE_SMTP_HEADERS_REWRITE
  headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
.endif
對於懶惰的人:

sudo sed -i -r -e ' /^ . ifdef REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS $ / I {:a; n; /^.endif$/!ba; 一個\通過新增#' 「 $( WHOAMI )上$(日期+ 」%Y-%間- %d @%H:%M:%S 「) 」 ' \ n.ifdef REQUIRE_PROTOCOL \ N協定= REQUIRE_PROTOCOL \ n .endif \ n#結尾新增' -e ' } '/ etc/exim4/exim4.conf.template
下面 下麪新增到/etc/exim4/exim4.conf.template裏面.ifdef MAIN_TLS_ENABLE塊:

.ifdef TLS_ON_CONNECT_PORTS
  tls_on_connect_ports = TLS_ON_CONNECT_PORTS
.endif
.ifdef MAIN_TLS_ENABLE
.ifdef TLS_ON_CONNECT_PORTS
    tls_on_connect_ports = TLS_ON_CONNECT_PORTS
.endif
對於懶惰的人:

sudo sed -i -r -e 「 /\.ifdef MAIN_TLS_ENABLE /#由$( whoami )在$( date + 」%Y-%m-%d @%H:%M:%S 「) \ n中新增.ifdef TLS_ON_CONNECT_PORTS \ n tls_on_connect_ports = TLS_ON_CONNECT_PORTS \ n.endif \ n#end add 「 /etc/exim4/exim4.conf.template
更新exim4設定以使用TLS,然後重新啓動服務:

须藤更新exim4.conf
sudo服務exim4重新啓動
如果您使用的是UFW,則需要在465上允許出站流量。爲此,我們將建立一個自定義UFW應用程式組態檔,然後啓用它。建立檔案/etc/ufw/applications.d/smtptls,新增它,然後執行ufw allow out smtptls comment 'open TLS port 465 for use with SMPT to send e-mails':

[SMTPTLS]
title=SMTP through TLS
description=This opens up the TLS port 465 for use with SMPT to send e-mails.
ports=465/tcp
對於懶惰的人:

貓<<  EOF | sudo tee /etc/ufw/applications.d/smtptls 
[SMTPTLS] 
title =通過TLS的SMTP 
description =這將開啓TLS埠465,以便與SMPT一起使用來發送電子郵件。
埠= 465 / tcp 
EOF

sudo ufw允許smtptls註釋'開啓TLS埠465以與SMPT一起使用來發送電子郵件'
新增一些郵件別名,以便我們可以通過將以下行新增到來向本地帳戶發送電子郵件/etc/aliases:

user1: [email protected]
user2: [email protected]
...
您需要新增伺服器上存在的所有本地帳戶。

測試您的設定:

echo "test" | mail -s "Test" [email protected]
sudo tail /var/log/exim4/mainlog
(目錄)

單獨的iptables日誌檔案
爲什麼
有時候,您需要瀏覽iptables日誌。將所有iptables日誌放入其自己的檔案將使查詢所需內容變得容易得多。

參考文獻
https://blog.shadypixel.com/log-iptables-messages-to-a-separate-file-with-rsyslog/
https://gist.github.com/netson/c45b2dc4e835761fbccc
https://www.rsyslog.com/doc/v8-stable/configuration/actions.html
腳步
第一步是讓防火牆爲所有日誌條目新增一些唯一的字串作爲字首。如果直接使用iptables,則--log-prefix "[IPTABLES] "對所有規則都將執行類似的操作。我們在安裝psad的第4步中解決了這一問題。

在防火牆日誌中新增字首之後,我們需要告訴rsyslog將這些行發送到其自己的檔案中。爲此,請建立檔案/etc/rsyslog.d/10-iptables.conf並新增以下內容:

:msg, contains, "[IPTABLES] " /var/log/iptables.log
& stop
如果您對防火牆記錄的數據期望很高,請在檔名前新增字首- 「在每次記錄後均不同步檔案」。例如:

:msg, contains, "[IPTABLES] " -/var/log/iptables.log
& stop
注意:請記住將字首更改爲您使用的任何字首。

對於懶惰的人:

貓<<  EOF | sudo tee /etc/rsyslog.d/10-iptables.conf:msg 
,包含「 [IPTABLES]」 / var 

log / iptables.log 並停止EOF
由於我們將防火牆訊息記錄到其他檔案中,因此我們需要告訴psad新檔案在哪裏。編輯/etc/psad/psad.conf並設定IPT_SYSLOG_FILE爲日誌檔案的路徑。例如:

IPT_SYSLOG_FILE /var/log/iptables.log;
注意:請記住將字首更改爲您使用的任何字首。

對於懶惰的人:

sudo sed -i -r -e 「 s / ^(IPT_SYSLOG_FILE \ s +)([^;] +)(;)$ /#\ 1 \ 2 \ 3#在$ { date + 」%上由$( whoami )評論Y-%m-%d @%H:%M:%S 「) \ n \ 1 \ / var \ / log \ /iptables.log \ 3#由$( whoami )在$( date + 」%Y上新增-%m-%d @%H:%M:%S 「) / 」 /etc/psad/psad.conf
重新啓動psad和rsyslog以啓用更改(或重新啓動):

须藤psad -R
sudo psad --sig更新
须藤psad -H
sudo服務rsyslog重新啓動
我們要做的最後一件事是告訴logrotate旋轉新的日誌檔案,以便它不會變大並填滿我們的磁碟。建立檔案/etc/logrotate.d/iptables並新增以下內容:

/var/log/iptables.log
{
    rotate 7
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        invoke-rc.d rsyslog rotate > /dev/null
    endscript
}
對於懶惰的人:

貓<<  EOF | 须藤三通/etc/logrotate.d/iptables 
/var/log/iptables.log 

    旋轉7 
    每日
    missingok 
    notifempty 
    delaycompress 
    壓縮
    postrotate 
        呼叫-的rc.d rsyslog現在旋轉>的/ dev / null的
    endscript 

EOF
(目錄)

剩下的
與我聯繫
對於任何問題,評論,疑慮,反饋或問題,請提交新的問題。

(目錄)

有用的網址
https://github.com/pratiktri/server_init_harden-Bash指令碼可自動執行您需要在新Linux伺服器上執行的一些任務以使其具有基本數量安全性。
(目錄)

致謝
https://www.reddit.com/r/linuxquestions/comments/aopzl7/new_guide_created_by_me_how_to_secure_a_linux/
https://www.reddit.com/r/selfhosted/comments/aoxd4l/new_guide_created_by_me_how_to_secure_a_linux/
https://news.ycombinator.com/item?id=19177435#19178618
https://www.reddit.com/r/linuxadmin/comments/arx7xo/howtosecurealinuxserver_an_evolving_howto_guide/
https://www.reddit.com/r/linux/comments/arx7st/howtosecurealinuxserver_an_evolving_howto_guide/
(目錄)

許可和版權
CC-BY-SA

如何通過Anchal Nigam 保護Linux伺服器的安全性已獲得Creative Commons Attribution-ShareAlike 4.0 International License的許可。

有關完整許可證,請參閱LICENSE。

(目錄)