任何build议我的iptablesconfiguration?

我试图做一个非常安全的iptablesconfiguration。 我有一些旧configuration的问题。 具体来说,我曾经阻止了更多的ICMP,并允许一些特定的ICMPtypes,但这似乎导致定期的DNS问题。

这似乎工作(主要)。 我可以跟踪路由服务器就好了。 我首先在虚拟机上testing这一切。 它必须通过PCI合规性。

*filter :INPUT DROP [5:735] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 13 -j DROP -A INPUT -p icmp -m icmp --icmp-type 14 -j DROP -A INPUT -p udp -m udp --dport 33200:33500 -j REJECT --reject-with icmp-port-unreachable -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT -A OUTPUT -p udp -m udp --dport 33200:33500 -j ACCEPT COMMIT 

上述configuration有问题吗?

我正在使用CentOS 5.6。 另外什么是防止对SSH端口进行暴力攻击的最佳方法? (我将把ssh改成随机的端口)

为了防止暴力攻击SSH,您可能需要速率限制连接。 还有类似fail2ban的程序可以用来黑名单来源于蛮力企图的IP。

如果你想要一个安全的防火墙,我build议你使用防火墙构build工具来构build防火墙。 我使用Shorewall有很多关于如何为各种情况构build防火墙规则的文档。 在你的情况下,我会考虑从一个接口的例子开始,并从那里build立。

小心阻止ICMP,因为一些代码对于networking操作是必不可less的。 Shorewall将确保您启用所需的types。 您可以根据需要select启用或禁用回显请求。

编辑:有一些ICMPtypes,你可能不希望允许。 但是,您需要启用至less目的地不可达(3),源 – 猝灭(4)和超时(11)。 对于ping和traceroute,您需要启用echo-r​​equest(8),可能只是外发。

我意识到这是非常古老的。 只要发布这个以防有人在未来绊倒它。

我从来没有明白为什么有人会想要将OUTPUT策略设置为DROP。 从安全的angular度来看,这听起来不错,但是在实践中,这比其他任何事情都更令人头疼。 因此,OUTPUT DROP策略没有意义,并且会产生大量不必要的工作。 这是我的理性策略:如果我不想启动连接并将数据发送到服务器之外,那么我根本不会运行任何启动不需要的连接并将数据发送到服务器外的程序! 您也不需要PCI合规性。 OUTPUT的默认DROP策略更可能导致以各种意想不到的和令人惊讶的方式破坏防火墙设置。 所以不要这样做。

防止对SSH进行powershell攻击的“最佳方法”是根本不拥有SSH。 也就是说,如果你真的想locking一个系统,需要两个(或更多)人物在机器上才能访问它。 SSH很方便。 安全的对立是方便的。 如果您希望启用SSH,您可以像隐藏SSH端口(例如, SPA或Web knocking )或折腾fail2ban之类的解决scheme,像其他人已经提到的那样引入速率限制。 另外,configurationsshd来禁用密码login – 也就是只允许SSH密钥。 最后configurationPAM来logging和发送电子邮件,无论任何人成功login到系统而不pipe源(SSH,控制台等)。

而且,对于那些徘徊于此并想知道“我需要为PCI合规性build立什么防火墙规则? 正确的答案是:没有! PCI合规性是一组存储和检索信用卡信息的策略。 它与系统级防火墙无关。 您必须确保所有访问系统的人员都得到了适当的审计,以便在出现问题时进行审计追踪(例如,在用户loginSSH时logging用户,在用户进行SQL查询时logging用户对数据库等)。 在盒子外面的任何程序都会严格审核自己。 就是这样 – 这就是所有符合PCI要求的。 除此之外的任何东西(防火墙规则,仅限VPN访问等)都是锦上添花。

阻止ICMP时间戳是相当无关紧要的。 阅读我能find的关于这个主题的有限的信息 ,它们与被称为“现代”安全扫描程序(hahaha)检测到的…(1999)(1999)中基于时间的身份validation协议中的错误有关。 这是2016年(甚至当原来的文章发表时,它仍然是过时的),没有人使用基于时间的authentication,除了双因素authentication,但是这是与手头上的问题完全无关的事情,2FA解决scheme通常不发出networking请求。 无论如何,服务器应该与NTP保持同步,所以攻击者已经知道服务器的时间戳了。 虽然阻止这样的请求不会伤害任何我知道的事情,但这样做与PCI合规性绝对不相干。

因此,要回答原始问题,您的防火墙规则应该如下所示:

 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp --syn --dport 80 -j ACCEPT -A INPUT -p tcp --syn --dport 443 -j ACCEPT -A INPUT -p tcp --syn --dport 22 -j ACCEPT -A INPUT -p icmp --fragment -j DROP -A INPUT -p icmp --icmp-type 3 -j ACCEPT -A INPUT -p icmp --icmp-type 4 -j ACCEPT -A INPUT -p icmp --icmp-type 8 -j ACCEPT -A INPUT -p icmp --icmp-type 11 -j ACCEPT COMMIT 

如果你想变得有趣,你可以尽早的丢弃无效的端口扫描数据包。 这些规则变得杂乱无章 – 看起来很快,而且是不必要的 – 你真的关心,如果有人端口扫描你? 哦,noes – 一个端口扫描! 他们将发现三个开放的港口! 我添加了–syn只允许有效的SYN数据包通过TCP规则。 尽pipeSSH可能有一些问题(例如,如果遇到经常丢失的SSH会话,请尝试删除–syn选项)。 如果连接变为RELATED / ESTABLISHED,则第一个规则允许后续数据包通过build立的连接。 -m选项隐含-p,所以我放弃了这些。 ICMPtypes3和4是必需/必需的,8个用于ping(可选),11个用于traceroute(可选)。 碎片化的ICMP数据包只是DoS攻击的一部分。 当然,OUTPUT策略设置为ACCEPT。 最后的结果是上面的。 除了第一条规则,上面的规则和策略看起来非常好,干净,简单,易于理解和组织 – 就像服务器configuration的一切应该是一样的。

不要忘了IPv6! 你不想设置iptables而忘记ip6tables 。 对于IPv6,上述规则应该是:

 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp --syn --dport 80 -j ACCEPT -A INPUT -p tcp --syn --dport 443 -j ACCEPT -A INPUT -p tcp --syn --dport 22 -j ACCEPT -A INPUT -p icmpv6 -j ACCEPT COMMIT 

IPv6大量使用ICMP,所以阻止ICMPv6stream量目前被认为是不好的做法。 我还没有看到任何值得使用的更加严格的ICMPv6防火墙规则集,看起来并不复杂。

我亲自在生产环境中testing了IPv4和IPv6规则集,并按预期工作。 复制意大利面!