你能推荐一个关于如何编写iptables规则的快速介绍吗?
解决方法
大多数基本命令都非常直观,可以很容易地参考manpage.
netfilter是支持数据包过滤的内核级技术,非常先进.还有其他表可以破坏数据包,转换数据包,否则会影响路由. iptables实用程序是用于与netfilter交互的用户空间工具.如果您想了解高级功能,建议您参考上述文档.有关基本功能的介绍,请进一步阅读.
列出所有现有规则:
iptables -L -n
-n防止iptables解析ips,从而产生更快的输出.
默认表是过滤器表,用于将基本防火墙规则应用于三个链.过滤器表中的三个默认链是INPUT,OUTPUT和FORWARD.
这些链很大程度上是自我解释的INPUT链影响进入的数据包,OUTPUT链影响本地生成的数据包,最后FORWARD用于路由通过系统的任何数据包.
在您可以指定的目标中,您可以DROP数据包,这意味着只需忽略而不响应.您可以拒绝数据包,其中icmp响应将被发送到拒绝源.最后,您可以接受它们,这允许数据包继续路由.
通常使用面向外部的防火墙,默认选择是DROP而不是REJECT,因为它减少了Internet上可见的网络占用空间.例如,以其他方式限制对特定主机的服务的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
要阻止从本地服务器或网络访问该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 notation!
一般来说,最好的默认策略是所有链的DROP.每个链都有一个默认策略,由-P标志指定.即使您将策略设置为默认DROP,仍建议将链中的最终条目设置为DROP.
例如,要将INPUT,FORWARD和OUTPUT链的策略更改为DROP:
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
请注意,如果在没有首先允许自己访问SSH的情况下在远程系统上为INPUT指定DROP的默认策略,则可能会阻止自己访问系统.如果在远程系统上,您可以指定临时crontab以每5分钟刷新所有规则作为故障保护.
删除所有规则并允许所有流量:
iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -X iptables -F
注意,-X删除所有创建的链. -F刷新所有规则.
有一些本机工具可以保存和恢复规则.特别是,iptables-save和iptables-restore.大多数现代Linux发行版都在系统提供的iptables init文件中保存和恢复功能.
还有其他防火墙最佳做法,例如丢弃格式错误的数据包和其他类型的不良流量.这是使用前端实用程序(如Shorewall)的一个优点,因为它默认会实现许多这些策略.尽管如此,我同意您的方法,并且更愿意直接维护自己的规则,并且可以在没有前端的情况下实现这些相同的最佳实践.