Linux - iptables详解与实例

丈夫志四海,万里犹比邻。这篇文章主要讲述Linux - iptables详解与实例相关的知识,希望能为你提供帮助。
防火墙是一种应用于网络上的过滤机制,从保护对象上可分为:主机防火墙、网络防火墙,从物理上可分为:硬件防火墙、软件防火墙。
保护对象上的分类:

  • 主机防火墙:针对于单个主机进行防护
  • 网络防火墙:往往部署于网络边界,对流入以及流出的流量进行过滤
物理上的分类:
  • 硬件防火墙:拥有经过特别设计的硬件及芯片,性能高、成本高
  • 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低、成本低
【1】简介当主机收到一个数据包后,数据包先在??内核空间???中处理。若发现目的地址是自身,则传到??用户空间??中交给对应的应用程序处理。若发现目的不是自身,则会将包丢弃或进行转发。
iptables实现防火墙功能的原理
在数据包经过内核的过程中有五处关键地方,分别是??PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING???,称为钩子函数。iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“??如果数据包头符合这样的条件,就这样处理数据包??”。
iptables中定义有5条链,说白了就是上面说的5个钩子函数。因为每个钩子函数中可以定义多条规则,每当数据包到达一个钩子函数时,iptables就会从钩子函数中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合钩子函数中任一条规则,iptables就会根据该函数预先定义的默认策略来处理数据包。
iptables定义的表
【Linux - iptables详解与实例】在每个链上都有一堆规则,但是部分规则是相似的,那我们把一些实现相同功能的规则放在一起,就能轻松的完成复用了—这就是表。
  • filter:负责过滤功能,内核模块 iptables_filter
  • nat:负责进行网络地址转换,内核模块 iptable_nat
  • mangle:拆解报文,进行修改,重新封装,内核模块 iptable_mangle
  • raw:关闭 nat 表上启用的连接追踪机制,内核模块 iptable_raw
  • security:安全相关。CentOS 7 里新增的表,暂且不介绍
表具有一定的优先级:raw–> mangle–> nat–> filter。一条链上可定义不同功能的规则,检查数据包时将根据上面的优先级顺序检查。
【2】命令与规则详解语法格式如下:
iptables(选项)(参数)

  • 选项
-t< 表> :指定要操纵的表;
-A --apend:向规则链中添加条目;
-D --delete:从规则链中删除条目;
-I --insert:向规则链中插入条目;
-R --replace:替换规则链中的条目;
-L --list:显示规则链中已有的条目;
-F --flush:清除规则链中已有的条目;
-Z --zero:清空规则链中的数据包计算器和字节计数器;
-N --new-chain:创建新的用户自定义规则链;
-P --policy:定义规则链中的默认目标;
-h --help:显示帮助信息;
-p --protocol:指定要匹配的数据包协议类型;
-s --source:指定要匹配的数据包源ip地址;
-j< 目标> --jump target:指定要跳转的目标;
-i< 网络接口> --interface:指定数据包进入本机的网络接口;
-o< 网络接口> --output:指定数据包要离开本机所使用的网络接口。

iptables命令选项输入顺序:
iptables -t 表名 < -A/I/D/R> 规则链名 [规则号] < -i/o 网卡名> -p 协议名 < -s 源IP/源子网>
--sport 源端口 < -d 目标IP/目标子网> --dport 目标端口 -j 动作

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


对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

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

动作包括:
ACCEPT:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP伪装(NAT),用于ADSL。
LOG:日志记录。

REJECT:丢弃数据包并给发送此数据包的主机发送一条icmp包来进行说明。

【iptables实例说明】##实例如下:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT


*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:168]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3389 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 8080,8081,8082,8083,8161 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

实例说明如下:
:INPUT ACCEPT [0:0]
# 该规则表示INPUT链默认策略是ACCEPT

:FORWARD ACCEPT [0:0]
# 该规则表示FORWARD链默认策略是ACCEPT

:OUTPUT ACCEPT [0:0]
# 该规则表示OUTPUT链默认策略是ACCEPT

-A INPUT -i lo -j ACCEPT
#-i 参数是指定接口,这里的接口是lo ,lo就是Loopback(本地环回接口)。
#意思就允许本地环回接口在INPUT链的所有数据通信。

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#意思是允许进入的数据包只能是刚刚我发出去的数据包的回应。
#ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#这两条的意思是在INPUT链和FORWARD链中拒绝所有其他不符合上述任何一条规则的数据包。
#并且发送一条host prohibited的消息给被拒绝的主机。

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#iptables可以使用扩展模块来进行数据包的匹配,语法就是 -m module_name。
#所以-m state 的意思是使用 state 扩展模块的功能。
#-m state --state NEW表示数据包的状态必须是NEW.


iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT
#在所有网卡上打开ping功能,便于维护和检测。

linux下操作iptables:?
?? Centos7下使用iptables
参考:??http://blog.chinaunix.net/uid-9950859-id-98279.html??



    推荐阅读