iptables:

ipchains iptables 的前身 2.2内核

iptables 基于数据包过滤的 2.4内核


硬件防火墙,价格相对于高。linux内核+iptables实现ui界面就可以实现。


iptables -t   filter     -A INPUT     -P TCP --dport 23    -j ACCEPT


命令          指定表      指定链        对数据包的描述      处理方式


4个表5个链,表是链的容器,链是规则的容器。


filter   过滤表    对数据包进行过滤 3个链 INPUT OUTPUT FORWARD(路过的) 默认表是filter。

nat  SNAT DNAT 转换表 PREROUTING=路由前 POSTROUTING=路由后 OUTPUT=输出(很少用到)

mangle 矫正表 打标记 INPUT OUTPUT FORWARD PREOUTING POSTROUTING

raw

mangle  > nat >filter     PREROUTING > (INPUT > OUTPUT)/FORWARD) > POSTROUTING

规则的顺序

                           包进入

                #mangle     PREROUTING

                 nat        PREROUTING

                        路由判断

mangle  INPUT                          mangle  FORWARD

filter  INPUT                          filter  FORWARD

    本地进程

    路由判断

mangle  OUTPUT

nat     OUTPUT

filter  OUTPUT

               #mangle     POSTROUTING

                nat        POSTROUTING

                       包送出


以本地为目标的包

mangle   PREROUTING   标记,TTL,TOS

NAT      PREROUTING    DNAT

                路由判断 决定包的去向

mangle         INPUT  矫正

filter         INPUT  过滤

                     到达本地程序

以本地为源的包

本地程序产生数据包

路由判断              决定包使用的源地址,外出接口

mangle   OUTPUT       矫正

nat      OUTPUT       DNAT操作

filter   OUTPUT       过滤

mangle   POSTROUTING  矫正

nat      POSTROUTING  SNAT

离开本地


被转发的包


nat  PREROUTING  DNAT

路由判断         数据包是发往本地还是转发

filter   FORWARD  过滤

NAT      POSTROUTING SNAT



ACCEPT   允许

DROP     丢弃

REJECT   拒绝


command

-A  在所选的链末尾添加规则,如果源地址或目的地址是以名字而不是ip的形式指定的,如果名字会被解析成多个地址,则此规则会和所有的可用地址结合

-D  在所选的链中删除规则

    iptables -D INPUT --dport 80 -j DROP (通过规则内容删除)  

    iptables -D INPUT 3(通过编号删除)

-R  在所选的链中替换规则,必须指定条数

    iptables -R INPUT 1 -s 192.168.0.1 -j DROP

-I  插入规则 iptables  -I INPUT 1 --dport 80 -j ACCEPT   不指定条数的话,默认是1.

-L  list 查看规则 没有指定表,默认是filter ,没有指定链,默认是列出所有链。

-F  清空规则。没有指定链,则清空指定表中的所有链,没有指定表,则清空默认表的。

-Z  清空计数器。

-N  新建一个链

-X  删除一个链。前提是链是空的,没有别的链指向(调用)它。 没有指定的话,删除所有自定义链。

-P  修改默认规则

   iptables -P FORWARD DROP 。

-E  对自定义的链改名。


options

-v 显示详细信息 一般结合L A D I R 使用

-x 精确的

-n 数值形式显示内容

--line-numbers 显示规则序号

-c 指定计数器的值

--modeprobe 指定加载的模块


通用匹配

-p 匹配指定的协议 协议名不区分大小写,可以使用对应的整数值(icmp=1 tcp=6 udp=17)默认all=0=   (tcp udp icmp) 可以是协议列表udp,tcp加 !表示取反, ! 两边有空格

  iptables -A  INPUT -p 6(tcp)

-s 匹配源地址 iptables -A -s ! 192.168.1.0/24

-d 匹配目的地址

-i 以包进入本地的接口来匹配 INPUT FORWARD PREROUTING

  iptables -A INPUT -i eth0/+  (+ 匹配所有接口 ! eth0)

-o 以包离开本地的接口来匹配

-f 匹配ip碎片 iptables -A INPUT ! -f


隐含匹配

TCP

--sport  匹配源端口 不加选项的话,默认是所有端口 iptables -A INPUT -p tcp --sprot 22:80

--dport  匹配目的端口

--tcp-flags  匹配TCP标记 iptables -A INPUT -p tcp --tcp-flags ! SYN,FIN,ACK SYN

--syn    iptables -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN

--tcp-option iptables -A INPUT -p tcp --tcp-option 16


UDP

--sport

--dport


ICMP

--icmp-type iptables -A INPUT -p icmp --icmp-type 8


使得只有192.168.0.x 和192.168.0.y 的机器可以连接您的pop3服务器。但同一网段的其他人不行。

设置缺省策略为INPUT 和OUTPUT拒绝全部,但:允许你对你自己的ip地址(192.168.0.11和127.0.0.1)进行任何访问.

只允许某2人即两台主机可以telnet 你,例如其中一台为192.168.0.123

允许某2人每秒钟ping你1次

允许您主动访问任何人

Test01 用户可以使用自己的ip地址作测试用途,但不能访问其他的任何ip

Test02 用户可以访问任意地址

定义一个自定义规则,对所有访问您23端口的动作进行日志