专栏首页终身幼稚园Liunx服务器的几个安全防护措施

Liunx服务器的几个安全防护措施

前言

很多服务器不时地被黑客入侵。因此,这里向您展示如何轻松地保护Linux服务器。 这并不是一个全面的安全指南。 然而,它可以帮助您阻止几乎90%的流行后端攻击,如蛮力登录尝试和DDoS。

准备

  1. 一台linux服务器
  2. 一台本地计算机
  3. 对命令行有一个基本的了解。

一、配置SSH Keys

要访问远程服务器,您必须使用密码登录或使用SSH密钥。

密码的问题在于它们很容易被强行破解(您将在下面进一步了解如何防止这种情况)。此外,在需要访问服务器的任何时候,都必须通过这两种方法登录。

为了避免上述缺点,您必须设置SSH密钥身份验证。它比密码更安全,因为黑客无法强行破解密码。

由于不需要输入密码,连接到服务器也更容易更快。

下面是如何为您的服务器设置SSH身份验证。 在本地计算机上,输入以下命令生成SSH密钥对:

ssh-keygen

上面的命令将通过几个步骤来生成SSH密钥。

使用以下命令将公钥添加到服务器:

ssh-copy-id username@remote_host

确保用真实的用户名和服务器的IP地址替换用户名和remote_host。系统会提示您输入密码。

尝试登录到您的服务器与命令:

ssh username@remote_host

这次不会提示您输入密码。

二、实时同步系统时间

许多安全协议利用您的系统时间来运行cron作业、日期日志和执行其他关键任务。

如果系统时间不正确,可能会对服务器造成负面影响。为了防止这种情况发生,您可以安装一个NTP客户机。该客户机将使您的系统时间与全局NTP服务器同步。

使用以下命令安装NTP客户端:

sudo apt install ntp

完成后, 您将不再需要担心再次设置系统日期。

三、查看活动端口

服务器上的应用程序公开某些端口,以便网络中的其他应用程序可以访问它们。

黑客还可以在您的服务器上安装后门,并公开一个端口,通过该端口他们可以控制服务器。

由于这个原因,我们不希望您的服务器侦听我们不知道的端口上的请求。

要查看活动端口,请使用以下命令:

sudo ss -lntup

查看输出并研究您不熟悉的任何端口或进程。

尝试发现并跟踪潜在的有害服务和流程。

这里列举出一些可能被人利用的有害的TCP/UDP端口列表。

31/tcp  Agent 31, Hackers Paradise, Masters Paradise
1170/tcp    Psyber Stream
1234/tcp    Ultors Trojan
1243/tcp    SubSeven server (default for V1.0-2.0)
1981/tcp    ShockRave
2001/tcp    Trojan Cow
2023/tcp    Ripper Pro
2140/udp    Deep Throat, Invasor
2989/tcp    Rat backdoor
3024/tcp    WinCrash
3150/tcp    Deep Throat, Invasor
3700/tcp    Portal of Doom
4950/tcp    ICQ Trojan
6346/tcp    Gnutella
6400/tcp    The Thing
6667/tcp    Trinity intruder-to-master and master-to-daemon
SubSeven server (default for V2.1 Icqfix and beyond)
6670/tcp    Deep Throat
12345/tcp   NetBus 1.x, GabanBus, Pie Bill Gates, X-Bill
12346/tcp   NetBus 1.x
16660/tcp   Stacheldraht intruder-to-master
18753/udp   Shaft master-to-daemon
20034/tcp   NetBus 2 Pro
20432/tcp   Shaft intruder-to-master
20433/udp   Shaft daemon-to-master
27374/tcp   SubSeven server (default for V2.1-Defcon)
27444/udp   Trinoo master-to-daemon
27665/tcp   Trinoo intruder-to-master
30100/tcp   NetSphere
31335/udp   Trinoo daemon-to-master
31337/tcp   Back Orifice, Baron Night, Bo Facil
33270/tcp   Trinity master-to-daemon
33567/tcp   Backdoor rootshell via inetd (from Lion worm)
33568/tcp   Trojaned version of SSH (from Lion worm)
40421/tcp   Masters Paradise Trojan horse
60008/tcp   Backdoor rootshel via inetd (from Lion worm)
65000/tcp   Stacheldraht master-to-daemon

四、设置防火墙

防火墙允许您阻止/允许来自服务器上特定端口的流量。为此,我通常使用UFW。

UFW的工作原理是让您配置规则如下:

  • 允许或拒绝
  • 输入或输出流量
  • 流量来源和流量去处
  • 特定或所有端口

以下介绍中,配置将将阻塞除显式允许外的所有网络流量。安装其他程序时,请记住启用运行程序所需的必要端口。

设置UFW

install UFW:

sudo apt-get install ufw

您可以拒绝所有输出流量:

sudo ufw default deny outgoing comment 'deny all outgoing traffic'

或者允许所有输出流量

sudo ufw default allow outgoing comment 'allow all outgoing traffic'

接下来,我们要拒绝所有传入的流量:

sudo ufw default deny incoming comment 'deny all incoming traffic'

当然要排除SSH连接,以便我们可以访问系统。

sudo ufw limit in ssh comment 'allow SSH connections in'

如果您将UFW配置为拒绝所有输出流量,请不要忘记根据您的需要允许特定的流量。以下是一些例子:

# allow traffic out on port 53 -- DNS
sudo ufw allow out 53 comment 'allow DNS calls out'
# allow traffic out on port 123 -- NTP
sudo ufw allow out 123 comment 'allow NTP out'
# allow traffic out for HTTP, HTTPS, or FTP
# apt might needs these depending on which sources you're using
sudo ufw allow out http comment 'allow HTTP traffic out'
sudo ufw allow out https comment 'allow HTTPS traffic out'
sudo ufw allow out ftp comment 'allow FTP traffic out'
# allow whois
sudo ufw allow out whois comment 'allow whois'
# allow traffic out on port 68 -- the DHCP client
# you only need this if you're using DHCP
sudo ufw allow out 68 comment 'allow the DHCP client to update'

若要拒绝端口99上的任何流量,请使用以下命令:

sudo ufw deny 99

最后,使用下面的命令启动UFW:

sudo ufw enable

使用以下命令查看UFW状态:

sudo ufw status

五、防止自动攻击

有两个实用程序可以用来防止大多数自动攻击:

  • PSAD
  • Fail2Ban

PSAD和Fail2Ban的区别

我们了解到端口提供对服务器上应用程序的访问。

攻击者可能决定扫描您的服务器,寻找打开的端口,然后使用这些端口访问服务器。

PSAD监控网络活动,以检测和选择性地阻止此类扫描和其他类型的可疑流量,如DDoS或OS指纹尝试。

而Fail2Ban扫描各种应用程序(如FTP)的日志文件,并自动禁止显示恶意迹象(如自动登录尝试)的ip。

下面的指南将向您展示如何安装和配置PSAD和Fail2Ban,以便它们与UFW一起工作。

install Fail2Ban

对于 Debian 或 Ubuntu 使用以下命令:

sudo apt install fail2ban

CentOS/RHEL使用以下命令:

sudo yum install fail2ban

配置Fail2Ban

# 备份默认配置
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local

在配置文件中查找 banaction =,将其设为 ufw。

banaction = ufw

然后重新加载 fail2ban 配置:

fail2ban-client reload

这样简单配置之后,来自同一 IP 的三次错误登录尝试将封禁该 IP 10 分钟。我个人将封禁期限调成了 7 天。 以下命令可以查看 fail2ban 的状态:

fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed: 6
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned: 2
   `- Banned IP list:   xxx.xxx.xxx.xxx

如以下所见,有一个 IP 已经被防火墙封禁了。我们也可以通过 ufw 的报告确认这一点:

ufw status
Status: active

To                         Action      From
--                         ------      ----
Anywhere                   REJECT      xxx.xxx.xxx.xxx
80/tcp                     ALLOW       Anywhere
22                         ALLOW       Anywhere
443                        ALLOW       Anywhere

install PSAD

项目主页: http://www.cipherdyne.org/psad/

apt-get安装:

sudo apt-get install psad

检查当前的状态:

sudo psad -S

六、安装logwatch

服务器上的应用程序常常将日志消息保存到日志文件中。除非您打算手动监视日志文件,否则需要安装logwatch。

logwatch扫描系统日志文件并总结。

您可以直接从命令行运行它,或者将其调度为按循环调度运行。例如,您可以配置logwatch,将日志文件的每日摘要通过电子邮件发送给您。请注意,您的服务器将需要能够发送电子邮件使其工作。

logwatch使用服务文件来了解如何读取和总结日志文件。您可以在/usr/share/logwatch/scripts/services.中看到所有的服务文件

logwatch的配置文件/usr/share/logwatch/default.conf/logwatch.conf指定了默认选项。您可以通过命令行参数覆盖它们。

要在Ubuntu或Debian上安装logwatch,请运行以下命令:

apt-get install logwatch

CentOS可以使用命令:

yum install logwatch

您可以尝试直接运行logwatch,以防需要查看它收集的样本。

sudo /usr/sbin/logwatch --output stdout --format text --range yesterday --service all

最后,配置logwatch给我们发送一封包含日志文件摘要的每日电子邮件。为此,打开文件/etc/cron.daily/00logwatch,找到执行行,修改为:

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

注意:服务器需要安装Sendmail服务,这里就不累赘安装步骤, 网上有很多教程。

七、执行安全审计

在保护了Linux服务器之后,应该执行安全审计,以便发现您可能错过的任何安全漏洞。

要做到这一点,你可以使用Lynis,一个开源软件,可以执行:

  • 安全审计
  • 依从性测试(例如PCI、HIPAA、SOx)
  • 渗透测试
  • 漏洞检测
  • 系统硬化

Lynis的使用

首先,通过git clone 来安装Lynis。确保您安装了最新版本的Lynis。

git clone https://github.com/CISOfy/lynis

切换到lynis目录

cd lynis

最后,使用以下命令运行审计:

lynis audit system

本文参考:How To Secure Your Linux Server In 7 Easy Steps

本文分享自微信公众号 - 终身幼稚园(kid-always),作者:园长

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVA大数据导出EXCEL方案

    Java当中常用的Excel文档导出主要有POI、JXL和“直接IO流”这三种方式,三种方式各自分别有不同的优势与缺点,下面将分行对其进行简

    终身幼稚园
  • 一文了解Docker

    1)客户端(client): 通过命令行与Docker的守护进程通信,类似于mysql的客户端工具

    终身幼稚园
  • 一个比较清晰的SQL编写风格

    SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,...

    终身幼稚园
  • GitHub 中国区前 100 名到底是什么样的人?

    本文根据Github公开API,抓取了地址显示China的用户,根据粉丝关注做了一个排名,分析前一百名的用户属性,剖析这些活跃在技术社区的牛人到底是何许人也!

    疯狂的技术宅
  • 开发者的福利--Cloud Foundry

    要确保公司云资产的安全性,首先要应用基于虚拟网络独特性修改的可靠的数据安全实践。

    Techeek
  • UNIX网络编程卷1(第三版)套接字编程简介

      通常也被成为“网际套接字地址结构”,以sockaddr_in命名,定义在<netinet/in.h>头文件中。 

    心跳包
  • strncmp函数——比较特定长度的字符串

    strncmp函数用于比较特定长度的字符串。 头文件:string.h。 语法  int strncmp(const char *string1, const ...

    Angel_Kitty
  • 3月28日

     rwx 三个参数的组合。其中 r 代表可读, w 代表可写, x 代表可执行。总共9位,前三位为所有者(user)的权限,中间三位为所属组(group)的权限...

    py3study
  • FreeBuf独家 |《网络安全威胁信息发布管理办法》解读

    随着网络攻击方式和手法逐渐呈现出多样性、复杂性的特点,网络安全威胁更为普遍与持续,在这场与网络攻击长久的对抗中,威胁情报共享和有效利用成为了提升整体网络安全防护...

    FB客服
  • 在新服务器上搭建wordpress网站

    0.首先在购置好服务器后,选一个常用的系统,一般是ubuntu 14.04 不建议用一键安装包,还是自己走一边流程熟悉点。

    十四君

扫码关注云+社区

领取腾讯云代金券