Iptables介绍和实用使用方法

一、简介

1)---> IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统,在redhat7.1 centos7.1以上都内置装有

2)---> iptables 的最大优点是它可以配置有状态的防火墙有四种有效状态,名称分别为 ESTABLISHED 、 INVALID 、 NEW 和 RELATED。

 -状态 ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。

 -状态INVALID指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后, 

 -RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。

3)---> iptables 的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。

4)---> Iptables 是用来设置、维护和检查Linux内核的IP包过滤规则的同时iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。 

二  、iptables的结构和使用

--iptables表、链结构图

Iptables介绍和实用使用方法_第1张图片 

1)有四张表raw、mangle、nat、filter,都有独立的相应链表。

2)包过滤匹配流程(规则链内的匹配顺序)

  -顺序比对,匹配即停止(LOG除外)

  -若无任何匹配,则按该链的默认策略处理

 

3)iptables基本用法

  -iptables  [-t 表名] 选项 [链名(大写)] 条件 [-j 目标操作(大写)]

例:[root@pc88 ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT

 

A.注意事项/整体规律

-可以不指定表,默认为filter表

-可以不指定链,默认为对应表的所有链

-除非设置默认策略,否则必须指定匹配条件

-选项/链名用大写字母/目标操作用大写字母,其余都小写

 

B.常见目标操作:

  ACCEPT:允许通过/放行

  DROP:直接丢弃,不给出任何回应

  REJECT:拒绝通过,必要时会给出提示

  LOG:记录日志,然后传给下一条规则

 

C.常用的iptables命令选项

Iptables介绍和实用使用方法_第2张图片 

补充:iptables -X 清除预设表filter中使用者自定链中的规则(清除默认规则)

4)规则管理示

  -iptables的默认配置文件路径:/etc/sysconfig/iptables

  -用iptables命令添加规则后要使用service iptables save命令后才能永久保存

  -systemctl restart iptables.service 或 service iptables restart重启iptables服务

A.添加新规则

[root@pc88 ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT  //允许接收tcp协议进来的数据包

(在表filter的INPUT链中追加规则)(-A末尾追加这条规则)

[root@pc88 ~]# iptables -I INPUT -p udp -j ACCEPT    //允许接收udp协议进来的数据包

(没写表名时,默认是指filter)(在INPUT规则表中行插入这条规则)

[root@pc88 ~]# iptables -I INPUT 2 -p icmp -j ACCEPT   //允许接收icmp协议进来的数据包

(没写表名时,默认是指filter)(在INPUT规则表中第2行插入这条规则)

 

B.查看规则

[root@pc88 ~]# iptables -nL -t nat    //查看nat 的全部规则表

[root@pc88 ~]# iptables -nL POSTROUTING -t nat   //查看nat表中POSTROUTING链的规则表

[root@pc88 ~]# iptables -L POSTROUTING -t nat --line-numbers  //以规则序号的方式查看

 

C.删除、清空规则

   -D删除规则 -F清空规则

[root@pc88 ~]# iptables -D INPUT 1 -t filter  

//删除表filter中INPUT链的第1条规则(-t filter没写时,默认为filter表)

[root@pc88 ~]# iptables -D POSTROUTING 2 -t nat 

//删除表nat中POSTROUTING链中的第2条规则

   -F清空规则(分别清空四个表,第一个默认为filter表)

[root@pc88 ~]# iptables -F       

[root@pc88 ~]# iptables -t nat -F

[root@pc88 ~]# iptables -t mangle -F

[root@pc88 ~]# iptables -t raw -F

 

D.设置默认规则

  当用户添加的规则都不匹配时,为匹配默认规则

  所有链的始默认规则均为ACCEPT(接收状态)

  通过-P选项可重置默认规则,常用两种状态ACCEPT或DROP

[root@pc88 ~]# iptables -t nat -P POSTROUTING DROP

//将nat表中POSTROUTING链默认规则设置为DROP(弃包状态)

[root@pc88 ~]# iptables -t filter -P INPUT ACCEPT

//将filter表中INPUT链默认规则设置为ACCEPT(接收状态)

 

E.常见的防火墙设置类型:主机型和网络型

    根据防火墙保护的对象不同,防火墙可以分为主机型防火墙与网络型防火墙,如图所示。

主机型防火墙,主要保护的是服务器本机(过滤威胁本机的数据包)。

网络防火墙,主要保护的是防火墙后面的其他服务器,如web服务器、FTP服务器等。

Iptables介绍和实用使用方法_第3张图片 

F.常见的扩展条件类型

前提条件:有对应的防火墙模块支持

基本用法:

  -m 扩展模块 --扩展条件 条件值

   示列:-m mac --mac-source 00:0D:33:88:BC:66

 Iptables介绍和实用使用方法_第4张图片

 

实用案例1

功能:拒绝某主机的访问,锁定该主机的MAC地址,这样不管变成什么IP都无法访问本机

[root@pc88 ~]# iptables -A INPUT -m mac --mac-source 00:0D:33:88:BC:66 -j DROP

 

实用案例2

功能:一条规则开放多个端口

[root@pc88 ~]# iptables -A INPUT -p tcp -m multiport --dports 21:23,25,80,110,16500:16800 -j ACCEPT

//先指定大的协议如tcp,然后再指定扩展协议

//21:23指21到23间的所有端口,16500:16800同理,不连续的用,分开

 

实用案例3

功能:根据IP范围指定可以访问本机相关端口的IP段(例如SSH远程登陆本机)

  -先写允许访问的IP段,然后再写禁止IP段

[root@pc88 ~]# iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.8.20-192.168.8.60 -j ACCEPT

//先写允许20-60间的主机可以通过22端口远程访问本机

[root@pc88 ~]# iptables -A INPUT -p tcp --dport 22 -s 92.168.4.0/24 -j DROP

//当进来的IP不符合第一条规则时,会开始中匹配第二条,就在第二条上执行禁止4.0/24网段的访问。相当于只允许第一条的人访问。

 

实用案例4

功能:通过iptables实现局域网内不同网段间的两台主机的互联网共享.

假如A主机IP192.168.0.5/192.168.2.5(双网卡)可以上网,B主机IP192.168.2.100不能上网

  -首先确保A和B要能相互ping通,A主机能上网

  -然后把B主机的IP网关设置成192.168.2.5,DNS设置成和主机A的DNS一样

  -开始添加修改主机A的iptables规则

[root@pca ~]# echo 0 > /proc/sys/net/ipv4/ip_forward

//echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf

//修改/etc/sysctl.conf配置文件,可以实现永久有效规则

//首先开启主机A的路由转发功能

[root@pca ~]# iptables -t nat -A POSTROUTING -s 192.168.2.100 -p tcp --dport 80 -j SNAT --to-source 192.168.0.5

//将主机B访问主机A的80端口上的数据转发到主机A另一个能访问外网的网卡上ip是192.168.0.5 ,其中-p tcp --dport 80 可以不写,就变成访问A的所有端口数据都转到ip为192.168.0.5的网卡上,借由这个网卡再加上路由功能转的开启,从而实现连接外网。

  

实用案例5

功能:实现A可以ping能B,B无法ping通A(只是回应拒绝访问)

[root@pca ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT

//在主机A上添加上面规则

 

实用案例6

功能:实现禁止路由访问代理服务器后面的服务器主机

  -在代理服务器开启路由转发的前提下

[root@server ~]# iptables -I FORWARD -s 192.168.2.200 -p tcp --dport 80 -j DROP

//192.168.2.200是要访问server的客户机,当客户机通过server访问80转发端口时丢弃数据包

 

实用案例7

[root@pc88 ~]#iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

//如上例,添加一条入站规则:对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过!

//ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。

 

实用案例8

//防止骇客使用洪水攻击

[root@pc88 ~]#iptables -A INPUT -m limit --limit 3/hour

//说明 用来比对某段时间内封包的平均流量,上面的例子是用来比对:每小时平均流量是

否超过一次 3 个封包。 除了每小时平均次外,也可以每秒钟、每分钟或每天平均一次,

默认值为每小时平均一次,参数如后: /second、 /minute、/day。 除了进行封数量的

比对外,设定这个参数也会在条件达成时,暂停封包的比对动作,以避免因骇客使用洪水

攻击法,导致服务被阻断

 

 

你可能感兴趣的:(Iptables介绍和实用使用方法)