网络相关的命令工具研究报告

iptables 是什么?

iptables是Linux防火墙的基础,iptables是基于规则的防火墙系统,通常预先安装在用于控制传入和传出数据包的Unix操作系统上(Ubuntu 16.04已预装)。默认情况下,iptables在运行时并没有任何规则,我们可以在其中创建,添加,编辑规则。

虽然 netfilter/iptables IP 数据包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。iptables 组件是一种工具,也称为用户空间(userspace)。

iptables是一种IP过滤器,IP过滤器主要在TCP / IP参考堆栈的第2层(网络层)中运行。但是,iptables也可以在第3层(传输层)中工作,而今天的大多数IP过滤器实际上都具有该功能。但是根据定义,IP过滤器在第二层工作。如果IP过滤器实施严格遵循该定义,换句话说,它将只能基于其IP数据包的首部(头部)(源和目标地址,TOS / DSCP / ECN,TTL,协议等)来过滤数据包。但是,由于Iptables实现对此定义的要求不是很严格,因此它还能够根据位于数据包中更深的其他报头(传输层)(TCP,UDP等)和较浅的数据链路层(MAC源地址)过滤数据包。

 iptables的基本结构

iptables的默认结构类似于具有链的表和包含规则的链: 表 -> 链- > 规则,iptables可以定义多个表,每个表可以包含多个链。而链就是一组规则。每个规则定义了应该如何处理与规则相匹配的数据包,从而控制输入、输出或转发的数据包。

链和规则:

链就是一组规则。每个规则定义了应该如何处理与规则相匹配的数据包。当数据包匹配时,将为其指定目标,目标可以是与以下特殊值匹配的另一个链或其中之一:
ACCPET:该数据包被允许通过。
DROP:该数据包不被允许通过。
RETRUN:这意味着跳过当前链,并从调用它的链中返回到下一个规则。

表和链

1.筛选表:是iptables中的默认表,此表中的不同内置链。

   INPUT chain:INPUT Chain用于管理输入到服务器的数据包。在这里,我们可以添加规则来控制从远程到服务器的INPUT连接,可以基于端口,协议或源IP地址来阻止/允许连接。

  FORWARD chain: FORWARD chain 用于过滤传入服务器,但要转发到其他地方的数据包。

  OUTPUT chain:用于控制从服务器到外部的数据包。在这里,我们可以添加不同的规则来管理服务器的出站连接。

扫描二维码关注公众号,回复: 7976512 查看本文章

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。

4.Raw表:该表主要用于与NOTRACK目标一起配置免除连接跟踪的功能。它在具有高的优先级的netfilter hooks处注册,因此在ip_conntrack或任何其他IP表之前被调用。

它提供的内置链有:PREROUTING chain、POSTROUTING chain。

 

配置iptables 

下面将在Ubuntu系统下简单配置下iptables。
步骤一:安装iptables
1.安装iptables
Ubuntu中已经预装了iptables,此步可省略。
2.检查当前的Iptables状态
使用以下命令,您可以检查当前Iptables配置的状态。在这里-L选项用于列出所有规则,而-v选项用于列出更乏味的列表。请注意,这些选项区分大小写。
sudo iptables -L -v
这是以上命令的输出。在这里,所有三个链都设置为默认的ACCEPT策略。当前没有任何链条的规则。
以下将修改INPUT链以过滤传入流量。
步骤二:定义链规则
定义规则意味着将其添加到列表(链)中。这是使用常规选项格式化的ptables命令。我们不必全部指定。
sudo iptables -A -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no.> -j <target>
这里-A代表追加。链是指我们要附加规则的链。interface 是要在其上过滤流量的网络接口。protocol是指您要过滤的数据包的网络协议。您还可以指定port,而不是要在其上过滤流量的端口。
 1.在本地主机上启用流量
我们希望服务器上的应用程序和数据库之间的所有通信继续照常进行。
sudo iptables -A INPUT -i lo -j ACCEPT
在这里,-A选项用于将规则添加到 INPUT链,接受lo接口上的所有连接。 lo表示回送接口(loopback interface)。它用于本地主机上的所有通信,例如数据库和同一台计算机上的Web应用程序之间的通信。
 2.在HTTP,SSH和SSL端口上启用连接
我们希望我们的常规HTTP(端口80),https(端口443),ssh(端口22)连接照常继续。输入以下命令以启用它们。在以下命令中,我们使用-p选项指定了协议,并使用–dport(目标端口)选项为每种协议指定了相应的端口。
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
View Code

现在,将接受具有指定端口的所有TCP协议连接。
 3.根据源过滤数据包
如果要基于源IP地址或IP地址范围接受或拒绝数据包,则可以使用-s选项进行指定。例如,接受来自地址192.168.1.3的数据包–
sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT
可以使用带有选项DROP的类似命令从IP地址丢弃数据包。
sudo iptables -A INPUT -s 192.168.1.3 -j DROP
如果要丢弃来自某个IP地址范围的数据包,则必须使用带有-m选项的Iprange模块,并使用–src-range指定IP地址范围。
sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
4.丢弃所有其他流量
定义规则后,请丢弃所有其他流量,这一点很重要,因为它可以防止其他开放端口未经授权访问服务器。
sudo iptables -A INPUT -j DROP
sudo iptables -L -v
View Code

5.删除规则
如果要删除所有规则并从头开始,则可以使用flush命令。
sudo iptables -F
该命令删除所有当前规则。如果要删除特定规则,可以使用-D选项。首先,通过输入以下命令列出所有带有数字的规则:
sudo iptables -L --line-numbers
然后,获得带有数字的规则列表。要删除规则,在列表和规则链中指定编号。如删除两次INPUT链上的 num 为7的规则。
sudo iptables -D INPUT 7
sudo iptables -D INPUT 7
sudo iptables -L --line-numbers
View Code

步骤三:保存变更
我们创建的iptables规则保存在内存中。这意味着在重新启动时电脑时,这些规则将会被清除。可使用以下命令来长久保存iptables规则:
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

猜你喜欢

转载自www.cnblogs.com/LiScott/p/11930616.html