我必须在Linux服务器上设置防火墙(我以前的经验都是在Windows上)。 我的规则是相当简单的 – 禁止所有,允许一些端口与所有,允许一些特定的IP子网端口,而networking是小而复杂的(每个主机的IP至less有2 192.168 …网,每个人都可以互连许多不同的方式)。 我认为使用iptables包装可以过度复杂的逻辑上引入许多不必要的实体的系统,它会更好地保持简单,直接使用iptables。
你能推荐一个很好的介绍如何写iptables规则吗?
在Netfilter网站上存在官方和推荐文档的链接。
这不是一个新课题,资源是无限的 。
大多数基本的命令都相当直观,可以很容易地引用到联机帮助页面 。
netfilter,这是内核级技术,使数据包过滤,是相当先进的。 还有其他表格可能会破坏数据包,翻译数据包,并影响路由。 iptables实用程序是与netfilter交互的userland工具。 如果你想了解高级function,我build议你参考前面提到的文档。 有关基本function的介绍,请进一步阅读。
要列出所有现有的规则:
iptables -L -n
-n防止iptablesparsingips,从而产生更快的输出。
默认表是filter表,这是用来将基本的防火墙规则应用到三个链中的filter表。 filter表中的三个默认链是INPUT , OUTPUT和FORWARD 。
链条很大程度上是自我解释的。 INPUT链影响进入的数据包,OUTPUT链会影响本地生成的数据包,最后FORWARD用于通过系统路由的任何数据包。
在你可以指定的目标中,你可以DROP数据包,这意味着简单地忽略和不回应。 您可以REJECT数据包,其中icmp响应将被发送到拒绝的来源。 最后,你可以ACCEPT它们,这允许数据包继续路由。
通常使用面向外部的防火墙,默认的select是DROP而不是REJECT ,因为它减less了Internet上可见的networking占用空间。 例如,否则将服务限制到特定主机的IP将会降低DROP可见性。
注意, -A意味着追加到链的末尾。 如果你想插入顶部,你可以使用-I 。 所有规则都从上到下进行处理。 -D删除。
丢弃来自192.168.235.235的传入数据包:
iptables -A INPUT -s 192.168.235.235 -j DROP
这将跳转到来自该IP的所有协议的DROP目标。
接受:
iptables -A INPUT -s 192.168.235.235 -j ACCEPT
要阻止从本地服务器或networking访问该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标志指定。 即使您将您的策略设置为默认DROP ,仍然build议您将链中的最终条目也设置为DROP 。
例如,要将策略更改为INPUT,FORWARD和OUTPUT链的DROP :
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
要小心 ,如果您在远程系统上指定DROP的默认策略为INPUT而没有首先允许您自己进行SSH访问,则可能会阻止您访问系统。 如果在远程系统上,您可以指定一个临时crontab来每隔5分钟刷新一次所有规则作为故障安全。
要删除所有规则并允许所有stream量:
iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -X iptables -F
请注意, -X删除所有创build的链。 -F刷新所有规则。
有本地工具来保存和恢复规则。 特别是iptables-save和iptables-restore 。 大多数现代Linux发行版在系统提供的iptables init文件中具有save和restorefunction。
还有其他防火墙的最佳做法,如丢弃畸形数据包和其他types的不良stream量。 这是使用Shorewall等前端工具的一个优点,因为默认情况下它将实现许多这样的策略。 不过,我同意你的做法,宁愿直接维护我自己的规则,这些最好的做法也可以在没有前端的情况下实施。
我发现https://help.ubuntu.com/community/IptablesHowTo最近有帮助。 我不认为有什么特别的Ubuntu特定的。
Iptables教程