我想我的CentOS 5.3系统几乎已经完成了我的iptables设置。 这是我的脚本…
# Establish a clean slate iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -F # Flush all rules iptables -X # Delete all chains # Disable routing. Drop packets if they reach the end of the chain. iptables -P FORWARD DROP # Drop all packets with a bad state iptables -A INPUT -m state --state INVALID -j DROP # Accept any packets that have something to do with ones we've sent on outbound iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Accept any packets coming or going on localhost (this can be very important) iptables -A INPUT -i lo -j ACCEPT # Accept ICMP iptables -A INPUT -p icmp -j ACCEPT # Allow ssh iptables -A INPUT -p tcp --dport 22 -j ACCEPT # Allow httpd iptables -A INPUT -p tcp --dport 80 -j ACCEPT # Allow SSL iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Block all other traffic iptables -A INPUT -j DROP
对于上下文来说,这台机器是一台虚拟专用服务器Web应用主机。
在上一个问题中 ,李B说我应该“更多地lockingICMP”。 为什么不完全阻止呢? 如果我这样做会发生什么(会发生什么坏事)?
如果我不需要阻止ICMP,我怎么能把它locking更多呢?
ICMP是比“traceroute”和“ping”更方便的方式。 当您运行DNS服务器(端口不可访问)时,它被用于反馈,在现代DNS服务器中,DNS服务器可能实际上帮助select不同的机器来更快地查询。
如上所述,ICMP也用于pathMTU发现。 机会是你的操作系统设置“DF”(不要碎片)在它发送的TCP数据包。 如果沿着path的某些东西无法处理这个大小的数据包,它希望得到一个ICMP“需要分片”的数据包。 如果你阻塞了所有的ICMP,你的机器将不得不使用其他的后备机制,基本上使用超时来检测PMTU“黑洞”,永远不会正确优化。
另外,你应该问自己为什么要阻止ICMP。 你在这里试图阻止什么? 很明显,你不明白什么是ICMP,这很常见。 我会非常谨慎地阻止你不完全理解的东西。
为了更好地了解这一点,许多常见的防火墙书籍都说“阻止ICMP” – 很明显,他们的作者从来没有读过RFC或者不得不解决这些build议的问题。 阻止所有ICMP是不好的build议。
现在,限速也可以伤害。 如果你的机器很忙,或者即使没有,你也可以获得大量的ICMPstream量。 我的networking服务器可能每分钟获得大约10-100个ICMP数据包,其中大部分是PMTU发现。 即使有人select用某种types的ICMP数据包攻击我的服务器,这也不算什么大问题。 如果你的机器甚至只能接受一个TCP连接(ssh,http,mail等),那么这个攻击的可能性就会大大超过误解的ICMP。
ICMP用于一系列诊断(例如ping,traceroute)和networking控制(例如PMTU发现)function。 不分青红皂白地阻断ICMP会引起其他人的各种烧心,除非你确切地知道你在做什么,你应该放弃它。
我从来没有理解为什么人们loggingICMP,正如上面所说,它只会让你自己和其他人头疼。 您可以确定一个主机是否足够容易启动,只要它足够有限,不能用作DOS,那么我从来没有听说过任何阻止它的令人信服的理由。 (如果有人能想出一个理由,请发表)
你可以试试限制icmp,这样它就不能用作DOS攻击。 但有太多的故障排除工具,如ping,mtr(我忘记Windows相当于),traceroute(tracert),使用ICMP。 完全放弃它们是愚蠢的。 即使无法在任何端口上进行远程login,也是检查实例是否启动的好方法。
--limit 10/second
给你的icmp规则可能是一个体面的限制,给一个电脑实际上可以处理多less。
这是解决networking连接问题的有用诊断工具。
它还允许您在互联网上的其他地方使用比您networking上的MTU更小的连接。 如果您尝试发送数据包太大而无法分段,那么设备会丢弃数据包,并将发送ICMP碎片的数据包发送回发件人。 如果你放弃所有的ICMP数据包,那么你的networking就会失去这些奇怪的事情。
真正的问题是“为什么要阻止ICMP?” 你有什么收获? 只需在边界和贵重资产面前拥有良好的过滤规则。
这是一个替代的观点,本着安全理论所暗示的精神。 其他海报是正确的,安全实践往往是过分热心,但有一个很好的基础。
安全理论通常是你只能启用你所需要的。 其他的东西(这可能是有用的 – 例如,ping响应)可以被攻击者用来确定你的系统的范围,或者可能作为一个攻击媒介来处理一些不被发现的漏洞。
所以,看看ICMP消息types,你需要什么来正常的,正确的操作你的系统?
…等等。 如果你真的想了解这个,去了解各种ICMPtypes和它们是什么。 维基百科的文章是一个很好的起点。
在实践中,真正丑陋的是redirect; 如果你想做一些快速而有用的事情,阻止它,让其余的。
我会补充说,IPtables连接跟踪将允许适当的返回ICMP数据包进行活动连接。 因此,如果您正在运行conntrack,只要您接受RELATED数据包(在阻止规则集中的ICMP之前),就应该能够阻止大多数ICMP入站。
平是一个很好的诊断工具,你真的希望你有一天。 我正在使用这些:
-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT -A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT
你可能也想扼杀它。
如今,即使限制服务器端的ICMP数据包,也可能会给DDoS攻击带来麻烦。 主要是通过向一台服务器发送巨大的窗口ICMP请求来完成攻击,如果服务器正在尝试响应每个服务器,猜猜会发生什么?
主要的是我们有一个每天都得到坏包的teampeak服务器,两个月里有几天我们有一些“空闲时间”。 我们所做的完全是禁用/阻止ICMP响应,我们在服务器上没有DNS服务器,没有NTP服务器,没有邮件服务器,没有FTP服务器,只有两个Apache和Teampeak。 所有服务不需要的端口都closures。 我们正计划阻止ssh,只留下两个端口。 今天有21k(!)永久禁令。
情况是,攻击者主要使用ICMP隧道,并且与服务器pipe理员讨论了几条非常有趣的日志行,他们说他们有服务器ICMP请求,所以攻击者利用这些攻击来攻击他们,攻击我们。 听起来很奇怪,但这是真的。
如果你不需要诊断你的服务器,如果你能够完全阻止请求,或者过滤它们,例如放大窗口,那就去做。 我还build议你完全封锁:中国,韩国,泰国,土耳其,因为大部分IP地址都来自这里。 我有这些国家的整个清单,但几乎每天都有一些新的国家。
我说我做什么,如果你不同意 – 不要这样做。 就那么简单。 祝你好运
至less应该允许通过icmptypes3(目标不可达),4(源熄灭)和11(超过时间)。 所有这些types都用于处理networking问题,不应该被过滤。
iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
(Source quenchtypes现在已经被弃用了,但是让它开放不会有什么坏处)
我允许来自本地Intranet的ICMPstream量,阻止来自Internet的stream量。 这样我的服务器几乎在线看不到(它只响应一个非标准的SSH端口)。
iptables -I INPUT 7 -d 208.180.XX -p icmp --icmp-type 8 -j DROP iptables -I INPUT 8 -d 208.180.XX -p icmp --icmp-type 0 -j DROP iptables -I INPUT 9 -d 208.180.XX -p icmp --icmp-type 11 -j DROP
将其插入标准回送,build立,LAN白名单,VOIP提供商白名单和SSH端口ACCEPT之后。 我允许我想要的stream量,然后尽我所能保持服务器对世界其他地方不可见。