使用 Fail2Ban 保护 SSH 登录
Fail2Ban 是一个应用程序,它会在太多的失败登录尝试后禁止 IP 地址登录到你的服务器。由于合法登录通常不会超过三次尝试(如果使用 SSH 密钥,那不会超过一个),因此如果服务器充满了登录失败的请求那就表示有恶意访问。
Fail2Ban 可以监视各种协议,包括 SSH、HTTP 和 SMTP。默认情况下,Fail2Ban 仅监视 SSH,并且因为 SSH 守护程序通常配置为持续运行并监听来自任何远程 IP 地址的连接,所以对于任何服务器都是一种安全威慑。
有关安装和配置 Fail2Ban 的完整说明,请参阅我们的指南:使用 Fail2ban 保护服务器。
删除未使用的面向网络的服务
大多数 Linux 发行版都安装并运行了网络服务,监听来自互联网、回环接口或两者兼有的传入连接。 将不需要的面向网络的服务从系统中删除,以减少对运行进程和对已安装软件包攻击的概率。
查明运行的服务
要查看服务器中运行的服务:
sudo netstat -tulpn
如果默认情况下 netstat 没有包含在你的 Linux 发行版中,请安装软件包 net-tools 或使用 ss -tulpn 命令。
以下是 netstat 的输出示例。 请注意,因为默认情况下不同发行版会运行不同的服务,你的输出将有所不同:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 7315/rpcbind tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3277/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3179/exim4 tcp 0 0 0.0.0.0:42526 0.0.0.0:* LISTEN 2845/rpc.statd tcp6 0 0 :::48745 :::* LISTEN 2845/rpc.statd tcp6 0 0 :::111 :::* LISTEN 7315/rpcbind tcp6 0 0 :::22 :::* LISTEN 3277/sshd tcp6 0 0 ::1:25 :::* LISTEN 3179/exim4 udp 0 0 127.0.0.1:901 0.0.0.0:* 2845/rpc.statd udp 0 0 0.0.0.0:47663 0.0.0.0:* 2845/rpc.statd udp 0 0 0.0.0.0:111 0.0.0.0:* 7315/rpcbind udp 0 0 192.0.2.1:123 0.0.0.0:* 3327/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 3327/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 3327/ntpd udp 0 0 0.0.0.0:705 0.0.0.0:* 7315/rpcbind udp6 0 0 :::111 :::* 7315/rpcbind udp6 0 0 fe80::f03c:91ff:fec:123 :::* 3327/ntpd udp6 0 0 2001:DB8::123 :::* 3327/ntpd udp6 0 0 ::1:123 :::* 3327/ntpd udp6 0 0 :::123 :::* 3327/ntpd udp6 0 0 :::705 :::* 7315/rpcbind udp6 0 0 :::60671 :::* 2845/rpc.statd |
netstat 告诉我们服务正在运行 RPC(rpc.statd 和 rpcbind)、SSH(sshd)、NTPdate(ntpd)和Exim(exim4)。
TCP
请参阅 netstat 输出的 Local Address 那一列。进程 rpcbind 正在侦听 0.0.0.0:111 和 :::111,外部地址是 0.0.0.0:* 或者 :::* 。这意味着它从任何端口和任何网络接口接受来自任何外部地址(IPv4 和 IPv6)上的其它 RPC 客户端的传入 TCP 连接。 我们看到类似的 SSH,Exim 正在侦听来自回环接口的流量,如所示的 127.0.0.1 地址。
UDP
UDP 套接字是无状态的,这意味着它们只有打开或关闭,并且每个进程的连接是独立于前后发生的连接。这与 TCP 的连接状态(例如 LISTEN、ESTABLISHED和 CLOSE_WAIT)形成对比。
我们的 netstat输出说明 NTPdate :1)接受服务器的公网 IP 地址的传入连接;2)通过本地主机进行通信;3)接受来自外部的连接。这些连接是通过端口 123 进行的,同时支持 IPv4 和 IPv6。我们还看到了 RPC 打开的更多的套接字。
查明该移除哪个服务
如果你在没有启用防火墙的情况下对服务器进行基本的 TCP 和 UDP 的 nmap 扫描,那么在打开端口的结果中将出现 SSH、RPC 和 NTPdate 。通过配置防火墙,你可以过滤掉这些端口,但 SSH 除外,因为它必须允许你的传入连接。但是,理想情况下,应该禁用未使用的服务。
你可能主要通过 SSH 连接管理你的服务器,所以让这个服务需要保留。如上所述,RSA 密钥和 Fail2Ban 可以帮助你保护 SSH。
NTP 是服务器计时所必需的,但有个替代 NTPdate 的方法。如果你喜欢不开放网络端口的时间同步方法,并且你不需要纳秒精度,那么你可能有兴趣用 OpenNTPD 来代替 NTPdate。
然而,Exim 和 RPC 是不必要的,除非你有特定的用途,否则应该删除它们。
本节针对 Debian 8。默认情况下,不同的 Linux 发行版具有不同的服务。如果你不确定某项服务的功能,请尝试搜索互联网以了解该功能是什么,然后再尝试删除或禁用它。
卸载监听的服务
如何移除包取决于发行版的包管理器:
Arch
sudo pacman -Rs package_name
CentOS
sudo yum remove package_name
Debian / Ubuntu
sudo apt-get purge package_name
Fedora
sudo dnf remove package_name
再次运行 sudo netstat -tulpn,你看到监听的服务就只会有 SSH(sshd)和 NTP(ntpdate,网络时间协议)。
配置防火墙
使用防火墙阻止不需要的入站流量能为你的服务器提供一个高效的安全层。 通过指定入站流量,你可以阻止入侵和网络测绘。 最佳做法是只允许你需要的流量,并拒绝一切其他流量。请参阅我们的一些关于最常见的防火墙程序的文档:
iptables 是 netfilter 的控制器,它是 Linux 内核的包过滤框架。 默认情况下,iptables 包含在大多数 Linux 发行版中。
firewallD 是可用于 CentOS/Fedora 系列发行版的 iptables 控制器。
UFW 为 Debian 和 Ubuntu 提供了一个 iptables 前端。
接下来
这些是加固 Linux 服务器的最基本步骤,但是进一步的安全层将取决于其预期用途。 其他技术可以包括应用程序配置,使用入侵检测或者安装某个形式的访问控制。
现在你可以按你的需求开始设置你的服务器了。