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

一、概述  

  iptables是一个防火墙的配置命令,用来设置规则,进而过滤网络数据包。

   iptables操作的是一个叫做netfilter的安全框架,这个框架的主要功能是:

  1. 网络地址转换
  2. 数据包内容修改
  3. 网络数据包的过滤

  本篇文章主要讨论如何通过iptables来配置netfilter安全框架来达到保护系统安全的目的。

二、iptables原理

2.1 表和链的概念

  因为是数据包是按照规则办事的,所以我们先谈谈支持规则所需要的数据结构。在内核中维护了表(table),每张表都包含了一连串的链(chain),链中包含了一连串的规则(rules)。数据包通过规则的检测,看是否符合规则,如果符合,就按照规则指定的行为进行下一步的操作,这些操作可以包含跳转到用户定义的规则处,或者一些特殊的值: ACCEPT, DROP 或者 RETURN。如果不符合规则,则顺序的按照链条往下寻找规则,继续匹配。

  其实我们的命令iptables主要的任务就是对这些规则进行增删改查。

2.2  表

  内核共维护了四张独立的表,使用选项: -t, --table table 可以指定查找表。表分别是:

  • raw:高级功能,如:网址过滤。
  • mangle:数据包修改(QOS),用于实现服务质量。
  • net:地址转换,用于网关路由器。
  • filter:包过滤,用于防火墙规则。

2.3 链

  一般来说,包含五条链:

  • INPUT链:处理输入数据包。
  • OUTPUT链:处理输出数据包。
  • PORWARD链:处理转发数据包。
  • PREROUTING链:用于目标地址转换(DNAT)。
  • POSTOUTING链:用于源地址转换(SNAT)。

  每条链都有多个真正用于过滤数据包的规则。数据包就是通过这种链上的规则的方式,最终被转发到用户空间或者其他的主机。

  也许会感到很奇怪,为什么要有这么多张表呢。其实是因为每张表有自己的功能,例如nat表主要负责地址的转换,而filter表主要用于包的过滤,两者结合起来才能实现功能。如下图所示:

  网络相关的命令工具研究报告-iptables_第1张图片  每张表有不同的链。raw只有PREROUTING和OUTPUT链,filter表则有INPUT、FORWORD和OUTPUT链。经过这些表上的链的规则的过滤,最终达到防火墙的功能。

三 iptables的基本命令

上面说过,其实iptable就是增删改查规则。其主要的命令如下:

-A  在指定链的末尾添加(append)一条新的规则

-D  删除(delete)指定链中的某一条规则,可以按规则序号和内容删除

-I  在指定链中插入(insert)一条新的规则,默认在第一行添加

-R  修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换

-L  列出(list)指定链中所有的规则进行查看

-E  重命名用户定义的链,不改变链本身

-F  清空(flush)

-N  新建(new-chain)一条用户自己定义的规则链

-X  删除指定表中用户自定义的规则链(delete-chain)

-P  设置指定链的默认策略(policy)

-Z 将所有表的所有链的字节和数据包计数器清零

-n  使用数字形式(numeric)显示输出结果

-v  查看规则表详细信息(verbose)的信息

-V  查看版本(version)

-h  获取帮助(help)

 

四 应用场景

4.1 ping的开放

ping可以用来测试网络的连通性,可以通过iptables的来开发对外的ping。通过如下命令:

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

4.2 防范DOS攻击

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

其中limit 25/minute指示了一分钟最多有25个连接
   limit-brust 100 指示了只有连接达到了100,才会强制执行limit 25/minute规则。

 

4.3 端口转发

  将端口转发到其他的端口去。例如将422端口转发到22端口,这意味着ssh连接请求可以连接到22号端口和422端口。

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

需要开放422端口
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

4.4 允许ssh连接

首先安装ssh服务,使用命令ps -aux | grep ssh 查看。

若没有安装,则使用apt-get install openssh-server

 

下列的规则开放22号端口,使用网卡eth0。
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables命令的应用非常的广泛,这里仅仅列出几个常用的应用。 

本次操作的环境为:iptables v1.6.1、unbuntu 18.04

 

 

  

  

你可能感兴趣的:(网络相关的命令工具研究报告-iptables)