保护内存缓存服务器以避免DDoS放大攻击
如何在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