系统重启 iptables
现代Linux内核附带一个名为Netfilter的包过滤框架。 Netfilter使您可以允许,丢弃和修改进出系统的流量。 iptables用户空间命令行工具基于此功能提供了强大的防火墙,您可以通过添加规则以形成防火墙策略来对其进行配置。 iptables具有丰富的功能和巴洛克式的命令语法,可能会令人生畏。 让我们探索其中的一些,针对系统管理员可能遇到的许多情况,开发一套iptables技巧。
避免将自己锁定
方案:您将对公司的主服务器上的iptables策略规则进行更改。 您要避免将自己(甚至其他所有人)锁定在外。 (这会浪费时间和金钱,并使您的电话无法挂墙。)
提示1:开始处理iptables配置之前,请先对其进行备份。
使用以下命令备份您的配置:
/sbin/iptables-save > /root/iptables-works
/sbin/iptables-save > /root/iptables-works
提示2:更好的是,在文件名中包含时间戳。
使用以下命令添加时间戳:
/sbin/iptables-save > /root/iptables-works-`date +%F`
/sbin/iptables-save > /root/iptables-works-`date +%F`
您将获得一个文件,其名称类似于:
/root/iptables-works-2018-09-11
/root/iptables-works-2018-09-11
如果您采取了某些措施使系统无法正常工作,则可以快速恢复它:
/sbin/iptables-restore < /root/iptables-works-2018-09-11
/sbin/iptables-restore < /root/iptables-works-2018-09-11
提示#3:每次创建iptables策略的备份副本时,请创建指向名称为“ latest”的文件的链接。
ln –s /root/iptables-works-`date +%F` /root/iptables-works-latest
ln –s /root/iptables-works-`date +%F` /root/iptables-works-latest
提示4:将特定规则放在策略顶部,将通用规则放在底部。
避免在策略规则顶部使用如下通用规则:
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 22 -j DROP
您在规则中指定的条件越多,锁定自己的机会就越少。 代替上面的非常通用的规则,请使用以下内容:
iptables -A INPUT -p tcp --dport 22 –s 10.0.0.0/8 –d 192.168.100.101 -j DROP
iptables -A INPUT -p tcp --dport 22 –s 10.0.0.0/8 –d 192.168.100.101 -j DROP
该规则将( -A )附加到INPUT链上,该规则将丢弃源于IP地址192.168.100.101的TCP( -p tcp )端口22(-- dport 22 )上来自CIDR块10.0.0.0/8的所有数据包( -d 192.168.100.101 )。
有很多方法可以使您更具体。 例如,使用-i eth0会将处理限制为服务器中的单个NIC。 这样,过滤操作将不会将规则应用于eth1 。
提示5:在策略规则的顶部将您的IP地址列入白名单。
这是一种非常有效的方法,可以将您自己锁定在自己之外。 其他人,不是那么多。
iptables -I INPUT -s <your IP> -j ACCEPT
iptables -I INPUT -s <your IP> -j ACCEPT
您需要将其作为使其正常工作的第一条规则。 请记住, -我将其插入为第一条规则; -A将其追加到列表的末尾。
提示6:了解并了解您当前政策中的所有规则。
首先,没有犯错是成功的一半。 如果您了解iptables政策背后的内在原理,那么它将使您的生活更轻松。 如有必要,请绘制流程图。 还要记住:该策略的作用和应做的事情可能是两件事。
设置工作站防火墙策略
场景:您想使用限制性防火墙策略设置工作站。
提示1:将默认策略设置为DROP。
# Set a default policy of DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
提示2:为用户提供完成工作所需的最少数量的服务。
iptables规则需要允许工作站通过DHCP获取IP地址,网络掩码和其他重要信息( -p udp --dport 67:68 --sport 67:68 )。 对于远程管理,规则需要允许入站SSH(-- dport 22 ),出站邮件( --dport 25 ),DNS(-- dport 53 ),出站ping( -p icmp ),网络时间协议( --dport 123 --sport 123 ),出站HTTP(-- dport 80 )和HTTPS(-- dport 443 )。
# Set a default policy of DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
# Accept any related or established connections
-I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow all traffic on the loopback interface
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# Allow outbound DHCP request
-A OUTPUT –o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
# Allow inbound SSH
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
# Allow outbound email
-A OUTPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT
# Outbound DNS lookups
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
# Outbound PING requests
-A OUTPUT –o eth0 -p icmp -j ACCEPT
# Outbound Network Time Protocol (NTP) requests
-A OUTPUT –o eth0 -p udp --dport 123 --sport 123 -j ACCEPT
# Outbound HTTP
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
COMMIT
限制IP地址范围
场景:您公司的CEO认为员工在Facebook上花费了太多时间而没有完成任何工作。 首席执行官告诉首席信息官(CIO)关于员工在Facebook上浪费时间的事情。 首席信息官(CIO)告诉首席信息安全官(CISO)对员工浪费时间做一些事情。 最终, 您被告知员工在Facebook上浪费了太多时间,因此您必须采取一些措施。 您决定阻止所有对Facebook的访问。 首先,使用host和whois命令找出Facebook的IP地址。
host -t a www.facebook.com
www.facebook.com is an alias for star.c10r.facebook.com.
star.c10r.facebook.com has address 31.13.65.17
whois 31.13.65.17 | grep inetnum
inetnum: 31.13.64.0 - 31.13.127.255
然后使用“ CIDR到IPv4转换”页面将该范围转换为CIDR表示法。 您得到31.13.64.0/18 。 为防止外发访问www.facebook.com ,请输入:
iptables -A OUTPUT -p tcp -i eth0 –o eth1 –d 31.13.64.0/18 -j DROP
iptables -A OUTPUT -p tcp -i eth0 –o eth1 –d 31.13.64.0/18 -j DROP
按时间调节
场景:公司员工因拒绝访问Facebook而产生的强烈反对导致CEO放松了一点(这和他的行政助理提醒他,她要保持HIS Facebook页面的最新状态)。 首席执行官决定只允许在午餐时间(中午12点至下午1点)访问Facebook.com。 假设默认策略是DROP,请使用iptables的时间功能来打开访问权限。
iptables –A OUTPUT -p tcp -m multiport --dport http,https -i eth0 -o eth1 -m time --timestart 12:00 --timestart 12:00 –timestop 13:00 –d
31.13.64.0/18 -j ACCEPT
此命令设置策略以允许( -j ACCEPT )http和https( -m multiport --dport http,https )在中午( --timestart 12:00 )和13PM(-- timestop 13:00 )之间访问Facebook.com ( –d 31.13.64.0/18
按时间调节-采取2
场景:在计划内的系统维护停机期间,您需要拒绝2AM和3AM之间的所有TCP和UDP通信,以免维护任务受到传入通信的干扰。 这将需要两个iptables规则:
iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP
iptables -A INPUT -p udp -m time --timestart 02:00 --timestop 03:00 -j DROP
使用这些规则,在输入()的2AM(-- timestart 02:00 )和3AM(-- timestop 03:00 )的时间之间,拒绝( -j DROP )TCP和UDP流量( -p tcp和-p udp )。 -A INPUT )。
用iptables限制连接
场景:您的Internet连接的Web服务器正受到来自世界各地试图对其进行DoS(拒绝服务)的不良行为者的攻击。 为了减轻这些攻击,您限制了单个IP地址可以与Web服务器建立的连接数:
iptables –A INPUT –p tcp –syn -m multiport -–dport http,https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset
iptables –A INPUT –p tcp –syn -m multiport -–dport http,https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset
让我们看看该规则的作用。 如果主机在一分钟内与Web服务器( -dport http,https )建立了20 个以上 ( -connlimit-20以上 )新连接( -p tcp -syn ),请拒绝新连接( -j REJECT )并告诉连接的主机您拒绝连接( -–reject-with-tcp-reset )。
监控iptables规则
场景:由于iptables在数据包遍历链中的规则时以“首次匹配获胜”为基础进行操作,因此,频繁匹配的规则应位于策略的顶部附近,而较不频繁匹配的规则应位于底部的底部附近。 您如何知道最多或最少遍历哪些规则,以便可以在顶部或底部附近对其进行排序?
提示1:查看每个规则已被执行多少次。
使用以下命令:
iptables -L -v -n –line-numbers
iptables -L -v -n –line-numbers
该命令将列出链中的所有规则( -L )。 由于未指定链,因此将列出所有链,并显示详细输出( -v ),以数字格式( -n )显示数据包和字节计数器,每条规则的开头都有与该规则在该位置对应的行号。
使用数据包和字节计数,您可以将遍历最频繁的规则排在顶部,将遍历最少的规则排在底部。
提示2:删除不必要的规则。
哪些规则根本没有匹配? 这些将是从政策中删除的好人选。 您可以使用以下命令找出答案:
iptables -nvL | grep -v "0 0"
iptables -nvL | grep -v "0 0"
注意:这不是零之间的制表符; 零之间有五个空格。
提示3:监控发生的情况。
您想实时监视iptables的运行情况,例如top 。 使用此命令可动态监视iptables活动的活动,并仅显示正在遍历的规则:
watch --interval=5 'iptables -nvL | grep -v "0 0"'
watch --interval=5 'iptables -nvL | grep -v "0 0"'
手表运行'iptables -nvL | grep -v“ 0 0”'每五秒钟显示一次,并显示其输出的第一个屏幕。 这使您可以观察数据包和字节数随时间的变化。
iptables报告
场景:您的经理认为此iptables防火墙功能很好,但每日活动报告会更好。 有时写报告比做工作更重要。
使用数据包过滤器/防火墙/ IDS日志分析器FWLogwatch可以基于iptables防火墙日志创建报告。 FWLogwatch支持许多日志格式,并提供许多分析选项。 它生成日志文件的每日和每月摘要,使安全管理员可以腾出大量时间,更好地控制网络安全并减少不为人知的攻击。
这是FWLogwatch的示例输出:
不仅仅是接受和拒绝
从确保您在使用iptables时不会锁定自己到监视iptables到可视化iptables防火墙的活动,我们涵盖了iptables的许多方面。 这些将使您开始着手实现更多iptables提示和技巧。
系统重启 iptables