浅谈Linux-iptables

本文参照鸟哥linux服务器篇,归纳一些知识点。

1.linux的封包过滤软件:

iptables(分析封包的表头数据,根据表头数据与定义的规则决定该封包是否进入主机或者被丢弃)

iptables只是linux防火墙的管理工具,真正实现防火墙功能的是netfilter,它是linux内核中实现包过滤的内部结构。

2.注意定义定于规则时的先后顺序

如果网络封包进入Rule1进行比对时,若符合Rule1,则会执行Action1动作,不理会后续的Rule2,Rule3.....

3.iptable的表格(table)和链(chain):

iptables顾名思义就是ip表,iptables由多个表(table)组成,每个人表用途都不一样,在每个表中又定义了多个链(chain),通过这些链可以设置相应的规则和策略。

四个表:filter、nat、mangle、raw

五个链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

一、filter表:主要跟进入linux本机的数据包有关,这个是默认的table。

二、nat表:主要与进行来源和目的之间的ip和port的转换,与linux本机无关。

三、mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现Qos。

四、raw表:决定数据包是否被状态跟踪机制处理(应用在那些不需要nat的情况下,以提高性能。如大量访问的Web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度)。

优先级:raw>mangle>nat>filter

一、INPUT链:进来的数据包应用此规则链中的策略。

二、OUTPUT链:外出的数据包应用此规则链中的策略。

三、FORWARD链:转发数据包时应用此规则链中的策略。

四、PREROUTING链:对数据包做路由选择前应用此链中的规则(所有的数据包进来的时候都由这个链处理)

五、POSTROUTING链:对数据包做路由选择后应用此链的规则(所有的数据包出来的时候都先由这个链处理)

下图是各表包含的链:

数据包的流向如下图(常用的filter和nat表的精简图):

A:封包进入linux主机使用资源。

B:封包由linux主机转递,没有使用主机资源,而是向后端主机流动。

C:封包由linux主机发出,例如相应客户端的要求。


4.iptables的语法:

一、规则的观察:

iptables  -L -n

-t:后面接table,默认是filter。

-L:列出目前的table规则。

-n:不进行ip和hostname的反查。

iptables-save -t(表名)

二、规则的清除:

iptable [-t table] [-FZX]

-F:清除规则链中已有的条目。

-X:清除所有者自定义的规则链。

-Z:清空规则链中的数据包计算器和字节计数器。

三、定义预设政策(policy):

iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

例子:

iptables -t filter INPUT ACCEPT

即修改的是iptables-save查询的结果。

*filter
:INPUT ACCEPT [321090:366632483]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [296527:33324326]
COMMIT

四、针对IP,网域、接口和端口的配置:

iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源ip/网域] [ --sport 端口] [-d 目标ip/网域] [ --dport 端口] 

-j [ACCEPT|DROP|REJECT|LOG]

-A:新增一条规则

-I:插入一条规则,默认是插入为第一条。-I 3则插入为第三条。

-i:封包所进入的网络接口,例如eth0,lo,需要与INOUT链配合。

-o:封包所出去的网络接口,需要与OUTPUT链配合。

-p:此规则链适用于那种封包格式:tcp、udp、icmp、all

-s:封包的来源。可以指定单纯的ip或包括网域 192.169.0.1 或 192.168.0.1/24

--sport:来源端口号,可以是连续的例如1:1245

-d:封包的目的地,格式同上-s

--dport:目的端口号

-j:后面接的动作,上面依次为接受、丢弃、拒绝、记录

例子:

a、接收192.168.0.0/24的包:iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT

b、丢弃192.168.0.0/24访问本机21端口的包:iptables -A INPUT -i eth0 -s 192.168.0.0/24 --dport 21 -j DROP

c、丢弃192.168.0.0/24的1到1024端口访问本机ssh端口:iptables -A INPUT -i eth0 -s 192.168.0.0/24 --sport 1:1024  --dport ssh -j DROP 

五、iptables的mac和state模块:

iptables -A INPUT  [-m state] [--state 状态]

-m:iptables的外挂模块,常见的有state(状态模块)、mac(网卡mac地址模块)

--state:数据包的状态(减少联机下写一条output规则,再写一条input规则的繁琐),主要有:

INVALID:无效的数据包,例如数据损坏的数据包。

ESTABLISHED:已经联机成功的联机状态。

NEW:想要新建立联机的封包状态。

RELATED:最常用,表示这个数据包跟我们主机发出的数据包有关。

例子:

a、已建立或相关的数据包就予以通过:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

b、局域网的aa:bb:cc:dd:ee:ff 主机开放其联机:iptables -A INPUT -m --mac--source aa:bb:cc:dd:ee:ff -j ACCEPT

六、针对icmp数据包的规则:

iptables -A INPUT [-p icmp] [--icmp--type 类型]  -j ACCEPT

猜你喜欢

转载自blog.csdn.net/u013181216/article/details/80470828