Sahana Sreeram 发布的文章

netstat 命令为你的 Linux 服务器提供了监测和网络故障排除的重要观察手段。

 title=

之前的文章中,我分享了一些管理你的个人 Linux 服务器的首要步骤。我简要的提到了监测网络连接的监听端口,我想通过 Linux 系统的 netstat 命令来扩展开讲讲。

服务监测和端口扫描是标准的行业惯例。有很好的软件,如 Prometheus 协助这个过程自动化,SELinux 协助上下文和保护系统访问权限。然而,我相信了解你的服务器是如何连接到其他网络和设备的,是建立正常服务器基准的关键,能够帮助你识别有可能表明错误和入侵等异常情况。作为一个初学者,我已经掌握了 netstat 命令为我的服务器提供了监测和网络故障排除的重要观察手段。

Netstat 和类似的一些网络监测工具被归入 net-tools 软件包 里,用来显示关于活动连接的信息。因为运行在开放的端口的服务往往容易被利用,定期进行网络监测能够帮助你及早探测到可疑的活动。

安装 netstat

netstat 经常预装在 Linux 发行版上。如果 netstat 没有在你的服务器上安装,用你的包管理器安装它。下面是在基于 Debian 的系统上:

$ sudo apt-get install net-tools

在基于 Fedora 的系统上:

$ dnf install net-tools

使用 netstat

就其本身而言,netstat 命令显示了全部建立成功的连接。你可以使用 netstat 的参数指定进一步预期的输出。举个例子,要显示所有监听和非监听的连接,使用 --all-a 为简写)的参数。这将返回许多结果,所以在例子中我用管道符输出给 head 命令来显示输出的前 15 行:

$ netstat --all | head -n 15
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:27036                 *:*                     LISTEN      
tcp        0      0 localhost:27060         *:*                     LISTEN      
tcp        0      0 *:16001                 *:*                     LISTEN      
tcp        0      0 localhost:6463          *:*                     LISTEN      
tcp        0      0 *:ssh                   *:*                     LISTEN      
tcp        0      0 localhost:57343         *:*                     LISTEN      
tcp        0      0 *:ipp                   *:*                     LISTEN      
tcp        0      0 *:4713                  *:*                     LISTEN      
tcp        0      0 10.0.1.222:48388        syd15s17-in-f5.1e:https ESTABLISHED
tcp        0      0 10.0.1.222:48194        ec2-35-86-38-2.us:https ESTABLISHED
tcp        0      0 10.0.1.222:56075        103-10-125-164.va:27024 ESTABLISHED
tcp        0      0 10.0.1.222:46680        syd15s20-in-f10.1:https ESTABLISHED
tcp        0      0 10.0.1.222:52730        syd09s23-in-f3.1e:https ESTABLISHED

要只显示 TCP 端口,使用 --all--tcp 参数,或者简写成 -at

$ netstat -at | head -n 5
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address   Foreign Address  State      
tcp        0      0 *:27036         *:*              LISTEN      
tcp        0      0 localhost:27060 *:*              LISTEN      
tcp        0      0 *:16001         *:*              LISTEN

要只显示 UDP 端口,使用 --all--udp 参数,或者简写成 -au

$ netstat -au | head -n 5
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address     Foreign Address    State      
udp        0      0 *:27036           *:*                                
udp        0      0 10.0.1.222:44741  224.0.0.56:46164   ESTABLISHED
udp        0      0 *:bootpc     

netstat 命令参数常常是简单易懂的。举个例子,要显示带有全部进程 ID(PID)和数字地址的监听 TCP 和 UDP 的端口:

$ sudo netstat --tcp --udp --listening --programs --numeric
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address      Foreign Addr  State   PID/Program name    
tcp        0      0 0.0.0.0:111        0.0.0.0:*     LISTEN  1/systemd            
tcp        0      0 192.168.122.1:53   0.0.0.0:*     LISTEN  2500/dnsmasq        
tcp        0      0 0.0.0.0:22         0.0.0.0:*     LISTEN  1726/sshd            
tcp        0      0 127.0.0.1:631      0.0.0.0:*     LISTEN  1721/cupsd          
tcp        0      0 127.0.0.1:6010     0.0.0.0:*     LISTEN  4023/sshd: tux@  
tcp6       0      0 :::111             :::*          LISTEN  1/systemd            
tcp6       0      0 :::22              :::*          LISTEN  1726/sshd            
tcp6       0      0 ::1:631            :::*          LISTEN  1721/cupsd          
tcp6       0      0 ::1:6010           :::*          LISTEN  4023/sshd: tux@  
udp        0      0 0.0.0.0:40514      0.0.0.0:*             1499/avahi-daemon:  
udp        0      0 192.168.122.1:53   0.0.0.0:*             2500/dnsmasq        
udp        0      0 0.0.0.0:67         0.0.0.0:*             2500/dnsmasq        
udp        0      0 0.0.0.0:111        0.0.0.0:*             1/systemd            
udp        0      0 0.0.0.0:5353       0.0.0.0:*             1499/avahi-daemon:  
udp6       0      0 :::111             :::*                  1/systemd            
udp6       0      0 :::44235           :::*                  1499/avahi-daemon:  
udp6       0      0 :::5353            :::*                  1499/avahi-daemon:

这个常用组合简写版本是 -tulpn

要显示一个指定服务的信息,使用 grep 命令过滤

$ sudo netstat -anlp | grep cups
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1721/cupsd           tcp6       0      0 ::1:631                 :::*                    LISTEN      1721/cupsd
unix  2      [ ACC ]     STREAM     LISTENING     27251    1/systemd /var/run/cups/cups.sock
unix  2      [ ]         DGRAM                    59530    1721/cupsd
unix  3      [ ]         STREAM     CONNECTED     55196    1721/cupsd /var/run/cups/cups.sock

接下来的步骤

一旦你运行了 netstat 命令,你就可以采取措施来保护你的系统,确保只有你主动使用的服务在你的网络上被监听。

  1. 识别通常被利用的端口和服务。一般来说,关闭你实际不使用的端口。
  2. 留意不常见的端口号,认识了解在你系统上使用的合法端口。
  3. 密切注意 SELinux 错误。有时你需要做的只是更新上下文,以匹配你对系统做的合法更改,但是要阅读错误警告,以确保 SELinux 提醒你的不是可疑或者恶意的活动。

如果你发现一个端口正在运行一个可疑的服务,或者你只是简单的想要关闭你不再使用的端口,你可以遵从以下这些步骤,通过防火墙规则手动拒绝端口访问:

如果你在使用 firewall-cmd ,运行这些命令:

$ sudo firewall-cmd –remove-port=<port number>/tcp
$ sudo firewall-cmd –runtime-to-permanent

如果你在使用 UFW,运行以下的命令:

$ sudo ufw deny <port number>

下一步,使用 systemctl 来停止这个服务:

$ systemctl stop <service>

理解 netstat

netstat 是一个快速收集你的服务器网络连接信息的有用工具。定期网络监测是了解你的系统的重要组成部分,对帮助你保持你的系统安全有着重要意义。将这一步纳入你的日常管理中,你可以使用类似 netstat 或者 ss ,以及 Nmap 等开源端口扫描器或者 Wireshark 等嗅探器 ,它们都允许设定 计划任务

随着服务器存储了大量的个人数据,确保个人服务器的安全日益重要。通过了解你的服务器怎样连接到互联网,你可以降低你的机器的风险,同时你仍可以在数字时代大量的连接中获得益处。


via: https://opensource.com/article/22/2/linux-network-security-netstat

作者:Sahana Sreeram 选题:lujun9972 译者:hwlife 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用开源工具来保护你的 Linux 环境不被入侵。

 title=

如今我们的许多个人和专业数据都可以在网上获得,因此无论是专业人士还是普通互联网用户,学习安全和隐私的基本知识是非常重要的。作为一名学生,我通过学校的 CyberPatriot 活动获得了这方面的经验,在那里我有机会与行业专家交流,了解网络漏洞和建立系统安全的基本步骤。

本文基于我作为初学者迄今所学的知识,详细介绍了六个简单的步骤,以提高个人使用的 Linux 环境的安全性。在我的整个旅程中,我利用开源工具来加速我的学习过程,并熟悉了与提升 Linux 服务器安全有关的更高层次的概念。

我使用我最熟悉的 Ubuntu 18.04 版本测试了这些步骤,但这些步骤也适用于其他 Linux 发行版。

1、运行更新

开发者们不断地寻找方法,通过修补已知的漏洞,使服务器更加稳定、快速、安全。定期运行更新是一个好习惯,可以最大限度地提高安全性。运行它们:

sudo apt-get update && apt-get upgrade

2、启用防火墙保护

启用防火墙 可以更容易地控制服务器上的进站和出站流量。在 Linux 上有许多防火墙应用程序可以使用,包括 firewall-cmd 简单防火墙 Uncomplicated Firewall UFW)。我使用 UFW,所以我的例子是专门针对它的,但这些原则适用于你选择的任何防火墙。

安装 UFW:

sudo apt-get install ufw

如果你想进一步保护你的服务器,你可以拒绝传入和传出的连接。请注意,这将切断你的服务器与世界的联系,所以一旦你封锁了所有的流量,你必须指定哪些出站连接是允许从你的系统中发出的:

sudo ufw default deny incoming
sudo ufw default allow outgoing

你也可以编写规则来允许你个人使用所需要的传入连接:

ufw allow <service>

例如,允许 SSH 连接:

ufw allow ssh

最后,启用你的防火墙:

sudo ufw enable

3、加强密码保护

实施强有力的密码政策是保持服务器安全、防止网络攻击和数据泄露的一个重要方面。密码策略的一些最佳实践包括强制要求最小长度和指定密码年龄。我使用 libpam-cracklib 软件包来完成这些任务。

安装 libpam-cracklib 软件包:

sudo apt-get install libpam-cracklib

强制要求密码的长度:

  • 打开 /etc/pam.d/common-password 文件。
  • minlen=12 行改为你需要的任意字符数,从而改变所有密码的最小字符长度要求。

为防止密码重复使用:

  • 在同一个文件(/etc/pam.d/common-password)中,添加 remember=x 行。
  • 例如,如果你想防止用户重复使用他们最后 5 个密码中的一个,使用 remember=5

要强制要求密码年龄:

  • /etc/login.defs 文件中找到以下几行,并用你喜欢的时间(天数)替换。例如:
PASS_MIN_AGE: 3
PASS_MAX_AGE: 90
PASS_WARN_AGE: 14 

强制要求字符规格:

  • 在密码中强制要求字符规格的四个参数是 lcredit(小写)、ucredit(大写)、dcredit(数字)和 ocredit(其他字符)。
  • 在同一个文件(/etc/pam.d/common-password)中,找到包含 pam_cracklib.so 的行。

    • 在该行末尾添加以下内容:lcredit=-a ucredit=-b dcredit=-c ocredit=-d
    • 例如,下面这行要求密码必须至少包含一个每种字符。你可以根据你喜欢的密码安全级别来改变数字。lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1

4、停用容易被利用的非必要服务。

停用不必要的服务是一种最好的做法。这样可以减少开放的端口,以便被利用。

安装 systemd 软件包:

sudo apt-get install systemd

查看哪些服务正在运行:

systemctl list-units

识别 哪些服务可能会导致你的系统出现潜在的漏洞。对于每个服务可以:

  • 停止当前正在运行的服务:systemctl stop <service>
  • 禁止服务在系统启动时启动:systemctl disable <service>
  • 运行这些命令后,检查服务的状态:systemctl status <service>

5、检查监听端口

开放的端口可能会带来安全风险,所以检查服务器上的监听端口很重要。我使用 netstat 命令来显示所有的网络连接:

netstat -tulpn

查看 “address” 列,确定 端口号。一旦你找到了开放的端口,检查它们是否都是必要的。如果不是,调整你正在运行的服务,或者调整你的防火墙设置。

6、扫描恶意软件

杀毒扫描软件可以有用的防止病毒进入你的系统。使用它们是一种简单的方法,可以让你的服务器免受恶意软件的侵害。我首选的工具是开源软件 ClamAV

安装 ClamAV:

sudo apt-get install clamav

更新病毒签名:

sudo freshclam

扫描所有文件,并打印出被感染的文件,发现一个就会响铃:

sudo clamscan -r --bell -i /

你可以而且应该设置为自动扫描,这样你就不必记住或花时间手动进行扫描。对于这样简单的自动化,你可以使用 systemd 定时器 或者你的 喜欢的 cron 来做到。

保证你的服务器安全

我们不能把保护服务器安全的责任只交给一个人或一个组织。随着威胁环境的不断迅速扩大,我们每个人都应该意识到服务器安全的重要性,并采用一些简单、有效的安全最佳实践。

这些只是你提升 Linux 服务器的安全可以采取的众多步骤中的一部分。当然,预防只是解决方案的一部分。这些策略应该与严格监控拒绝服务攻击、用 Lynis 做系统分析以及创建频繁的备份相结合。

你使用哪些开源工具来保证服务器的安全?在评论中告诉我们它们的情况。


via: https://opensource.com/article/21/4/securing-linux-servers

作者:Sahana Sreeram 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出