Answers:
这不是一个新主题,资源是无限的。
大多数基本命令都非常直观,可以轻松参考联机帮助页。
netfilter是启用包过滤的内核级技术,它非常先进。还有其他表可以处理数据包,转换数据包或影响路由。该iptables
实用程序是用于与netfilter进行交互的userland工具。如果您想了解高级功能,建议您参考上述文档。有关基本功能的介绍,请进一步阅读。
列出所有现有规则:
iptables -L -n
-n
防止iptables解析ips,从而产生更快的输出。
默认表是该filter
表,用于将基本防火墙规则应用于这三个链。在这三个默认链filter
表INPUT
,OUTPUT
和FORWARD
。
链条主要是自我解释。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
这将跳转到该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
,仍然建议将链中的最后一个条目也设置为a DROP
。
例如,要将DROP
INPUT,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-save
和iptables-restore
。大多数现代Linux发行版save
和restore
一个iptables中的函数初始化提供的系统文件。
还有其他防火墙最佳实践,例如丢弃格式错误的数据包和其他类型的不良流量。这是使用诸如Shorewall之类的前端实用程序的一个优点,因为它将默认实现许多这样的策略。但是,我同意您的方法,也希望直接维护自己的规则,并且可以在没有前端的情况下实现这些相同的最佳实践。
我最近发现https://help.ubuntu.com/community/IptablesHowTo有帮助。我认为其中没有什么特别针对Ubuntu的。