Linux_iptables

Linux:网络防火墙

    netfilter:Frame

    iptables:    生成防火墙规则,并附加到netfilter上实现数据报文过滤  NAT  mangle等规则生成的工具

TCP有限状态机

    LISTEN:等待客户端发起请求

    SYN_SENT:客户端发送SYN

    SYN_RECEIVED:服务器端收到SYN报文

    ESTABLISHED:已经建立连接

    FIN_WAIT1:等待对方的确认

    CLOSE_WAIT:服务器响应客户机的FIN,等待关闭

    LAST_ACK:服务器向客户机发送FIN,等待客户机的最后一次确认

    CLOSING:等待关闭连接,客户机最后一次向服务器发送ACK,确保服务器可以收到ACK的过程

    CLOSED:双方收到FIN的ACK确认,断开连接

防火墙:硬件,软件:规则(匹配标准、处理办法)

    工作在网络的边界,对进、出的数据报文按照预先定义好的规则进行检查,一旦发现按照相应规则处理

Framework:

    默认规则:

       开放:堵

       关闭:通

规则:匹配标准

    IP:源IP、目标IP

    TCP:sport/dport,SYN=1 FIN=0 RST=0 ACK=0

    UDP:sport/dport

    ICMP:icmp-type                 ping   echo-request   echo-reply

数据报文过滤 

Linux 2.0

    ipfw/firewall

Linux 2.2

    ipchain/firewall

Linux 2.4

    iptables/netfilter

hook function:钩子函数

    input

    output

    forward

    prerouting

    postrouting

    规则链:

       PREROUTING

       INPUT

       FORWARD

       OUTPUT

       POSTROUTING

filter(过滤)表

    INPUT

    FORWARD

    OUTPUT

nat(地址转换)表

    PREROUTING

    POSTROUTING

    OUTPUT

mangle(修改报文首部)表

    PREROUTING

    INPUT

    FORWARD

    OUTPUT

    POSTROUTING

raw表

    PREROUTING

    OUTPUT

数据包匹配流程

    PREROUTING:raw---mangle---nat

    INPUT:mangle----filter

    FORWARD:mangle--------filter

    OUTPUT:raw---mangle---nat----filter

    POSTROUTING:mangle----postrouting

用户可以自定义链,但只能是在被调用时才可以使用,如果自定义链中没有存在任何匹配规则,还应该有返回机制

用户可以删除自定义链,但不允许删除非空链

默认链无法删除

每个规则都有两个内置的计数器

    记录被匹配的报文个数

    记录被匹配的报文的大小

规则=匹配标准+处理动作

iptables [ -t table ] COMMAND CHAIN [num] 匹配标准 -j 处理办法

匹配标准:

    通用匹配

    扩展匹配(必须启用netfilter模块)

       隐含扩展:不用特别指明由哪个模块进行的扩展,此时使用-p {tcp|udp|icmp}

       显式扩展:必须指定使用哪个模块,通过iptables的-m选项完成

通用匹配:

    -s,--src   指定源IP

    -d,--dst   指定目的IP

    -p { tcp | udp | icmp }  指定协议

    -i  INTERFACE  指定数据报文流入的接口,一般用在PREROUING  INPUT  FORWARD链

    -o  INTERFACE  指定数据报文流出的接口,一般用在OUTPUT  POSTROUTING  FORWAD链

扩展匹配

  隐含扩展

    -p tcp

       --sport PORT:源端口

       --dport PORT:目的端口

       --tcp-flags mask compare

           --tcp-flags  SYN,FIN,ACK,RST SYN,ACK   将检查SYN/FIN/RST/ACK这4个标志位,只允许SYN,ACK为1

       --syn  匹配SYN标志位为1的数据

    -p icmp

       --icmp-type

           类型0:echo-reply

           类型8:echo-request
    - p udp

       --sport

       --dport

处理办法:

    ACCEPT 允许通过

    DROP   丢弃

    REJECT 丢弃

    DNAT   转换目的IP

    SNAT   转换源IP

    REDIRECT   端口重定向

    MASQUERADE    作PAT

    LOG    记录日志

    MARK   打标记

COMMAND命令:

    管理规则

       -A CHAIN:附加一条规则,添加在链的尾部

       -I CHAIN [num]:插入一条规则,插入在对应CHAIN的第num条

       -D CHAIN num:删除指定链中的第num条规则

       -R CHAIN num:替换指定的规则 

    管理链

       -F [CHAIN]:清空指定链的所有规则,如果省略CHAIN,则实现删除对应表中的所有链

       -P CHAIN { ACCEPT | DROP }:设置指定链的默认策略

       -N NEW_CHAIN:自定义新的空链

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

       -Z:将指定链中的所有规则中的计数器置零

       -E OLD-CHAIN-NAME NEW-CHAIN-NAME:重命名自定义的链

    查看

         -L  显示指定表中的所有规则

           -n:以数字格式显示主机地址、端口号

           -v:显示详细信息(计数器)

           -x:显示计数器的精确值

           --line-numbers:显示规则号码

iptables基础练习:

    1、查看nat表中的所有规则

      iptables -t nat -nL

    2、查看filter表中所有的规则

      Iptables -filter -nL

    3、将nat表中的所有链的默认策略修改为DROP

    4、在INPUT链中添加一条拒绝源IP为172.16.1.10/24进入本机的规则

    5、在INPUT链中添加一条允许源IP为172.16.1.0/24进入本机的规则

    6、在INPUT链中最前方加入一条允许192.168.1.1访问本机10.1.1.1的规则

    7、在INPUT链中的第2个位置插入一条规则,允许从本机eth0网卡进入数据,

    8、替换INPUT链中第2条规则

    9、删除INPUT链中第3条规则

    10、清空INPUT链中所有的规则

iptables不是服务,但有服务脚本,服务脚本的主要作用在于管理保存的规则

    装载及移除iptables/netfilter相关的内核模块

       iptables_nat,iptables_filter,iptables_mangle,iptables_raw,ip_nat,ip_conntrack

也可以打开/etc/sysconf/iptables

# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

 

posted @ 2016-08-01 14:35  我当道士那儿些年  阅读(700)  评论(0编辑  收藏  举报