咨询电话

有用的Linux安全技巧来加强你的系统 置顶

发表于2017-03-10 09:48:54 次查看
一开始,我们需要问一个问题。Linux是否保证100%,或至少是足够安全?答案是不。这些熟练的攻击者带来的危险也增加了这些日子。每天都会发现新的漏洞,有时甚至是每小时发现一次。漏洞通常建立在这些漏洞的几个小时内被发现。有些漏洞甚至在有人使用它们来利用主机之前甚至不被发现。安全是我们所有人的主要关切。因此,在本文中,我想展示一些如何加强系统安全性的实际示例。

没有关于Linux安全的单一帖子,即使是一本书,也不会回答所有的安全问题或解决所有可能的威胁。所以,自然,我们不会覆盖这篇文章中的一切,但希望你会发现它有所帮助。  

我们的要点:

  • 保护控制台。

  • 密码老化。

  • Sudo通知。

  • 调优SSH。

  • Tripwire的入侵检测。

  • 使用防火墙。

  • 回到Iptables。

  • 限制编译器。

  • 真棒不变的文件。

  • 使用aureport管理SELinux。

  • 使用sealert工具。

保护控制台

您可以通过将其限制到特定终端集来限制root可以登录的位置。为此,请编辑/etc/ 安全文件的内容   

您希望允许以root用户登录的所有设备都应列在文件中。

我建议您只允许一个终端上的root登录,并强制所有其他登录为非root用户,如果需要root,则使用su获取root权限。

密码老化

密码老化允许您指定密码有效的时间段。在时间段过期后,这将强制用户输入新的密码。这有益于确保密码定期更改,并且被窃取,破解或由某人知道的密码将很快过期。

有两种方法来实现这一结果。第一种方式是通过命令行使用这样的更改命令:

 $ chage -M 20 likegeeks 

我们使用-M选项将用户likegeeks的密码有效期设置为20天。

您可以键入更改而不使用选项,它将提示您有关您的选择:

 $ chage likegeeks 

第二种方法是为/etc/login.defs  文件中的所有用户设置默认值   

您可以根据需要更改这些值:

PASS_MAX_DAYS 20 
PASS_MIN_DAYS 0
PASS_WARN_AGE 5

 

Sudo通知

Sudo命令使生活更容易,但他们可能导致Linux安全问题,可以毁了你的生活。

我们知道sudo命令使非root用户能够像root用户那样运行命令。您可以检查/etc/sudoers  文件中的所有sudo配置   

您可以禁止用户以root用户身份运行您想要的命令。

您可以将sudo配置为在使用sudo命令时通过向文件中添加以下行来发送电子邮件。

 mailto yourname@yourdomain.com 

然后修改时sudo发送电子邮件:

 mail_always on 

调优SSH

如果我们将讨论Linux安全,那么我们必须谈论SSH服务。SSH是对您的系统的重要服务,它使您能够轻松地连接到您的系统,有时它是使您的系统生存的唯一方法,当事情坏了 - 所以调优SSH是非常重要的。

由于我们在我们的帖子中使用CentOS 7,SSH配置文件在:

 /etc/ssh/sshd_config 

让我们深入了解一下。

攻击者用于尝试连接到端口22(它是默认端口)上的SSH的扫描程序或bot。

通常将您的SSH端口更改为另一个未使用的端口,假设为5555或其他。

 Port 5555 

您还可以通过将PermitRootLogin的值更新为no来限制根登录,如下所示: 

 PermitRootLogin no 

并禁用隧道清除密码,并使用公共 - 私钥登录。

PasswordAuthentication no

PermitEmptyPasswords no

有另一个调整,可能无法防止攻击,但要求SSH通过正向和反向DNS查找远程主机名,它将在系统日志文件中生成相应的警告。为此,只需启用UseDNS值即可。

 UseDNS yes 

此外,还可能由于使用GSSAPI认证而产生困难。这不常见,因为它是在要求GSSAPI服务器验证相关用户凭据时调用的SSH的一项功能。要避免这种设置,GSSAPIAuthentication为no,如下: 

 GSSAPIAuthentication no 

关于SSH超时。可以通过配置正确的ServerAliveInterval,ServerAliveCountMax和TCPKeepAlive值来管理此常见问题。

例如,以下规则意味着每60秒发出一个分组。

ServerAliveInterval 15

ServerAliveCountMax 3

TCPKeepAlive 是的

通过调整这些值,您可以提供更长的连接。


ClientAliveInterval 30

ClientAliveCountMax 5

通过指定允许使用SSH的用户名,您可以使SSH服务更加安全一点

 AllowUsers user1 user2 

或者你可以每组:

 AllowGroup group1 group2 

除此之外,您可以对SSH(如Google Authenticator)使用双重身份验证:

 $ yum install google-authenticator 

然后运行它以验证安装:

 $ google-authenticator 

您应该在移动电话上安装Google身份验证器应用程序

并添加以下行 /etc/pam.d/sshd 

 auth required pam_google_authenticator.so 

并且最后要做的是通过添加以下行来告诉SSH这个 /etc/ssh/sshd_config 

 ChallengeResponseAuthentication yes 

现在重新启动SSH:

 $ systemctl restart sshd 

当您使用SSH登录时,它会询问验证码。这意味着你的SSH是防止暴力攻击,更坚实。

Tripwire的入侵检测

Tripwire是Linux安全性的重要工具之一。它是一个基于主机的入侵检测系统(HIDS)。它通过收集配置和文件系统详细信息来工作,并使用此信息来提供系统的先前状态与其当前状态之间的参考点。此过程通过监视哪些文件或目录最近添加或修改,谁更改了它们,做出了什么更改以及何时发生更改来实现。所以你有你的文件。

为了获得Tripwire,您需要访问EPEL存储库。您可以轻松添加:

 wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm

 $ rpm -ivh epel-release-7-9.noarch.rpm 

一旦你安装了EPEL repo,你可以安装Tripwire:

 $ sudo yum install tripwire 

要开始使用Tripwire,您需要创建相应的本地和网站密钥,如下所示:

 $ tripwire-setup-keyfiles 

它将提示您输入网站和本地密钥文件的密码。Tripwire将建议您使用大写和小写字母,数字和标点符号的组合。

现在您可以通过更改此文件来自定义Tripwire:

 /etc/tripwire/twpol.txt 

这个文件很容易阅读和修改,因为每一行都有一个注释描述。

您可以像这样更新Tripwire政策文件:

 $ tripwire --update-policy --secure-mode low /etc/tripwire/twpol.txt 

Tripwire现在将逐步通过各种屏幕上的阶段来引用您的更改; 当它完成,你现在应该能够初始化Tripwire数据库这样:

 $ tripwire --init 

Tripwire现在将开始扫描系统,它将需要一些时间,这取决于系统的总体大小。

对文件系统的任何更改都被视为系统入侵,因此将通知管理员,并且他将需要使用可信任的文件来恢复系统。因此,任何系统更改都必须通过Tripwire进行验证。您可以像这样验证您当前的策略文件:

 $ tripwire --check 

关于Tripwire的最后一件事:我建议您安全twpol.txt和twcfg.txt文件作为另一个安全步骤。

Tripwire有很多选项和设置; 你可以检查他们与人tripwire。

使用Firewalld

Firewalld是iptables的替代品,并通过启用配置更改而不停止当前连接来改进Linux安全性的管理。

Firewalld作为守护程序运行,允许立即添加和更改规则,并使用网络区域为任何和所有关联的网络连接定义信任级别。

要知道Firewalld当前是否正在运行,请键入以下命令:

 $ firewall-cmd --state 

linux security firewall-cmd状态

您可以像这样列出预定义区域:

 $ firewall-cmd --get-zones 

linux security firewall-cmd --get-zones

这个值可以这样更新:

 $ firewall-cmd --set-default-zone=  

您可以获得有关任何特定区域的所有相关信息,如:

 $ firewall-cmd --zone= --list-all  

您可以列出所有支持的服务:

$ firewall-cmd --get-services

linux安全防火墙获取服务

然后,您可以添加其他服务或在区域内删除它们。

$ firewall -cmd  --zone = <zone-name> --add -service = <service-name>

$ firewall -cmd  --zone = <zone-name> --remove -service = <service-name>

您可以列出在任何特定区域中打开的所有端口,如下所示:

 $ firewall-cmd --zone= --list-ports  

您可以管理添加或删除TCP / UDP端口,如下所示:

$ firewall -cmd  --zone = <zone-name> --add -port = <port-number / protocol>

$ firewall -cmd  --zone = <zone-name> --remove -port = <port-number / protocol>


您可以像这样添加或删除端口转发:

$ firewall -cmd  --zone = <zone-name> --add -forward -port = <port-number>

$ firewall -cmd  --zone = <zone-name> --remove -forward -port = <port-number>

Firewalld是非常全面的,Firewalld的最好的东西是你可以管理防火墙架构,而不需要停止或重新启动防火墙服务。这是使用IP表无法实现的。

回到Iptables

有些人喜欢使用Firewalld的IP表,所以如果你发现自己处于不想使用Firewalld的情况,你可以轻松地返回到IP表。

首先,禁用Firewalld:

$ systemctl disable firewalld

$ systemctl  stop firewalld

然后安装IP表:

$ yum install iptables-services

$ touch / etc / sysconfig / iptables

$ touch / etc / sysconfig / ip6tables

现在可以启动IP表的服务:

$ systemctl  start iptables

$ systemctl  start ip6tables

$ systemctl enable iptables

$ systemctl enable ip6tables

为了让内核考虑新的配置,您必须重新启动系统。

限制编译器

如果你的系统被攻陷,攻击者有一个重要的感兴趣的东西,这是编译器,但为什么?因为他们可以下载一个简单的C文件(POC)并在系统上编译它,并在几秒钟内成为root用户,或者如果编译器打开,他们可以在系统上做一些严重的事情。

首先,您需要查询单个软件包以查看它们中包含的二进制文件。然后你需要限制这些二进制文件的权限

 $ rpm -q --filesbypkg gcc | grep 'bin' 

linux安全限制编译器

现在我们需要创建一个可以访问编译器二进制文件的组:

 $ groupadd compilerGroup 

然后,您可以更改您想要的任何二进制文件的所有权到此组:

 $ chown root:compilerGroup /usr/bin/gcc 

最后一个重要的事情是将此二进制文件的权限更改为只有编译器组:

 $ chmod 0750 /usr/bin/gcc 

现在任何尝试使用gcc的用户都会看到一个权限被拒绝的消息。

我知道一些人可能会说,攻击者将下载编译器本身,如果他发现编译器关闭,这是另一个故事,我们可以在未来的帖子。

真棒不变的文件

不可变文件是Linux系统上最强大的Linux安全功能之一。不可变文件不能由任何用户写入,即使是root用户,不管它们的文件权限。它们不能被删除或重命名,也不能从它们创建硬链接。

真棒!

它们是保护配置文件或保护您要防止更改的任何文件的理想选择。

要使任何文件不可变,请使用chattr命令:

 

$ chattr +i /myscript

 

linux安全不可变文件

你可以删除不可变的属性,像这样:

 $ chattr -i /myscript 

linux安全删除immutalbe标志

可以使目录/sbin  和   目录的内容   /usr/lib  不可变,以防止攻击者用更改的恶意版本替换关键的二进制文件或库文件。

我将离开其余的例子关于使用不可变的文件到你的想象力。

使用Aureport管理Selinux

通常,如果您使用托管控制面板,或者当一个或多个特定应用程序似乎遇到此类问题时,它们将不会在启用SELinux的情况下运行。你会发现SELinux被禁用。

禁用SELinux将使系统暴露。我同意,SELinux有一些复杂性,对于我们这些希望享受其安全性的人,你的生活可以通过运行aureport选项更简单。

aureport实用程序旨在创建基于列的报告,以显示记录在审核日志文件中的事件。

 $ aureport --avc 

linux安全aureport

您还可以使用此相同的实用程序创建可执行文件的列表:

 $ aureport -x 

linux安全aureport -x

您可以使用aureport生成完整的身份验证报告:

 $ aureport -au -i 

linux安全aureport

或者您可以列出失败的身份验证事件:

 $ aureport -au --summary -i --failed 

linux安全aureport失败

或者可能是成功身份验证事件的摘要:

 $ aureport -au --summary -i --success 

linux安全aureport成功summery

真棒!

当您使用运行SELinux的系统时,作为系统管理员的第一个呼叫点是在排除系统故障时考虑aureport的优点。

使用Sealert工具

除了aureport工具,您可以使用一个名为sealert的好的Linux安全工具,您可以使用以下命令安装:

 $ yum install setools 

现在我们有一个工具,将主动返回从日志文件中发现的   /var/log/audit/audit.log  公告,并将其转换为更加“人性化的”。

这个工具被称为sealert,它的目的是发布与SELinux相关的任何问题的报告。

你可以这样使用它:

 $ sealert -a /var/log/audit/audit.log 

linux安全密码

生成的报告的最好的事情是在每个警报结束时,如果发现任何问题,系统解释如何解决问题。

在这篇文章中,我们已经涵盖了一些Linux安全技巧,可以帮助你加强你的系统,然而,有很多Linux安全技巧,许多运行的服务需要加固。

硅谷希望你发现这篇文章有用和有趣。

 

 
在线客服
  • 点击这里给我发消息
  • 点击这里给我发消息
  • 微信扫一扫
  • 官方微信