首页 > 代码库 > Linux之iptables

Linux之iptables

  一:何为iptables

   iptables 准确来说应该叫做网络防火墙规则生成器,工作在网络层,真正的网络防火墙是有iptables和netfilter组成,netfilter工做在内核当中。

  二:iptables的表与链

  1. Filter表---------- 过滤作用

Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链: 

INPUT链 – 处理来自外部的数据。匹配目的ip是本机的数据包

OUTPUT链 – 处理向外发送的数据。匹配从本机出去的数据包

FORWARD链 – 将数据转发到本机的其他网卡设备上。匹配通过本机的数据包,从外部来,通过本机,又转发到外部

  2. NAT表------------ 做网络地址转换的(network address translator)

NAT表有三种内建链:

PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。用于修改目的地址 destination nat

POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。用于修改源地址 source nat

OUTPUT链 – 处理本机产生的数据包。


  3. Mangle表--------Mangle表用于指定如何处理数据包。

它能改变TCP头中的QoS位。Mangle表具有5个内建链:
PREROUTING
OUTPUT
FORWARD
INPUT
POSTROUTING


  4. Raw表-------关闭nat表上启用连接追踪功能

它具有两个内建链
preroutting
output

wKioL1P0k2nhgbA4AAFT8RoHt2A859.jpg



iptables做路由转发功能时要打开





三:iptables命令格式

iptables  [-t 表名]  管理选项  [链名]  [条件匹配]  [-j 目标动作或跳转]

管理选项

-A或—append <链名> 在规则列表的最后增加1条规则
-I或--insert <链名> 在指定的位置插入1条规则,根据给出的规则序号向所选链中插入规则。如果序号为1,规则会被
插入链的头部,默认序号就是1。
-D或--delete <链名> 从规则列表中删除1条规则
-R或--replace <链名> 替换规则列表中的某条规则
-P或--policy <链名> 定义默认策略
-F或--flush <链名> 删除表中所有规则,如果没有指定链,则清空指定表中的所有链。如果什么都没有指定,就清空
默认表所有的链。
-Z或--zero <链名> 将表中数据包计数器和流量计数器归零
-L或--list <链名> 查看iptables规则列表,显示所选链的所有规则。如果没有指定链,则显示指定表中的所有链。如
果什么都没有指定,就显示默认表所有的链。
例:iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 21 -j DROP在表filter的FORWARD链序号为1的位置插
入一条拒绝来源IP地址为192.168.1.0网段通过tcp协议访问的目标端口为21的数据包。

条件匹配

  1)通用匹配规则

-s 源地址(source)

指定数据包的源地址
参数可以使IP地址、网络地址、主机名
例如:-s 192.168.1.101指定IP地址
例如:-s 192.168.1.10/24指定网络地址
如果不指定-s参数,就代表所有地址
还可以使用–src或者–source

-d 目的地址(destination)
指定目的地址
参数和-s相同
还可以使用–dst或者–destination
如:... -d 192.168.1.101

-o 输出(out interface)
-o代表”output interface”
-o指定了数据包由哪个接口输出
这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链
如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
如果出现! -o eth0,那么将从eth0以外的接口输出
如果出现-i eth+,那么将仅从eth开头的接口输出
还可以使用–out-interface参数

-i 输入接口(input interface)
-i代表输入接口(input interface)
-i指定了要处理来自哪个接口的数据包
这些数据包即将进入INPUT, FORWARD, PREROUTE链
例如:-i eth0指定了要处理经由eth0进入的数据包
如果不指定-i参数,那么将处理进入所有接口的数据包
如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包
如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包
还可以使用–in-interface参数

-p 协议(protocol)
指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。
如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。
可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols
还可以使用–protocol参数代替-p参数
如:... -p tcp  ; -p udp

 2)扩展匹配

    隐式扩展

-–sport 源端口(source port)针对 -p tcp 或者 -p udp
缺省情况下,将匹配所有端口
可以指定端口号或者端口名称,例如”-–sport 22″与”-–sport ssh”。
/etc/services文件描述了上述映射关系。
从性能上讲,使用端口号更好
使用冒号可以匹配端口范围,如”–sport 22:100″
还可以使用”–source-port”如:... -p tcp --sport 22

–-dport 目的端口(destination port)针对-p tcp 或者 -p udp
参数和–sport类似
还可以使用”–destination-port”如:... -p udp --dport 53

-–tcp-flags TCP标志 针对-p tcp
可以指定由逗号分隔的多个参数
有效值可以是:SYN, ACK, FIN, RST, URG, PSH
可以使用ALL或者NONE

-–icmp-type ICMP类型 针对-p icmp
–icmp-type 0 表示Echo Reply
–icmp-type 8 表示Echo


  显示扩展


四:清空查看iptables

 清空iptables

在配置iptables之前,你通常需要用iptables --list命令或者iptables-save命令查看有无现存规则,因为有时需要删
除现有的iptables规则:
iptables --flush 或者 iptables -F 
这两条命令是等效的。但是并非执行后就万事大吉了。你仍然需要检查规则是不是真的清空了,因为有的linux发行版
上这个命令不会清除NAT表中的规则,此时只能手动清除
iptables -F INPUT   #清空filter表INPUT链中的所有规则
iptables -t nat -F PREROUTING
iptables -t nat vxnL PREROUTING
--# v: 显示详细信息
--# x: 在v的基础上,禁止自动单位换算
--# n: 只显示IP地址和端口号码,不显示域名和服务名称
iptables -L                   查看规则

  保存iptables

iptables-save > /etc/iptables.rules




本文出自 “slayer” 博客,请务必保留此出处http://slayer.blog.51cto.com/4845839/1542805