您能推荐一个关于 iptables 的好介绍吗?

您能推荐一个关于 iptables 的好介绍吗?

我必须在 Linux 服务器上设置防火墙(我之前的所有经验都是在 Windows 上)。我的规则非常简单 - 禁止所有端口,允许所有端口,允许特定 IP 子网的某些端口,而网络虽小但很复杂(每个主机至少在 2 个 192.168... 网络中有 IP,每个人都可以通过许多不同的方式互连)。我认为使用 iptables 包装器会使系统在逻辑上过于复杂,引入许多不必要的实体,最好保持简单并直接使用 iptables。

您能推荐一个关于如何编写 iptables 规则的好的快速介绍吗?

答案1

官方和推荐链接文档存在于 Netfilter 网站上。

这不是一个新主题,资源是无限

大多数基本命令都相当直观,可以轻松参考手册页

netfilter 是实现数据包过滤的内核级技术,非常先进。它还包含其他表,可以破坏数据包、转换数据包,并以其他方式影响路由。该iptables实用程序是与 netfilter 交互的用户空间工具。如果您想了解高级功能,我建议您参考上述文档。有关基本功能的介绍,请继续阅读。

列出所有现有规则:

iptables -L -n

-n防止 iptables 解析 ips,从而产生更快的输出。

默认表是filter表,用于将基本防火墙规则应用于三个链。filter表中的三个默认链分别是INPUTOUTPUTFORWARD

这些链基本上是不言自明的。INPUT 链影响传入的数据包,OUTPUT 链影响本地生成的数据包,最后 FORWARD 链影响通过系统路由的任何数据包。

在您可以指定的目标中,您可以指定DROP数据包,这意味着只是忽略而不响应。您可以REJECT指定数据包,其中将向拒绝源发送 icmp 响应。最后,您可以指定ACCEPT它们,这允许数据包继续路由。

通常,对于面向外部的防火墙,默认选项是DROP而不是REJECT,因为它会减少网络在互联网上的可见足迹。例如,原本将服务限制到特定主机的 IP 在 下可见性会较低DROP

注意,-A表示附加到链的末尾。如果希望插入到顶部,可以使用-I。所有规则都从上往下处理。 -D表示删除。

对于DROP来自以下来源的传入数据包192.168.235.235

iptables -A INPUT -s 192.168.235.235 -j DROP

这将跳转到DROP来自该 IP 的所有协议的目标。

接受:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

要阻止本地服务器或网络访问该 IP,请执行以下操作:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

您可以指定-p协议、-s数据包的源、-d数据包的目标、目标端口--dport、源端口--sport以及许多其他标志,这些标志将影响规则处理数据包的方式。

如果您的默认INPUT策略是DROP,并且您希望允许 192.168.123.0/24子网中的每个人都可以访问您服务器上的 SSH,以下是示例:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

没错,你可以使用CIDR 表示法也!

一般来说,最好的默认策略是DROP适用于所有链。每个链都有一个默认策略,由标志指定-P。即使您将策略设置为 default DROP,仍然建议将链中的最后一项DROP也设置为 a 。

例如,将DROPINPUT、FORWARD 和 OUTPUT 链的策略更改为:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

当心,如果您在远程系统上指定 INPUT 的默认策略 DROP 而没有首先允许自己进行 SSH 访问,则可能会阻止自己访问系统。如果在远程系统上,您可以指定一个临时 crontab,每 5 分钟刷新一次所有规则作为故障保护。

删除所有规则并允许所有流量:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

注意,-X删除所有创建的链。 -F刷新所有规则。

有本机工具可以保存和恢复规则。特别是iptables-saveiptables-restore。大多数现代Linux发行版在系统提供的iptables init文件中都有save和功能。restore

还有其他防火墙最佳实践,例如丢弃格式错误的数据包和其他类型的不良流量。这是使用前端实用程序的一个优势,例如岸墙因为它会默认实施其中许多政策。不过,我同意你的方法,也更愿意直接维护我自己的规则,而且这些相同的最佳实践可以在没有前端的情况下实施。

答案2

答案3

我发现https://help.ubuntu.com/community/IptablesHowTo最近很有用。我不认为其中有任何内容是专门针对 Ubuntu 的。

相关内容