理论内容需要画图比较麻烦,在此略过 ,主要是希望通过以下内容能够快速了解iptables  基本状况和使用,利用于面试或快速了解,请坚持看完,不要因为有很多参数英文就不看了 

    内核版本的不同iptables的名称也不尽相同 ,以下是各内核版本的iptables的名称,当然使用起来也大相庭径。

Linux/2.0: ipfw

Linux/2.2: ipchains

Linux/2.4: iptables


    这里主要说下2.4以后的内版本中的iptables。

    iptables 主要是为了书写规则,真正来完成执行操作的是netfilter,它是存在于内核的防火墙框架 ,在整个的网络过程中的不同位置放置了一些检测点(hook)。可以说规则就是定义到这些检测点上的。

    iptables 有4个内置表,分别是filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理常用的是filter和nat,mangle偶尔会用到 raw则不常用。有五个内置链:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING。

    简单的说下表中包含的链的对应

        filter:   INPUT, FORWARD, OUTPUT

nat:     PREROUTING, POSTROUTING, OUTPUT

mangle:    PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

raw:     PREROUTING, OUTPUT


    iptable的主要规则属性主要是为了对以下网络传输内容进行过滤。

1、网络层协议属性:ip     2、传输层协议属性:tcp   udp   icmp

    上面的你没有看懂没有关系通俗说就是 我在iptables的四个表中的其中某个链中设置些规则,它会去检查通过我这里的网络包,按照我写的内容去把这些网络报文包拒绝转发等等,这么说应该理解了吧,上面的英文只是为了让你知道表跟链的对应关系。

        每个链都有其默认策略:policy(策略) ACCEPT(一般默认都是允许通过的),通常只需要修改filter表的默认策略。

        仔细看下 filter中有三个链,就是是所谓的规则,一个是入口的,一个是出口的,还有个是转发的,上面说了他们的默认都是允许通过的。

        大致的我们清楚了,就简单的看下 我们怎么使用这些命令来操作。

iptables 

大写字母选项:子命令

小写字母选项:用来匹配标准及其它;

-t {filter|nat|mangle|raw}  指定使用那个表不写默认是filter

-L: list

-n: 数字格式显示IP和PORT; 

-v: 详细信息, -vv, -vvv

--line-numbers: 显示链中规则的行号;

-x: 显示精确值,不要做单位换算;

        

我们简单的举个栗子:

      #iptables -t filter -L -n   ###查看filter 中链列表 ,我们上面说了他有三个规则链都会显示出里面设定的规则  另外注意的是要记得使用-n  否则会通过DNS解析成域名 或者转换成协议名称  ,如果你的DNS慢,那显示的就慢   


上面的会使用了吧?一定看会了在往下面看

我们知道了怎么查看我的表中的规则了,下面

其它子命令:

管理链: 

-F: 清空链

iptables -F

-P: 设定默认策略

iptables -t filter -P INPUT {DROP|ACCEPT}(下面有介绍)

-X: 删除自定义的空链;

-Z: 计算器清零(清楚的是链中的收发字节数);

iptables -Z 

-E: 重命名自定义链

       

管理规则:

-A: append(增加)

-I [n]: 插入为第n条规则

-D [n]: 删除第n条规则

-R [n]: 替换第n条规则


上面的命令都是都是对表中的链里面的规则进行管理的,通俗说就是增删查改,多练习几次就会了

我们在看下iptables的语法命令  怎么组成的 

编写规则语法:

iptables [-t 表] 大写选项子命令 [规则号] 链名 匹配标准 -j 目标


目标:

DROP: 丢弃

REJECT:

ACCEPT

RETURN

REDIRECT: 端口重定向

DNAT

SNAT

MASQUERADE

LOG

--log-prefix "STRING:"

不要因为一大堆英文就晕了,我们常用的只有两个 一是drop  二是 accept

有些人可能知道用REJECT  也是拒绝的意思  建议大家不要用,为什么呢?就好比别人跟你说他喜欢你,你不理他也就算了。。。如果你直接说你拒绝,可能明天你回家的小路上就白刀子进红刀子出了。。。做个低调的人吧。   


我们学会了增删查改之后,下面就该对规矩进行设定了下面是规则匹配的命令:

    匹配标准:

通用匹配

-s|--src|--source [!] IP/NETWORK

-d|--dst|--destination [!] IP/NETWORK

iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -j ACCEPT

-i incoming_interface: 指定数据报文流入接口; INPUT, PREROUTING, FORWARD

-o outing_interface: 指定数据报文流出接口;OUTPUT, POSTROUTING, FORWARD

-p {tcp|udp|icmp}

我知道了怎么委婉的拒绝,怎么删除查看规则链等,他们要匹配相应的网段等等。。。就使用上面的参数  从哪个网卡口出去进入

 


练习:放行对web服务的访问:

iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -j ACCEPT

iptables -A OUTPUT -s 172.16.100.1 -p tcp --sport 80 -j ACCEPT

记住写完之后要对规则进行保存  service iptables save

或者使用iptable-save > /other/path/file   将配置文件保存到其他地方

/etc/sysconfig/iptables   默认你写好的规则是保存在这个地方,你如果认真看多联系下,我想你已经掌握了iptables的基本操作了。


编写的时候一定注意使用别把自己干掉了,自己上不去如果是虚拟机还好,如果是机房那就麻烦了,这里教大家一个小技巧  可以提前写好   at 任务  十分钟关闭防火墙,这样不至于在写错后无法登陆等问题。