您能为iptables推荐一个很好的介绍吗?[关闭]


15

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

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

Answers:


26

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

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

大多数基本命令都非常直观,可以轻松参考联机帮助页

netfilter是启用包过滤的内核级技术,它非常先进。还有其他表可以处理数据包,转换数据包或影响路由。该iptables实用程序是用于与netfilter进行交互的userland工具。如果您想了解高级功能,建议您参考上述文档。有关基本功能的介绍,请进一步阅读。

列出所有现有规则:

iptables -L -n

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

默认表是该filter表,用于将基本防火墙规则应用于这三个链。在这三个默认链filterINPUTOUTPUTFORWARD

链条主要是自我解释。INPUT链影响进入的数据包,OUTPUT链影响本地生成的数据包,最后影响通过系统路由的任何数据包。

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

通常,对于外部防火墙,默认选择将DROP与相对REJECT,因为它减少了Internet在Internet上的可见足迹。例如,以其他方式将服务限制到特定主机的IP的可见性较低DROP

注意,-A意味着附加到链的末尾。如果您想插入顶部,可以使用-I。所有规则都是从上到下处理的。 -D删除。

DROP来自的传入数据包192.168.235.235

iptables -A INPUT -s 192.168.235.235 -j DROP

这将跳转到该DROPIP的所有协议的目标。

接受:

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,仍然建议将链中的最后一个条目也设置为a DROP

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

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

请注意,如果在不首先允许您自己进行SSH访问的情况下,在远程系统上指定了DROP for INPUT的默认策略,则可能会阻止您访问系统。如果在远程系统上,则可以指定一个临时crontab来每隔5分钟刷新一次所有规则,以作为故障保护。

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

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

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

有本机工具可以保存和还原规则。特别是iptables-saveiptables-restore。大多数现代Linux发行版saverestore一个iptables中的函数初始化提供的系统文件。

还有其他防火墙最佳实践,例如丢弃格式错误的数据包和其他类型的不良流量。这是使用诸如Shorewall之类的前端实用程序的一个优点,因为它将默认实现许多这样的策略。但是,我同意您的方法,也希望直接维护自己的规则,并且可以在没有前端的情况下实现这些相同的最佳实践。


2
刚在这里寻找一些随机iptables的东西时碰到了这个答案(我在Google之前搜索SF / SO了!),这个非常详细的答案似乎值得更多的投票支持,所以我给了它一些!
Andrew Barber 2010年

+1个不错的答案。我还要提到Debian WIKI
michal.kreuzman 2012年


1

我最近发现https://help.ubuntu.com/community/IptablesHowTo有帮助。我认为其中没有什么特别针对Ubuntu的。


我在笔记本电脑上使用Arch,但是Ubuntu Lucid Server正是要设置的任务。因此,即使不是过时的情况也可以实现(据我所知它适用于Ubuntu 8.04)。
伊万
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.