如何保护Linux服务器

如何保护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 curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256

Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com

# 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 address@a.com 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:yourAccount@gmail.com:yourPassword
*.google.com:yourAccount@gmail.com:yourPassword
注意事项:

用您的详细信息替换yourAccount@gmail.com并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: user1@gmail.com
user2: user2@gmail.com
...
您需要添加服务器上存在的所有本地帐户。

测试您的设置:

echo "test" | mail -s "Test" email@gmail.com
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。

(目录)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值