系统管理员常用的16个iptables技巧

浮华发布于:2021-07-01阅读:0

iptables提供强大的功能来控制进出系统的流量。

现代Linux内核附带了一个名为Netfilter的包过滤框架。Netfilter可以允许,删除和修改进出系统的流量。iptables用户空间命令行工具以此功能为基础,提供强大的防火墙,可以通过添加规则来配置防火墙以形成防火墙策略。iptables因其丰富的功能和巴洛克式命令语法而非常令人生畏。让我们探讨其中的一些为系统管理员可能遇到许多情况的一套iptables技巧和窍门。

避免锁定自己

场景:你将对公司主服务器上的iptables策略规则进行更改。你想避免锁定自己 ,可能还有其他所有人。(这会花费时间和金钱,导致半夜手机响起。)

iptables 提示#1:在开始处理iptables配置之前先备份它。

使用以下命令备份配置:


  1. /sbin/iptables-save>/root/iptables-works

提示#2:更好的方法是,在文件名中包含一个时间戳。

使用以下命令添加时间戳:


  1. /sbin/iptables-save>/root/iptables-works-`date+%F`

你得到一个名称如下的文件:


  1. /root/iptables-works-2018-09-11

如果你做了阻止系统工作的事情,你可以快速恢复它:

提示#3:每次创建iptables策略的备份副本时,都要在名称中创建一个指向“latest”的文件的链接。


  1. ln–s/root/iptables-works-`date+%F`/root/iptables-works-latest

提示#4:将特定规则放在底部的策略和通用规则的顶部。

避免在策略规则的顶部使用这样的通用规则:


  1. iptables-AINPUT-ptcp--dport22-jDROP

在规则中指定的条件越多,锁定自己的机会就越少。而不是上面的非常通用的规则,使用这样的内容:


  1. iptables-AINPUT-ptcp--dport22–s10.0.0.0/8–d192.168.100.101-jDROP

此规则将(-A)附加到INPUT链中,规则将DROP任何源自TCP(-p tcp)端口22( - 端口22)上的CIDR块10.0.0.0/8的数据包发往IP地址192.168.100.101 (-d 192.168.100.101)。

有很多方法可以更具体。例如,使用-i eth0会将处理限制为服务器中的单个NIC。这样,过滤操作将不会将规则应用于eth1。

提示#5:在策略规则顶部将你的IP地址列入白名单。

这是一种不会锁定自己的非常有效的方法。


  1. iptables-IINPUT-s-jACCEPT

需要将此作为其正常工作的第一条规则。 记住,-I将其作为第一条规则插入; -A将其附加到列表的末尾。

提示#6:了解并理解当前的所有规则。

首先不犯错误就是成功的一半。如果了解iptables策略背后的内部工作原理,它将使你的生活更轻松。如果必须,绘制流程图。 还要记住:策略的作用和应该做的事情可能是两件不同的事情。

设置工作站防火墙策略

场景:你希望设置具有限制性防火墙策略的工作站。

提示#1:将默认策略设置为DROP。


  1. #SetadefaultpolicyofDROP

  2. *filter

  3. :INPUTDROP[0:0]

  4. :FORWARDDROP[0:0]

  5. :OUTPUTDROP[0:0]

提示#2:允许用户完成工作所需的最少量服务。

iptables规则需要允许工作站通过DHCP获取IP地址,网络掩码和其他重要信息(-p udp --dport 67:68 --sport 67:68)。对于远程管理,规则需要允许入站SSH(--dport 22),出站邮件(--dport 25),DNS( - export 53),出站ping(-p icmp),网络时间协议(--dport 123 --sport 123),以及出站HTTP(--dport 80)和HTTPS(--dport 443)。


  1. #SetadefaultpolicyofDROP

  2. *filter

  3. :INPUTDROP[0:0]

  4. :FORWARDDROP[0:0]

  5. :OUTPUTDROP[0:0]

  6.  

  7. #Acceptanyrelatedorestablishedconnections

  8. -IINPUT1-mstate--stateRELATED,ESTABLISHED-jACCEPT

  9. -IOUTPUT1-mstate--stateRELATED,ESTABLISHED-jACCEPT

  10.  

  11. #Allowalltrafficontheloopbackinterface

  12. -AINPUT-ilo-jACCEPT

  13. -AOUTPUT-olo-jACCEPT

  14.  

  15. #AllowoutboundDHCPrequest

  16. -AOUTPUT–oeth0-pudp--dport67:68--sport67:68-jACCEPT

  17.  

  18. #AllowinboundSSH

  19. -AINPUT-ieth0-ptcp-mtcp--dport22-mstate--stateNEW-jACCEPT

  20.  

  21. #Allowoutboundemail

  22. -AOUTPUT-ieth0-ptcp-mtcp--dport25-mstate--stateNEW-jACCEPT

  23.  

  24. #OutboundDNSlookups

  25. -AOUTPUT-oeth0-pudp-mudp--dport53-jACCEPT

  26.  

  27. #OutboundPINGrequests

  28. -AOUTPUT–oeth0-picmp-jACCEPT

  29.  

  30. #OutboundNetworkTimeProtocol(NTP)requests

  31. -AOUTPUT–oeth0-pudp--dport123--sport123-jACCEPT

  32.  

  33. #OutboundHTTP

  34. -AOUTPUT-oeth0-ptcp-mtcp--dport80-mstate--stateNEW-jACCEPT

  35. -AOUTPUT-oeth0-ptcp-mtcp--dport443-mstate--stateNEW-jACCEPT

COMMIT

限制IP地址范围

场景:贵公司的首席执行官认为员工在Facebook上花费了太多时间而没有完成任何工作。 首席执行官告诉CIO要对员工在Facebook上浪费时间做些什么。 首席信息官告诉CISO要对员工在Facebook上浪费时间做些什么。 最后,你被告知员工在Facebook上浪费了太多时间,你必须对此做些什么。 你决定阻止对Facebook的所有访问。首先,使用host和whois命令查找Facebook的IP地址。


  1. host-tawww.facebook.com

  2. www.facebook.comisanaliasforstar.c10r.facebook.com.

  3. star.c10r.facebook.comhasaddress31.13.65.17

  4. whois31.13.65.17|grepinetnum

  5. inetnum:31.13.64.0-31.13.127.255

然后使用CIDR到IPv4转换页面将该范围转换为CIDR表示法。 你得到31.13.64.0/18。 要阻止对www.facebook.com的传出访问,请输入:


  1. iptables-AOUTPUT-ptcp-ieth0–oeth1–d31.13.64.0/18-jDROP

按时间设置规则

场景:拒绝公司员工访问Facebook的强烈反对导致首席执行官放松一点(这和他的行政助理提醒他,她让HIS Facebook页面保持最新状态)。首席执行官决定仅在午餐时间(中午12点至下午1点)允许访问Facebook.com。 假设默认策略是DROP,请使用iptables的时间功能打开访问权限。


  1. iptables–AOUTPUT-ptcp-mmultiport--dporthttp,https-ieth0-oeth1-mtime--timestart12:00--timestart12:00–timestop13:00–d

  2. 31.13.64.0/18-jACCEPT

此命令将策略设置为允许(-j ACCEPT)http和https(-m multiport --dport http,https)在中午(--timestart 12:00)和13PM(--timestop 13:00)之间到Facebook.com (-d 31.13.64.0/18)。

按时间调整-Take 2

场景:在计划的系统维护停机期间,需要在凌晨2点到凌晨3点之间拒绝所有TCP和UDP流量,这样维护任务就不会受到传入流量的干扰。 这将采取两个iptables规则:


  1. iptables-AINPUT-ptcp-mtime--timestart02:00--timestop03:00-jDROP

  2. iptables-AINPUT-pudp-mtime--timestart02:00--timestop03:00-jDROP

根据这些规则,TCP和UDP流量(-p tcp和-p udp)在输入的2AM(--timestart 02:00)和3AM(--timestop 03:00)之间被拒绝(-j DROP)( - IUPUT)。

限制与iptables的连接

场景:你的互联网连接的Web服务器受到来自世界各地的不良攻击,他们试图使用DoS(拒绝服务)。要减轻这些攻击,你可以限制单个IP地址与Web服务器之间的连接数:


  1. iptables–AINPUT–ptcp–syn-mmultiport-–dporthttp,https–mconnlimit-–connlimit-above20–jREJECT-–reject-with-tcp-reset

让我们来看看这条规则的作用。如果主机在一分钟内向Web服务器(-dport http,https)发出超过20个(--connlimit-大于20)个新连接(-p tcp -syn),则拒绝新连接(-j REJECT),并告诉连接主机你拒绝连接(--reject-with-tcp-reset)。

监控iptables规则

场景:由于iptables在链条中遍历规则,因此iptables在“首次匹配获胜”的基础上运行,因此经常匹配的规则应该接近策略的顶部,而不太频繁匹配的规则应该接近底部。 你怎么知道哪些规则最多或最少,所以可以在顶部或底部附近订购?

提示#1:查看每个规则被击中的次数。

使用此命令:


  1. iptables-L-v-n–line-numbers

该命令将列出链中的所有规则(-L)。由于没有指定链,所有链都将列出详细输出(-v),显示数字格式的数据包和字节计数器(-n),每个规则开头的行号对应于该规则在链中的位置。

使用数据包和字节计数,您可以将最常访问的规则排序到顶部,将最不频繁遍历的规则排在最后。

提示#2:删除不必要的规则。

哪些规则根本没有获得任何匹配? 这些将是从政策中删除的良好候选人。你可以用这个命令找到它:


  1. iptables-nvL|grep-v"00"

注意:这不是零之间的标签; 零之间有五个空格。

提示#3:监控正在发生的事情。

不想要实时监控iptables的情况,例如top。 使用此命令动态监视iptables活动的活动,并仅显示正在遍历的规则:


  1. watch--interval=5'iptables-nvL|grep-v"00"'

看跑'iptables -nvL | grep -v“0 0”'每五秒钟显示一次输出的第一个屏幕。 这使可以观察数据包和字节数随时间的变化。

关于iptables的报告

场景:你的经理认为这个iptables防火墙的东西很棒,但每日活动报告会更好。有时写报告比做工作更重要。

使用数据包过滤器/防火墙/ IDS日志分析器FWLogwatch根据iptables防火墙日志创建报告。 FWLogwatch支持许多日志格式并提供许多分析选项。 它生成日志文件的每日和每月摘要,使安全管理员可以节省大量时间,更好地控制网络安全,并减少未被注意的攻击。

以下是FWLogwatch的示例输出:

不仅仅是ACCEPT和DROP

我们已经涵盖了iptables的许多方面,从确保在使用iptables监视iptables以可视化iptables防火墙的活动时确保你没有锁定自己。这些将让你开始实现更多的iptables提示和技巧。

 

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:shawn.lee@vecloud.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

本站原创内容未经允许不得转载,或转载时需注明出处:https://news.kd010.com/fwqjs/48.html

TAG标签:iptables

上一篇:互联网人应该懂的技术,CDN和负载均衡
下一篇:聊一聊IPv4转IPv6隧道

相关文章

返回顶部