​ linux bridge - (brctl)实现了ieee 802.1d协议,这个实现,应该是不能支持VLAN的功能。也就是说,这个实现,只能承载一个广播域,而不能承载多个广播域。当然,可以创建多个bridge device,每个bridge都对应不同的vlan,在bridge内部,包通过fdb表来转发,但是这个fdb表里面并没有vlan的信息。如果要在多个bridge device之间通信,比必须在bridge device上创建vlan interface,然后配置路由,这样可以实现不同bridge之间的转发。
​ linux vlan - (vconfig)实现了ieee 802.1q协议。802.1q本来应该是一个二层协议,但是linux的实现需要创建vlan interface,而且可以在vlan interface上配置ip地址。所以,这个interface可以放到路由表里面。一般来说,在这个interface上收到的包,会带这个interface配置的vlan id,而从这个interface发出去的包,会打上这个interface的vlan id.

​ 举一个例子。一个盒子有6个物理interface, eth0,eth1,eth2,eth3,eth4,eth5,eth6.
​ bridge0 { eth0, eth1, eth2 }, vlan id 是2
​ bridge1 { eth3, eth4, eth5 }, vlan id 是3
​ eth0,eth1,eth2,eth3,eth4,eth5都在混杂模式,并且没有ip地址,它们是bridge的port.
​ 创建vlan interface, bridge0.2, bridge1.3。在bridge0.2和bridge1.3上配置ip地址。vlan 2的机器,把bridge0.2的地址设置为缺省网关;vlan 3的机器,把bridge1.3设置为缺省网关。当有包要从vlan 2发往vlan 3是,它将送到bridge0.2,然后,通过路由,找到bridge1.3,然后由bridge1.3发出去。这个过程中,packet里面的vlan id会发生改变。
​ 这个例子里面,要求从bridge port上收到的包都必须是打tag的,在bridge里面,并不能识别和处理tag,只有到三层的vlan interface才能识别并处理这些tag.
在bridge是还会运行STP协议来消除回环,进而实现了link一级的HA。STP,RSTP都是没有vlan的概念,而后来的PVST,PVST+,以及MSTP等,都能识别vlan,并且能消除一个vlan里面的回环。

关于Bridge,可以参考:http://www.linuxfoundation.org/en/Net:Bridge
关于Vlan,可以参考:http://www.candelatech.com/~greear/vlan.html
关于STP,可以参考:http://en.wikipedia.org/wiki/Spanning_tree_protocol

随着信息安全意识的提升,越来越多的信息系统前端均部署有防火墙,系统管理员根据业务需求将内部必要的服务端口通过端口映射等手段映射到公网中,如默认**web服务端口80MSSQL*数据库服务端口1433等。通过部署防火墙可以将信息系统内部区域与公网逻辑隔离开来,利用相关的策略有效避免或减轻来自外部的攻击。

对于渗透测试者来说,如何绕过防火墙的阻挡在内网展开渗透测试成为亟需解决的问题,本文介绍了在夺取映射到外网的内网服务器权限后,如何利用socks代理反弹获得内网访问权限。

1.sSocks

DNAT(Destination Network Address Translation,目的地址转换) 通常被叫做目的映射。而SNAT(Source Network Address Translation,源地址转换)通常被叫做源映射。

这是我们在设置Linux网关或者防火墙时经常要用来的两种方式。以前对这两个都解释得不太清楚,现在我在这里解释一下。

首先,我们要了解一下IP包的结构,如下图所示:
ipv4
在任何一个IP数据包中,都会有Source IP Address与Destination IP Address这两个字段,数据包所经过的路由器也是根据这两个字段是判定数据包是由什么地方发过来的,它要将数据包发到什么地方去。而iptables的DNAT与SNAT就是根据这个原理,对Source IP Address与Destination IP Address进行修改。

其他国家的互联网如同一个孤岛。要想访问国外网站异常的缓慢,甚至被和谐了。可以建立一条隧道来避免这种情况,下面说说GRE隧道如何建立。

  1. GRE介绍
    GRE隧道是一种IP-over-IP的隧道,是通用路由封装协议,可以对某些网路层协议的数据报进行封装,使这些被封装的数据报能够在IPv4/IPv6 网络中传输。
    Tunnel 是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel 的两端分别对数据报进行封装及解封装。 一个X协议的报文要想穿越IP网络在Tunnel中传输,必须要经过加封装与解封装两个过程。
    要在Linux上创建GRE隧道,需要ip_gre内核模块,它是GRE通过IPv4隧道的驱动程序。
  2. 查看是否有加载ip_gre模块

    1
    2
    3
    4
    5
    6
    7
    8
    # modprobe ip_gre
    # lsmod | grep gre
    ip_gre 22432 0
    gre 12989 1 ip_gre
    # modprobe ip_gre
    # lsmod | grep gre
    ip_gre 22432 0
    gre 12989 1 ip_gre
  3. 创建步骤
    环境如下:
    host A : 121.207.22.123
    host B: 111.2.33.28
    在host A上面:

    1
    2
    3
    4
    5
    6
    # ip tunnel add gre1 mode gre remote 111.2.33.28 local 121.207.22.123 ttl 255
    # ip link set gre1 up
    # ip addr add 10.10.10.1 peer 10.10.10.2 dev gre1
    # ip tunnel add gre1 mode gre remote 111.2.33.28 local 121.207.22.123 ttl 255
    # ip link set gre1 up
    # ip addr add 10.10.10.1 peer 10.10.10.2 dev gre1

创建一个GRE类型隧道设备gre0, 并设置对端IP为111.2.33.28。隧道数据包将被从121.207.22.123也就是本地IP地址发起,其TTL字段被设置为255。隧道设备分配的IP地址为10.10.10.1,掩码为255.255.255.0。
在host B上面:

1
2
3
4
5
6
#  ip tunnel add gre1 mode gre remote  121.207.22.123 local 111.2.33.28 ttl 255
# ip link set gre1 up
# ip addr add 10.10.10.2 peer 10.10.10.1 dev gre1
# ip tunnel add gre1 mode gre remote 121.207.22.123 local 111.2.33.28 ttl 255
# ip link set gre1 up
# ip addr add 10.10.10.2 peer 10.10.10.1 dev gre1

先看下标准udp socket:

1
2
3
4
5
6
7
8
9
10
11
12
server:
socket
bind
recvfrom
sendto
close

client:
socket
sendto
recvfrom
close

client bind可定制自己的源IP和端口,
client connect后可改sendto为send.

通过测试发现当connect后,如果本机的ip变了再send会出现发送失败,
而sendto不会。所以在考虑有ip变化的情形,则应该使用默认的sendto.