tcpdump 与 iptables

一、抓包工具,分析工具

    抓包工具 :

    tcpdump

    格式 :

    tcpdump [-AennqX] [-i 接口] [-w 储存档名] [-c 次数] [-r 档案] [所欲撷取的封包数据格式]

    常用选项 :

    -A :封包的内容以 ASCII 显示,通常用来捉取 WWW 的网页封包资料。
    -e :使用资料连接层 (OSI 第二层) 的 MAC 封包数据来显示;
    -nn:直接以 IP 及 port number 显示,而非主机名与服务名称
    -q :仅列出较为简短的封包信息,每一行的内容比较精简
    -X :可以列出十六进制 (hex) 以及 ASCII 的封包内容,对于监听封包内容很有用
    -i :后面接要『监听』的网络接口,例如 eth0, lo, ppp0 等等的界面;
    -w :如果你要将监听所得的封包数据储存下来,用这个参数就对了!后面接档名
    -r :从后面接的档案将封包数据读出来。那个『档案』是已经存在的档案,
         并且这个『档案』是由 -w 所制作出来的。
    -c :监听的封包数,如果没有这个参数, tcpdump 会持续不断的监听,
         直到使用者输入 [ctrl]-c 为止。

     我们可以专门针对某些通讯协议或者是 IP 来源进行封包截取,那就可以简化输出的结果,并取得最有用的信息。常见的表示方法有:
     'host foo', 'host 127.0.0.1' :针对单部主机来进行封包截取
     'net 192.168' :针对某个网域来进行封包的截取;
     'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制
     'tcp port 21':还可以针对通讯协议侦测,如 tcp, udp, arp, ether 等
     还可以利用 and 与 or 来进行封包数据的整合显示呢!

     1 )示例 :监测网卡eth0的封包信息

[root@test ~]# tcpdump -i eth0 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:15:43.969449 IP 192.168.0.120.22 > 192.168.0.116.50039: Flags [P.], seq 4182134245:4182134453, ack 2359223205, win 292, length 208
09:15:43.969809 IP 192.168.0.116.50039 > 192.168.0.120.22: Flags [.], ack 208, win 251, length 0
09:15:43.972277 IP 192.168.0.120.22 > 192.168.0.116.50039: Flags [P.], seq 208:496, ack 1, win 292, length 288
......................中间省略.................
^C      <==按下 [ctrl]-c 之后结束
952 packets captured                      <==截取到的封包数量
952 packets received by filter            <==由过滤所得的总封包数量
0 packets dropped by kernel               <==被核心所丢弃的封包

    09:15:43.972277 IP 192.168.0.120.22 > 192.168.0.116.50039: Flags [P.], seq 208:496, ack 1, win 292, length 288 截取其中一条信息进行分析

    09:15:43.972277 :这个是此封包被截取的时间,单位:时:分:秒的格式

    IP :使用的通讯协议是IP

    192.168.0.120.22 > :来源的IP是192.168.0.120,所使用的端口是22,> 代表传输的方向

    192.168.0.116.50039 :目的的IP是192.168.0.116,所使用接收的端口是50039

    [P.], seq 208:496 :封包带有 PUSH 的数据传输标志, 且传输的数据为整体数据的 196~472 byte

    

     2 )示例:监测端口

[root@test ~]# tcpdump -i eth0 -nn port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:49:43.323168 IP 192.168.0.120.22 > 192.168.0.116.50039: Flags [P.], seq 4182816229:4182816437, ack 2359228693, win 292, length 208
09:49:43.323587 IP 192.168.0.116.50039 > 192.168.0.120.22: Flags [.], ack 208, win 256, length 0
09:49:43.326386 IP 192.168.0.120.22 > 192.168.0.116.50039: Flags [P.], seq 208:496, ack 1, win 292, length 288

     3 )示例:以十六进制显示监测的数据

[root@test ~]# tcpdump -i eth0 -nn port 22 -X -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:55:47.264963 IP 192.168.0.120.22 > 192.168.0.116.50039: Flags [P.], seq 4188295253:4188295461, ack 2359246885, win 292, length 208
        0x0000:  4510 00f8 c2b9 4000 4006 f4f9 c0a8 0078  E.....@[email protected]
        0x0010:  c0a8 0074 0016 c377 f9a4 5055 8c9f 4025  ...t...w..PU..@%
        0x0020:  5018 0124 8327 0000 8578 31ae e713 1540  P..$.'...x1....@
        0x0030:  63d5 51cb 41e9 a67b 6ecd ab3b a8b3 3df7  c.Q.A..{n..;..=.
        0x0040:  999a 4d66 abc8 9100 f000 4763 3851 fe84  ..Mf......Gc8Q..
        0x0050:  5d71 eb81 918b 0161 cc44 b9e7 5994 9fd7  ]q.....a.D..Y...
        0x0060:  bb3d e795 666e 277e c840 4500 ff1f 525b  .=..fn'[email protected][
        0x0070:  2a11 46a0 8bb9 b10d dc69 6110 4658 b926  *.F......ia.FX.&
        0x0080:  5246 f375 c8a8 b5d4 4161 e688 bcb5 4740  RF.u....Aa....G@
        0x0090:  386b 01b1 874f 6432 5b02 59f3 ce70 20ce  8k...Od2[.Y..p..
        0x00a0:  5604 7bc9 0a7e b593 bb66 8be9 3edc a047  V.{..~...f..>..G
        0x00b0:  62bd fb58 1613 6458 80bd b632 00bc 4472  b..X..dX...2..Dr
        0x00c0:  542e a051 7716 6ef8 d37a 6187 322e 23d5  T..Qw.n..za.2.#.
        0x00d0:  9d80 4fb0 009a 1383 3313 3d74 e20a f263  ..O.....3.=t...c
        0x00e0:  fc2d 6c49 4305 509d 280b a54c 6059 4745  .-lIC.P.(..L`YGE
        0x00f0:  a8f5 6932 a5a0 aa24                      ..i2...$
1 packets captured
4 packets received by filter
0 packets dropped by kernel


    分析工具 :

    wireshark

二、iptables


    1 )查看规则与策略

    选项 :

    -t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的 filter
    -L :列出目前的 table 的规则
    -n :不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!
    -v :列出更多的信息,包括通过该规则的封包总位数、相关的网络接口等

    示例 :

[root@test ~]# iptables -nvL
Chain INPUT (policy ACCEPT 42 packets, 3866 bytes)
 pkts bytes target     prot opt in     out     source               destination 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 

Chain OUTPUT (policy ACCEPT 25 packets, 3048 bytes)
 pkts bytes target     prot opt in     out     source               destination

    主要项目解释

  • target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外,尚有 DROP (丢弃) 的项目!

  • prot:代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;

  • opt:额外的选项说明

  • source :代表此规则是针对哪个『来源 IP』进行限制?

  • destination :代表此规则是针对哪个『目标 IP』进行限制?


     2 ) 对策略的修改

     选项与参数:
     -P :定义政策( Policy )。注意,这个 P 为大写啊!
     ACCEPT :该封包可接受
     DROP   :该封包直接丢弃,不会让 client 端知道为何被丢弃。

     示例 :

# iptables -P INPUT DROP
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT

    

     3 ) 增加一条规则

       [-AI 链名] 针对某的链进行规则的 "插入" 或 "累加"
             -A :新增加一条规则,该规则增加在原本规则的最后面。例如原本已经有四条规则,
                  使用 -A 就可以加上第五条规则!
             -I :插入一条规则。如果没有指定此规则的顺序,默认是插入变成第一条规则。
                  例如原本有四条规则,使用 -I 则该规则变成第一条,而原本四条变成 2~5 号
             链 :有 INPUT, OUTPUT, FORWARD 等,此链名称又与 -io 有关

       [-io 网络接口] 设定封包进出的接口规范
                 -i :封包所进入的那个网络接口,例如 eth0, lo 等接口。需与 INPUT 链配合;
                 -o :封包所传出的那个网络接口,需与 OUTPUT 链配合;

       [-p 协议] 设定此规则适用于哪种封包格式,主要的封包格式有: tcp, udp, icmp 及 all

       [-s 来源IP/网域] 来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,例如:IP  :192.168.0.100 网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
          若规范为『不许』时,则加上 ! 即可,例如: -s ! 192.168.100.0/24 表示不允许192.168.100.0/24 之封包来源;

       [-d 目标IP/网域] 同 -s ,只不过这里指的是目标的 IP 或网域

       -j[ACCEPT|DROP|REJECT|LOG]后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)

       [-s 来源IP/网域] [--sport 端口范围]
      [-d 目标IP/网域] [--dport 端口范围] -j [ACCEPT|DROP|REJECT]
       选项与参数:
       --sport 端口范围:限制来源的端口号码,端口号码可以是连续的,例如 1024:65535
       --dport 端口范围:限制目标的端口号码。

       示例 :

# iptables -A -i eth0 INPUT -s 192.168.0.0/24 -p tcp -j ACCEPT

    

     4  ) 删除规则

     -D :删除动作

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

     示例 :

# iptables -nvL --line-number   <== 查看规则并显示编号
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  192.168.1.0/24       0.0.0.0/0
2    DROP       tcp  --  192.168.1.70         0.0.0.0/0

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

# iptables -D INPUT 2    <== 删除INPUT链中的规则2,

    

       5 )规则相关的清除

       选项与参数:
       -F :清除所有的已订定的规则;
       -X :杀掉所有使用者 "自定义" 的 chain (应该说的是 tables )
       -Z :将所有的 chain 的计数与流量统计都归零

    

     6 )iptables的保存,备份与恢复

     ① # /etc/init.d/iptables save   <== 保存当前规则,使之生效;

     ② # iptables-save > ipt.rule   <== 备份当前的规则,

          # iptables-restore < ipt.rule   <== 恢复当前的规则

     ③ # iptables -F     <== 清空规则表,注:策略不会被清除

     ④ # /etc/init.d/iptables stop     <== 停掉所有策略与规则


     注意 :

     主机规则设定流程 :


  1. 规则归零:清除所有已经存在的规则 (iptables -F...),最少是STOP掉服务

  2. 预设政策:除了 INPUT 这个自定义链设为 DROP 外,其他为预设 ACCEPT;

  3. 信任本机:由于 lo 对本机来说是相当重要的,因此 lo 必须设定为信任装置;

  4. 回应封包:让本机主动向外要求而响应的封包可以进入本机 (ESTABLISHED,RELATED)

  5. 信任用户:这是非必要的,如果你想要让区网的来源可用你的主机资源时



ICMP 封包规则的比对:针对是否响应 ping 来设计

# iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j ACCEPT

    



    nat表应用:

    路由转发功能
假设您的机器上有两块网卡eth0和eth1,其中eth0的IP为192.168.10.11,eth1的IP为172.16.10.11 。eth0连接了intnet 但eth1没有连接,现在有另一台机器(172.16.10.12)和eth1是互通的,那么如何设置也能够让连接eth1的这台机器能够连接 intnet?

# echo "1" > /proc/sys/net/ipv4/ip_forward  <== 开启路由转发功能
# iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE  <== 执行转发规则









你可能感兴趣的:(number)