Linux系统防火墙iptables

详述iptables五链

防火墙程序是工作在内核的TCP/IP的网络协议栈的框架之上,通过网络过滤可以实现入侵检测及入侵防御的功能。
凡是到达本机内部来的数据包我们都将其按照某种规则进行转发,凡是要从本机内部出去的将其按照另外一种规则进行转发,另外凡是经过本机转发的我们按照对应的转发规则转发的机制就是防火墙框架。
防火墙的框架就是在内核的TCP/IP协议栈中精心设置了几个卡点,对于数据包必流经的位置设置了几个钩子函数:这些卡点的位置如进口或出口处,如有一个人要进入我们的领域,我们在大门口放一台钩机,进来之前先用钩机将其钩起,然后一条一条的进行规制匹配,匹配通过了就放进来,匹配不通过的就直接扔掉。
Linux系统上的防火墙是由iptables/netfilter组成,其中iptables是规则的制定工具,netfilter在内核协议框架中定义了5个卡点位置,并在这5个位置通过钩子函数对进出的数据包进行过滤,从而达到防火墙的功能。iptables工具工作在用户控件,他可以制定一些规则然后送到内核空间,然后结合netfilter的钩子函数及处理方法对数据包进行放行或者拒绝处理。

  • 5个钩子(hook function)的位置如下图:


    5钩图.png
  • hook function :
    • prerouting: 流入的数据包进入路由表之前
    • input:通过 路由表判断后目的是本机,然后进入本机内部资源
    • forward:通过路由表判断后目的地不是本机,然后通过路由转发到其他地方
    • output:由本机产生的数据向外部转发
    • postrouting:传出的数据包到达网卡出口之前
  • 在每个钩子上对应的有五个链,用于添加匹配规则,名称和钩子相同,但是都必须用大写来标识:
    • PREROUTING
    • INPUT
    • FORWARD
    • OUTPUT
    • POSTROUTING
  • 防火墙里面有多个table,每个表格里面都定义许多规则,并且每个表的用途不同,iptables按用途个功能将其分为四个表,这四个表又由五个链组成,这五个链对应五个钩子函数。
  • 这四个表分别是filter、nat、mangle、raw,默认为filter;表的处理优先级一次是:raw、mangle、nat、filter;每个表的功能:
    • filter:一般用于过滤功能,防火墙
    • nat:用于修改源IP或目标IP,也可以修改端口
    • mangle:拆解报文,做出修改并重新封装起来,对特定数据包修改(使用情况很少)
    • raw:关闭natbiao上启用的连接追踪机制
  • 四个表中每个表多对应的链分别为:
    • FILTER: INPUT、OUTPUT、FORWARD
    • NAT: PREROUTING、 POSTROUTING 、 FORWARD
    • MANGLE: INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING
    • RAW: PREROUTING、 OUTPUT
  • 报文流向
    • 流入本机:PREROUTING --> INPUT
    • 由本机流出:OUTPUT --> POSTROUTING
    • 转发:PREROUTING --> FORWARD --> POSTROUTING
iptables /netfilter规则:
  • 组成部分:根据规则的匹配条件来尝试匹配报文,一旦匹配成功,就由规则定义的处理动作做出处理;
    • 匹配条件:
      • 基本匹配条件:内建
      • 扩展匹配条件:由扩展模块定义;
    • 处理动作:
      • 基本处理动作:内建
      • 扩展处理动作:由扩展模块定义;
      • 自定义处理机制:自定义链
  • iptables的链:内置链和自定义链
    • 内置链:对应于hook function
    • 自定义链接:用于内置链的扩展和补充,可实现更灵活的规则管理机制;
  • 添加规则时的考量点:
    <1> 要实现那种功能:判断添加在哪个表上;
    <2> 报文流经的路径:判断添加在哪个链上;
  • 链上的规则在匹配的过程中是有次序的,即为检查次序,因此在制定时要遵循以下法则:
    <1> 同类规则(访问同一应用),匹配范围小的放上面;
    <2> 不同类的规则(访问不同应用),匹配到报文频率较大的放在上面;
    <3> 将那些可由一条规则描述的多个规则合并起来;
    <4> 设置默认策略;

iptables命令:

高度模块化,由诸多扩展模块实现其检查条件或处理动作的定义;其扩展模块路径:/usr/lib64/xtables; IPv4的模块为libipt_,libxt_;
IPv6的模块为libip6t_;
规则格式:
iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

  • -t table:
>   raw, mangle, nat, [filter]默认
  • COMMAND:

    • 链管理:
      • -N:new, 自定义一条新的规则链;
      • -X: delete,删除自定义的规则链;
        注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
      • -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
        ACCEPT:接受
        DROP:丢弃
        REJECT:拒绝
      • -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
    • 规则管理:
      • -A:append,追加;
      • -I:insert, 插入,要指明位置,省略时表示第一条;
      • -D:delete,删除;
        (1) 指明规则序号;
        (2) 指明规则本身;
      • -R:replace,替换指定链上的指定规则;
      • -F:flush,清空指定的规则链;
      • -Z:zero,置零;
        iptables的每条规则都有两个计数器:
        (1) 匹配到的报文的个数;
        (2) 匹配到的所有报文的大小之和;
    • 查看:
      • -L:list, 列出指定鏈上的所有规则;
      • -n:numberic,以数字格式显示地址和端口号;
      • -v:verbose,详细信息;
        -vv, -vvv
      • -x:exactly,显示计数器结果的精确值;
      • --line-numbers:显示规则的序号;
  • chain:

    • PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
  • 匹配条件:

    • 基本匹配条件:无需加载任何模块,由iptables/netfilter自行提供;
      • [!] -s, --source address[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或范围;
      • [!] -d, --destination address[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或范围;
        所有地址:0.0.0.0/0
      • [!] -p, --protocol protocol
        protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or "all"
        {tcp|udp|icmp}
      • [!] -i, --in-interface name:数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT和FORWARD链;
      • [!] -o, --out-interface name:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD、OUTPUT和POSTROUTING链;
  • 扩展匹配条件:
    • 隐式扩展:在使用-p选项指明了特定的协议时,无需再同时使用-m选项指明扩展模块的扩展机制;
      • 隐式扩展:不需要手动加载扩展模块;因为它们是对协议的扩展,所以,但凡使用-p指明了协议,就表示已经指明了要扩展的模块;
        • tcp:
          [!] --source-port, --sport port[:port]:匹配报文的源端口;可以是端口范围;
          [!] --destination-port,--dport port[:port]:匹配报文的目标端口;可以是端口范围;
          [!] --tcp-flags mask comp
          mask is the flags which we should examine, written as a comma-separated list,例如 SYN,ACK,FIN,RST
          comp is a comma-separated list of flags which must be set,例如SYN
          例如:“--tcp-flags SYN,ACK,FIN,RST SYN”表示,要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0;
          [!] --syn:用于匹配第一次握手,相当于”--tcp-flags SYN,ACK,FIN,RST SYN“;
        • udp
          [!] --source-port, --sport port[:port]:匹配报文的源端口;可以是端口范围;
          [!] --destination-port,--dport port[:port]:匹配报文的目标端口;可以是端口范围;
        • icmp
          [!] --icmp-type {type[/code]|typename}
          echo-request:8
          echo-reply:0
    • 显式扩展:必须使用-m选项指明要调用的扩展模块的扩展机制;
      • 显式扩展:必须要手动加载扩展模块, [-m matchname [per-match-options]];必须使用-m选项指明要调用的扩展模块的扩展机制;
        • 1、multiport
          This module matches a set of source or destination ports. Up to 15 ports can be specified. A port range (port:port) counts as two ports. It can only be used in conjunction with one of the following protocols: tcp, udp, udplite, dccp and sctp.
          以离散或连续的 方式定义多端口匹配条件,最多15个;
          • [!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口;
          • [!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;
        • 2、iprange
          以连续地址块的方式来指明多IP地址匹配条件;
          • [!] --src-range from[-to]
          • [!] --dst-range from[-to]
        • 3、time
          This matches if the packet arrival time/date is within a given range.
          • --timestart hh:mm[:ss]
          • --timestop hh:mm[:ss]
          • [!] --weekdays day[,day...]
          • [!] --monthdays day[,day...]
          • --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
          • --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
          • --kerneltz:使用内核配置的时区而非默认的UTC;
        • 4、string
          This modules matches a given string by using some pattern matching strategy.
          • --algo {bm|kmp}
          • [!] --string pattern
          • [!] --hex-string pattern
          • --from offset
          • --to offset
        • 5、connlimit
          Allows you to restrict the number of parallel connections to a server per client IP address (or client address block).
          • --connlimit-upto n
          • --connlimit-above n
            ~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
        • 6、limit
          This module matches at a limited rate using a token bucket filter.
          • --limit rate[/second|/minute|/hour|/day]
          • --limit-burst number
            ~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT
            限制本机某tcp服务接收新请求的速率:--syn, -m limit
        • 7、state
          The "state" extension is a subset of the "conntrack" module. "state" allows access to the connection tracking state for this packet.
          • [!] --state state
            • INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.
              NEW: 新连接请求;
              ESTABLISHED:已建立的连接;
              INVALID:无法识别的连接;
              RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;
              UNTRACKED:未追踪的连接;
          • state扩展:
            • 内核模块装载:
              nf_conntrack
              nf_conntrack_ipv4
            • 手动装载:
              nf_conntrack_ftp
          • 追踪到的连接:
            /proc/net/nf_conntrack
          • 调整可记录的连接数量最大值:
            /proc/sys/net/nf_conntrack_max
          • 超时时长:
            /proc/sys/net/netfilter/timeout
  • 处理动作(跳转目标):
    • -j targetname [per-target-options]
      • 简单target:
        ACCEPT, DROP
      • 扩展target:
        REJECT
        This is used to send back an error packet in response to the matched packet: otherwise it is equivalent to DROP so it is a terminating TARGET, ending rule traversal.
        • --reject-with type
          The type given can be icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreach‐ able, icmp-net-prohibited, icmp-host-prohibited, or icmp-admin-prohibited (*), which return the appropriate ICMP error message (icmp-port-unreachable is the default).
      • LOG
        Turn on kernel logging of matching packets.
        • --log-level
        • --log-prefix
          默认日志保存于/var/log/messages
    • RETURN:
      返回调用者;
      自定义链做为target:
   #多端口匹配mulitport示例:
   #放行ssh服务端口22,以便xshell可以连接到服务器
  [root@localhost ~]# iptables -A INPUT  -s 192.168.1.0/24 -d 192.168.1.106 -p tcp --dport 22 -j ACCEPT
  [root@localhost ~]# iptables -A OUTPUT -s 192.168.1.106 -d 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT 
   #设置默认规则为拒绝
  [root@localhost ~]# iptables -A INPUT -d 192.168.1.106 -j REJECT
  [root@localhost ~]# iptables -A OUTPUT -s 192.168.1.106 -j REJECT 
   #多端口匹配示例
  [root@localhost ~]#  iptables -I INPUT 1 -d 192.168.1.106 -p tcp -m multiport --dports 21,53,80,139,445 -j ACCEPT
  [root@localhost ~]#  iptables -I OUTPUT 1 -s 192.168.1.106 -p tcp -m multiport --sports 21,53,80,139,445 -j ACCEPT
    #在另外一台192.168.1.107主机上测试本机开放的端口80
  [root@localhost ~]#   curl http://192.168.1.106
    <h1>192.168.1.106</h1>
    hello gay

...

    #iprange使用示例:
    [root@localhost ~]#iptables -I INPUT 3 -d 192.168.1.106 -p tcp --dport 23 -m iprange --src-range 192.168.1.107-192.168.1.110 -j ACCEP
     [root@localhost ~]#iptables -I OUTPUT 3 -s 192.168.1.106 -p tcp --sport 23 -m iprange --dst-range 192.168.1.107-192.168.1.110 -j ACCEP
     
     #使用192.168.1.107的主机telnet测试服务器
     [root@localhost ~]# telnet 192.168.1.106 23
     Trying 192.168.1.106...
     Connected to 192.168.1.106.
     Escape character is '^]'.
     Kernel 3.10.0-693.el7.x86_64 on an x86_64
     localhost login: 

...

     #time示例:
     [root@localhost ~]# iptables -R INPUT 3 -d 192.168.1.106 -p tcp -m iprange --src-range 192.168.1.107-192.168.1.110 -m time --timestart 10:00:00 --timestop 16:00:00 --weekdays 1,2,3,4,5 --kerneltz -j ACCEPT
     [root@localhost ~]# iptables -R OUTPUT 3 -s 192.168.1.106 -p tcp -m iprange --dst-range 192.168.1.107-192.168.1.110 -m time --timestart 10:00:00 --timestop 16:00:00 --weekdays 1,2,3,4,5 --kerneltz -j ACCEPT
     
     #使用192.168.1.107telnet测试
     [root@localhost ~]# telnet 192.168.1.106 23
     Trying 192.168.1.106...

...

    #string示例:(只对明文编码的生效)
    [root@localhost ~]# curl http://192.168.1.106
    <h1>192.168.1.106</h1>
    hello gay
    #添加规则过滤gay
    [root@localhost ~]# iptables -I OUTPUT -s 192.168.1.106 -m string --algo kmp --string "gay" -j REJECT
    #添加规则后重新访问被拒绝
    [root@localhost ~]# curl http://192.168.1.106
    |

...

    #connlimit并发连接限制:
    [root@localhost ~]# iptables -I INPUT 2 -s 192.168.0.0/16 -d 192.168.1.106 -p tcp --dport 3306 -j ACCEPT
    [root@localhost ~]# iptables -I OUTPUT 2 -d 192.168.0.0/16 -s 192.168.1.106 -p tcp --sport 3306 -j ACCEPT
    #先放行3306端口后修改此条规则,限制并发访问数量为2
    [root@localhost ~]# iptables -R INPUT 2 -s 192.168.0.0/16 -d 192.168.1.106 -p tcp --dport 3306 -m connlimit --connlimit-upto 2 -j ACCEPT
    [root@localhost ~]# iptables -R OUTPUT 2 -d 192.168.0.0/16 -s 192.168.1.106 -p tcp --sport 3306 -m connlimit --connlimit-upto 2 -j ACCEPT
    #分别使用192.168.1.107-192.168.1.109三台主机测试,前2台连接mysql数据库正常
    [root@localhost ~]# mysql -utest -h192.168.1.106 -pmagedu
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    ...
    MariaDB [(none)]> 
    #使用192.168.1.109主机已经连接不上
    [root@localhost ~]# mysql -utest -h192.168.1.106 -pmagedu
    ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.106' (110)

...

    #limit 速率限制示例:
    [root@localhost ~]# iptables -I INPUT 3 -d 192.168.1.106 -s 192.168.1.0/24 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 20/minute -j ACCEPT
    [root@localhost ~]# iptables -R OUTPUT 3 -s 192.168.1.106 -d 192.168.1.0/24 -p icmp -m state --state ESTABLISHED -j ACCEPT
    #使用107的主机ping测试
    [root@localhost ~]# ping 192.168.1.106
    PING 192.168.1.106 (192.168.1.106) 56(84) bytes of data.
    64 bytes from 192.168.1.106: icmp_seq=1 ttl=64 time=31.1 ms
    64 bytes from 192.168.1.106: icmp_seq=2 ttl=64 time=1.56 ms
    64 bytes from 192.168.1.106: icmp_seq=3 ttl=64 time=0.903 ms
    64 bytes from 192.168.1.106: icmp_seq=4 ttl=64 time=0.837 ms
    64 bytes from 192.168.1.106: icmp_seq=5 ttl=64 time=1.88 ms
    64 bytes from 192.168.1.106: icmp_seq=8 ttl=64 time=0.751 ms
    64 bytes from 192.168.1.106: icmp_seq=11 ttl=64 time=0.869 ms
    64 bytes from 192.168.1.106: icmp_seq=14 ttl=64 time=2.81 ms

...

    #state报文状态匹配示例:
    #放行22,23,80,139,445的tcp端口,和123,323 ,137,138的udp端口
    [root@localhost ~]# iptables -A INPUT -d 192.168.1.106 -p tcp -m multiport --dports 22:23,80,139,445,3306 -m state --state NEW -j ACCEPT
    [root@localhost ~]# iptables -I INPUT -d 192.168.1.106 -m state --state ESTABLISHED -j ACCEPT
    [root@localhost ~]# iptables -A OUTPUT -s 192.168.1.106 -m state --state ESTABLISHED -j ACCEPT
    [root@localhost ~]# iptables -A INPUT -d 192.168.1.106 -j REJECT
    [root@localhost ~]# iptables -A OUTPUT -s 192.168.1.106 -j REJECT
    [root@localhost ~]# iptables -I INPUT 2 -d 192.168.1.106 -p udp --dport 137:138 -m state --state NEW -j ACCEPT
    [root@localhost ~]# iptables -I OUTPUT 2 -s 192.168.1.106 -p udp -m multiport --dports 123,323 -m state --state NEW -j ACCEPT
     #放行FTP,装载连接追踪
    [root@localhost ~]# iptables -R INPUT 3 -d 192.168.1.106 -p tcp -m multiport --dports 21:23,80,139,445,3306 -m state --state NEW -j ACCEPT
    [root@localhost ~]# iptables -R INPUT 1 -d 192.168.1.106 -m state --state ESTABLISHED,RELATED -j ACCEPT
     #访问ftp服务测试
     [root@localhost ~]# lftp 192.168.1.106
     lftp 192.168.1.106:~> ls                
     drwxr-xr-x    2 0        0               6 Aug 03  2017 pub
     lftp 192.168.1.106:/> 

iptables/netfilter网络防火墙:

  • iptables/netfilter网络防火墙

    • (1) 网关;
    • (2) filter表的FORWARD链;
  • 要注意的问题:
    (1) 请求-响应报文均会经由FORWARD链,要注意规则的方向性;
    (2) 如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行;

  • NAT: Network Address Translation
    请求报文:由管理员定义;
    响应报文:由NAT的conntrack机制自动实现;

    • 请求报文:
      • 改源地址:SNAT,MASQUERADE
      • 改目标地址:DNAT
    • iptables/netfilter:
      • NAT定义在nat表;
        PREROUTING,INPUT,OUTPUT,POSTROUTING
        SNAT:POSTROUTING
        DNAT:PREROUTING
        PAT:
    • target:
      • SNAT:隐藏内网主机去访问外网
        This target is only valid in the nat table, in the POSTROUTING and INPUT chains, and user-defined chains which are only called from those chains.
        --to-source [ipaddr[-ipaddr]]
      • DNAT:隐藏服务器,只开放有限协议有限服务的端口
        This target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains.
        --to-destination [ipaddr[-ipaddr]][:port[-port]]
      • MASQUERADE
        This target is only valid in the nat table, in the POSTROUTING chain. It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target.
        SNAT场景中应用于POSTROUTING链上的规则实现源地址转换,但外网地址不固定时,使用此target;
      • REDIRECT
        This target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains.
        --to-ports port[-port]

实验:按下图配置网关主机实现客户端访问服务器,演示网络防火墙功能

nat实验.png
  1. 按上图配置好三台虚拟机,并按图中ip配置好,开启网关主机的核心转发功能

     [root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
     net.ipv4.ip_forward = 1 
     #在客户端添加默认路由条目
     [root@localhost ~]# route add default gw 192.168.10.254
     #在服务端添加路由
     [root@localhost ~]# route add -net 192.168.10.0/24 gw 192.168.1.107
     #至此客户端和服务端之间连接建立,在客户端192.168.10.2上访问服务器192.168.1.106的web服务
     [root@localhost ~]# curl http://192.168.1.106
     <h1>192.168.1.106</h1>
     hello gay
    
  2. 在网关主机192.168.106上的FORWARD链上添加规则

     #添加默认规则,拒绝访问
     [root@localhost ~]# iptables -A FORWARD -j REJECT
     #使用客户端测试web服务
     [root@localhost ~]# curl http://192.168.1.106
     curl: (7) couldn't connect to host
     #是用ping命令测试客户端和服务端之间连接被拒绝
     [root@localhost ~]# ping 192.168.10.2
     PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
     From 192.168.1.107 icmp_seq=1 Destination Port Unreachable
     From 192.168.1.107 icmp_seq=2 Destination Port Unreachable
     #放行服务器的80端口,使客户端可以访问web服务
     [root@localhost ~]#  iptables -I FORWARD -s 192.168.10.0/24 -d 192.168.1.106 -p tcp --dport 80 -j ACCEPT
     [root@localhost ~]# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
     #使用客户机访问测试成功
     [root@localhost ~]# curl http://192.168.1.106
     <h1>192.168.1.106</h1>
     hello gay
     #单方向放行服务端到客户端的所有访问
     [root@localhost ~]#  iptables -D FORWARD 2 
     [root@localhost ~]# iptables -I FORWARD 2 -d 192.168.10.0/24 -m state --state NEW -j ACCEPT
    

...

  1. 实现SNAT,DNAT

     SNAT:
     #清空FORWARD链上的所有规则
     [root@localhost ~]# iptables -F FORWARD
     #隐藏服务器IP地址去访问外网(SNAT)在网关主机192.168.1.107主机上添加规则
     [root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.10.254
     #使用192.168.1.106访问192.168.10.2的http服务正常
     [root@localhost ~]# curl http://192.168.10.2
     <h1>192.168.10.2</h1>
     #在192.168.10.2主机上抓包分析可以看到服务器IP地址已经被隐藏,显示的是192.168.10.254的IP地址
     [root@localhost ~]# tcpdump -i ens33 -nn tcp port 80
     tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
     listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
     17:30:16.081283 IP 192.168.10.254.40290 > 192.168.10.2.80: Flags [S], seq 854561726, win 29200, options [mss 1460,sackOK,TS val 11762377 ecr 0,nop,wscale 7], length 0
     17:30:16.081410 IP 192.168.10.2.80 > 192.168.10.254.40290: Flags [S.], seq 2274859692, ack 854561727, win 28960, options [mss 1460,sackOK,TS val 4762953 ecr 11762377,nop,wscale 7], length 0
     17:30:16.085611 IP 192.168.10.254.40290 > 192.168.10.2.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 11762382 ecr 4762953], length 0
     17:30:16.085658 IP 192.168.10.254.40290 > 192.168.10.2.80: Flags [P.], seq 1:77, ack 1, win 229, options [nop,nop,TS val 11762382 ecr 4762953], length 76: HTTP: GET / HTTP/1.1
     17:30:16.085735 IP 192.168.10.2.80 > 192.168.10.254.40290: Flags [.], ack 77, win 227, options [nop,nop,TS val 4762957 ecr 11762382], length 0
     17:30:16.090704 IP 192.168.10.2.80 > 192.168.10.254.40290: Flags [P.], seq 1:264, ack 77, win 227, options [nop,nop,TS val 4762962 ecr 11762382], length 263: HTTP: HTTP/1.1 200 OK
     17:30:16.110303 IP 192.168.10.254.40290 > 192.168.10.2.80: Flags [.], ack 264, win 237, options [nop,nop,TS val 11762391 ecr 4762962], length 0
     17:30:16.112405 IP 192.168.10.254.40290 > 192.168.10.2.80: Flags [F.], seq 77, ack 264, win 237, options [nop,nop,TS val 11762392 ecr 4762962], length 0
     17:30:16.113445 IP 192.168.10.2.80 > 192.168.10.254.40290: Flags [F.], seq 264, ack 78, win 227, options [nop,nop,TS val 4762985 ecr 11762392], length 0
     17:30:16.117007 IP 192.168.10.254.40290 > 192.168.10.2.80: Flags [.], ack 265, win 237, options [nop,nop,TS val 11762413 ecr 4762985], length 0
    

...

    DNAT:
    #在192.168.1.107的网关主机上清空nat表上所有规则
    [root@localhost ~]# iptables -t nat -F
    #使用DNAT目标地址转换实现:隐藏服务器ip,仅开放有限协议有限服务的端口
    [root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.1.106 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.254
    #使用192.168.10.2主机访问192.168.1.106的http服务
    [root@localhost ~]# curl http://192.168.1.106
    <h1>192.168.1.106</h1>
    hello gay
    #在192.168.1.106主机上抓包测试
    [root@localhost ~]# tcpdump -i ens33 -nn tcp port 80

....

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容