保护内存缓存服务器以避免DDoS放大攻击

时间:2020-01-09 10:43:34  来源:igfitidea点击:

如何在Linux或者类似Unix的系统上保护Memcached服务器,以防止攻击者将我的Memcached服务用作放大矢量,从而导致意外流量发送到目标网络?

Memcached是一个免费的开源分布式内存对象缓存系统。
可以通过减轻数据库负载将其用于加速动态Web应用程序。

Memcached服务器是内存中的键值存储。
该页面显示了如何保护在Linux或者类似Unix的系统上运行的memcached。

如何安装Memcached服务器

在Debian/Ubuntu Linux上使用apt-get命令/apt命令:

$ sudo apt install memcached

如果您使用的是CentOS/RHEL,请尝试yum命令:

$ sudo yum install memcached

Fedora Linux用户应使用dnf命令:

$ sudo dnf install memcached

如何配置Memcached

您需要根据Linux发行版编辑以下文件:

  • Debian/Ubuntu/Mint Linux /etc/memcached.conf
  • CentOS/RHEL/Fedora/Oracle Linux/etc/sysconfig/memcached

有关memcached配置的详细信息,请参阅常见问题解
解决方法:

  • Redhat/CentOS安装Memcached缓存系统
  • Ubuntu Linux安装Memcached服务器
  • RHEL/CentOS 6 Linux安装Memcached高性能分布式内存对象缓存服务器

Memcached和DDoS攻击

默认情况下,memcached服务器使用TCP/UDP端口号11211。
通过利用暴露于公共Internet IPv4/IPv6地址的Memcached服务器来执行DDoS(分布式拒绝服务)放大攻击。
使用Memcached协议的放大攻击向量的显着增加,来自UDP端口11211。

如何保护Memcached服务器

保护memecached服务器的过程如下:

1.配置防火墙

Debian/Ubuntu Linux示例

您可以按以下方式在Debian/Ubuntu Linux上使用ufw,以仅允许从11211端口到私有IP地址的通信:

$ sudo ufw allow from 172.16.3.2 to 172.16.3.1 port 11211 proto tcp comment 'Allow memcached tcp port'
### [ uncomment the following if you are using tcp port ] ###
$ #sudo ufw allow from 172.16.3.2 to 172.16.3.1 port 11211 proto udp comment 'Allow memcached udp port'

CentOS/RHEL版本6.x/5.x

如果您使用的是CentOS/RHEL 6.x/5.x,请编辑/etc/sysconfig/iptables:

$ sudo /etc/sysconfig/iptables

添加以下INPUT行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 11211 -s 172.16.3.2 -d 172.16.3.1 -j ACCEPT
# uncomment the following if you are using udp
#-A INPUT -m state --state NEW -m udp -p udp --dport 11211 -s 172.16.3.2 -d 172.16.3.1 -j ACCEPT

保存并关闭文件。
重新启动防火墙,运行:

$ sudo service iptables restart

RHEL/CentOS版本7.x和Fedora Linux

对于最新版本的CentOS/RHEL/Fedora Linux,请使用以下Firewall-cmd规则:

# firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="172.16.3.2/24"
port protocol="tcp" port="11211" accept'

重新加载防火墙:

# firewall-cmd --reload

2.禁用UDP

要禁用UDP并监听回送ip 127.0.0.1/172.16.3.1,请仅在CentOS/RHEL/Fedora Linux文件/etc/sysconfig/memcached上的memcached配置文件中添加以下内容:

OPTIONS="-U 0 -l 127.0.0.1,172.16.3.1"

在名为/etc/memcached.conf的Debian/Ubuntu Linux文件上追加以下内容:

-U 0
-l 127.0.0.1,172.16.3.1

其中:

  • -U 0:侦听UDP端口{num},默认端口为11211。将其设置为0即可将其关闭,即,如果不需要,请禁用UDP。
  • -l 127.0.0.1,172.16.3.1:指定要监听的IP地址。默认为侦听所有IP地址。此参数是memcached拥有的仅有的安全措施之一,因此请确保在防火墙接口上进行监听。

3.强制memcached侦听专用LAN/VLAN IP地址

如上所述,设置-l选项。

如何测试Memcached服务器安全设置?

确保您的Memcached防火墙和TCP/UDP端口已从公共Internet上关闭。
仅允许您的Web服务器/应用使用nc命令/telnet命令/nmap命令访问Memcached服务器:

$ nc your-public-IP-here 11211
$ nc -u your-public-IP-here 11211
$ telnet your-public-IP-here 11211
$ sudo nmap your-public-IP-here -p 11211 -sU -sS --script memcached-info

使用ss命令或者netstat命令验证打开的端口:

$ ss -tulpn | grep :11211
$ netstat -tulpn | grep :11211

示例防火墙消息表明攻击被阻止

[72551.977597] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:91:60:1d:71:00:26:51:c4:00:41:08:00 SRC=184.105.139.71 DST=45.xxx.xxx.xxx LEN=40 TOS=0x00 PREC=0x00 TTL=246 ID=54321 PROTO=TCP SPT=55298 DPT=11211 WINDOW=65535 RES=0x00 SYN URGP=0 
[74893.874472] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:91:60:1d:71:00:1b:54:c2:50:c1:08:00 SRC=216.75.62.8 DST=45.xxx.xxx.xxx LEN=40 TOS=0x08 PREC=0x20 TTL=243 ID=54321 PROTO=TCP SPT=57239 DPT=11211 WINDOW=65535 RES=0x00 SYN URGP=0