iptables 是什么?
iptables是Linux防火墙的基础,iptables是基于规则的防火墙系统,通常预先安装在用于控制传入和传出数据包的Unix操作系统上(Ubuntu 16.04已预装)。默认情况下,iptables在运行时并没有任何规则,我们可以在其中创建,添加,编辑规则。
iptables是一种IP过滤器,IP过滤器主要在TCP / IP参考堆栈的第2层(网络层)中运行。但是,iptables也可以在第3层(传输层)中工作,而今天的大多数IP过滤器实际上都具有该功能。但是根据定义,IP过滤器在第二层工作。如果IP过滤器实施严格遵循该定义,换句话说,它将只能基于其IP数据包的首部(头部)(源和目标地址,TOS / DSCP / ECN,TTL,协议等)来过滤数据包。但是,由于Iptables实现对此定义的要求不是很严格,因此它还能够根据位于数据包中更深的其他报头(传输层)(TCP,UDP等)和较浅的数据链路层(MAC源地址)过滤数据包。
iptables的基本结构
iptables的默认结构类似于具有链的表和包含规则的链: 表 -> 链- > 规则,iptables可以定义多个表,每个表可以包含多个链。而链就是一组规则。每个规则定义了应该如何处理与规则相匹配的数据包,从而控制输入、输出或转发的数据包。
链和规则:
表和链
1.筛选表:是iptables中的默认表,此表中的不同内置链。
INPUT chain:INPUT Chain用于管理输入到服务器的数据包。在这里,我们可以添加规则来控制从远程到服务器的INPUT连接,可以基于端口,协议或源IP地址来阻止/允许连接。
FORWARD chain: FORWARD chain 用于过滤传入服务器,但要转发到其他地方的数据包。
OUTPUT chain:用于控制从服务器到外部的数据包。在这里,我们可以添加不同的规则来管理服务器的出站连接。
2.NAT表:网络地址转换(NAT)是这样一种方法,它用于在Internet协议(IP)数据报报头(首部)在通过流量路由设备传输时修改网络地址信息,以将一个IP地址空间重新映射到另一个IP地址空间。NAT表的默认内置链为:
PREROUTING chain: 顾名思义,用于在路由之前更改传入的数据包,即在数据包传入时立即更改。
POSTROUTING chain:它在路由完成后转换数据包。即:在数据包将要发出之前更改它。
OUTPUT chain:用于在路由之前更改本地生成的数据包。
3.Mangle表:该表用于分组交替。不同的内置链是:PREROUTING chain、POSTROUTING chain、INPUT chain、OUTPUT chain、FORWARD chain。
它提供的内置链有:PREROUTING chain、POSTROUTING chain。
配置iptables
sudo iptables -L -v
sudo iptables -A -i <interface> -p-s
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT
sudo iptables -A INPUT -s 192.168.1.3 -j DROP
sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
sudo iptables -F
sudo iptables -L --line-numbers
sudo iptables -D INPUT 7 sudo iptables -D INPUT 7 sudo iptables -L --line-numbers
sudo /sbin/iptables-save
此命令将当前规则保存到系统配置文件中。该文件用于在重新引导时重新配置表。每次更改规则时,都应运行此命令。若要重置规则,只需 flush 所有规则并保存变更。
sudo iptables -F
sudo /sbin/iptables-save
总之:上述步骤,简单介绍并配置了iptables。值得注意的是,iptables只能控制ipv4流量,不适用于ipv6网络,ipv6网络须使用ip6tables设置规则。
参考资料:https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html