【SeedLab】BGP Exploration and Attack Lab

本文详细介绍了在SEED互联网仿真实验环境中进行的BGP配置和故障处理任务,包括解决DNS解析问题、调整HTTP请求超时时间、分析AS-155的BGP配置、观察BGP UPDATE消息、实验大型社区路由、配置AS-180以访问互联网、实验内部边界网关协议(IBGP)和外部边界网关协议(EBGP)、实施IP任意播以及防范BGP前缀劫持攻击。每个任务都涉及了具体的路由器配置修改和流量路由分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 实验环境

        本实验需要使用SEED互联网仿真器(已集成到docker配置文件)。

        启动docker容器,配置文件在/Labsetup/outputs/目录下。由于要配置很多docker容器,所以构建+启动过程会比较漫长。.随着docker启动,仿真器也随之运行,仿真器所用到的设备均为docker容器。

        Buid容器时报错【Temporary failure resolving 'security.ubuntu.com'】,无法安装软件时,修改如下解决:

cd /etc/docker       # 切换到docker配置
touch daemon.json    # 新建daemon.json文件

!-----------------------------------------
# 写入以下内容
{                                                                          
    "dns": ["8.8.8.8", "114.114.114.114"]                                                                           
}
!-----------------------------------------

sudo service docker restart    # 重启docker服务

       容器启动报错【An HTTP request took too long to complete. Retry with --verbose to obtain debug information.】,这是同时启动的服务过多,超过了请求HTTP限制的60s时间仍未全部成功启动起来。把限制时间调大;

vi /etc/profile

! ------------------------------
# 在文件尾部追加
export COMPOSE_HTTP_TIMEOUT=500
export DOCKER_CLIENT_TIMEOUT=500
! -----------------------------

source /etc/profile       # 生效

       容器正常启动后,访问 http://localhost:8080/map.html 即可访问互联网仿真器:

2 Task 1: Stub Autonomous System

2.1 Task 1.a: Understanding AS-155’s BGP Configuration

Task 1.a.1: 查找AS-155的peer自治系统,找到10.155.0.254/24的BGP路由,使用cat /etc/bird/bird.conf查询它的配置信息。

         从路由配置中得知,AS-150与3个自治系统互联,其中p_as156与之为peer关系:

Task 1.a.2: AS-155同时与多个AS互联,其中一个失恋不影响AS-155访问互联网。

        这里选择从10.155.0.72上ping主机10.156.0.72,并逐一切断BGP路由的链接,当且仅当所有链接均切断时,ping命令显示不可达。

 2.2 Task 1.b: Observing BGP UPDATE Messages

        在路由上运行以下命令,将路由器收到的数据包存储到pcap文件,并转移至虚拟机上:

# 出现权限错误时,删除旧的/tmp/bgp.pcap文件
tcpdump -i any -w /tmp/bgp.pcap "tcp port 179"
# 这条指令在虚拟机上运行
docker cp {填路由ID}:/tmp/bgp.pcap /home/seed/bgp.pcp

     切断与之相连的某个路由器(下线或者切断所有的bgp连接),使用wireshar读取pcap文件,查找BGP的UPDATE MESSAGE,能看到路由退出的报文:

         恢复连接也能抓到路由更新的报文:

 2.3 Task 1.c: Experimenting with Large Communities

        先切断AS-4与AS-156之间的连接,然后在10.156.0.71上运行ping命令,发现可以ping同10.155.0.71,但ping不通10.161.0.71。 虽然AS-156通过AS-155接入了互联网,但由于两者peer的关系,AS-155并不会转发AS-156的数据(是否转发取决于两者关系)。

        修改AS-155路由器的配置文件,实现AS-156的数据包通过AS-155转发,一共需要修改两处:

protocol bgp u_as4 {
    ipv4 {
        table t_bgp;
        import filter {
            bgp_large_community.add(PROVIDER_COMM);
            bgp_local_pref = 10;
            accept;
        };
        # 添加PEER-COMM,把AS-156路由信息告知AS-4
        export where bgp_large_community ~ [LOCAL_COMM, CUSTOMER_COMM, PEER_COMM];
        next hop self;
    };
    local 10.102.0.155 as 155;
    neighbor 10.102.0.4 as 4;
}
protocol bgp p_as156 {
    ipv4 {
        table t_bgp;
        import filter {
            bgp_large_community.add(PEER_COMM);
            bgp_local_pref = 20;
            accept;
        };
        # 添加PROVIDER_COMM,把AS-4的路由信息告知AS-156
        export where bgp_large_community ~ [LOCAL_COMM, CUSTOMER_COMM, PROVIDER_COMM];
        next hop self;
    };
    local 10.102.0.155 as 155;
    neighbor 10.102.0.156 as 156;
}

        使用以下命令完成修改后,10.156.0.71即可ping通10.161.0.71:

dockps | grep 155
docker cp [docker id]:/etc/bird/bird.conf ./as155_bird.conf
docker cp ./as155_bird.conf [docer id]:/etc/bird/bird.conf
docker exec [docker id] birdc configure

2.4 Task 1.d: Configuring AS-180

        本节实验需要配置一系列路由器的配置信息,使AS-180能够访问互联网。使用import bird conf.sh和export bird conf.sh完成容器内配置文件的导入导出。

step 1 连通AS-180与AS-171

        分别在AS-180与AS-171的配置中添加以下内容:

! ------------------- AS-180 -------------------
define LOCAL_COMM = (180, 0, 0);
define CUSTOMER_COMM = (180, 1, 0);
define PEER_COMM = (180, 2, 0);
define PROVIDER_COMM = (180, 3, 0);
ipv4 table t_bgp;
protocol pipe {
    table t_bgp;
    peer table master4;
    import none;
    export all;
}
protocol pipe {
    table t_direct;
    peer table t_bgp;
    import none;
    export filter { bgp_large_community.add(LOCAL_COMM); bgp_local_pref = 40; accept; };
}
protocol bgp p_as171 {
    ipv4 {
        table t_bgp;
        import filter {
            bgp_large_community.add(PEER_COMM);
            bgp_local_pref = 20;
            accept;
        };
        export where bgp_large_community ~ [LOCAL_COMM, CUSTOMER_COMM];
        next hop self;
    };
    local 10.105.0.180 as 180;
    neighbor 10.105.0.171 as 171;
}

! ------------------- AS-171 -------------------
protocol bgp p_as180 {
    ipv4 {
        table t_bgp;
        import filter {
            bgp_large_community.add(PEER_COMM);
            bgp_local_pref = 20;
            accept;
        };
        export where bgp_large_community ~ [LOCAL_COMM, CUSTOMER_COMM];
        next hop self;
    };
    local 10.105.0.171 as 171;
    neighbor 10.105.0.180 as 180;
}

        重启路由后,AS-180与AS-171即可相互通信, 

step 2 连通AS-180与AS-2、AS-3

!------------------------------- AS-180 -----------------------------------
# 添加到ipv4 table t_bgp;后面
protocol bgp p_as171 {
    ipv4 {
        table t_bgp;
        import filter {
            bgp_large_community.add(PEER_COMM);
            bgp_local_pref = 20;
            accept;
        };
        export where bgp_large_community ~ [LOCAL_COMM, CUSTOMER_COMM];
        next hop self;
    };
    local 10.105.0.180 as 180;
    neighbor 10.105.0.171 as 171;
}

!------------------------------- AS-2 -----------------------------------
# 添加到ipv4 table t_bgp;后面
protocol bgp c_as180 {
    ipv4 {
        table t_bgp;
        import filter {
            bgp_large_community.add(CUSTOMER_COMM);
            bgp_local_pref = 30;
            accept;
        };
        export all;
        next hop self;
    };
    local 10.105.0.2 as 2;
    neighbor 10.105.0.180 as 180;
}

        此时可ping通AS-2连通的主机:

3 Task 2: Transit Autonomous System

3.1 Task 2.a: Experimenting with IBGP

         在AS-162任意主机上ping 10.164.0.71,观察流量路径,此时关闭3/r103路由器的ibgp3,icmp路径被中断。此时162/router0路由器的路由表中会丢失经由10.103.0.3转发的路由信息。

 3.2 Task 2.b: Experimenting with IGP

         使用命令disable ospf1关闭3/r103路由器的opsf协议,icmp路径被切断。

3.3 Task 2.c: Configuring AS-5

         修改AS-5的配置文件,一共3个,都要检查一下。更改配置后,AS-153\AS-160\AS-171即可接通:

protocol direct local_nets {
    ipv4 {
        table t_direct;
        import all;
    };

    interface "net_101_103";
    # 这里填写路由器连接的网络,有几个填几个
    interface "net_103_105";

}
ipv4 table t_ospf;
protocol ospf ospf1 {
    ipv4 {
        table t_ospf;
        import all;
        export all;
    };
    area 0 {
        interface "dummy0" { stub; };
        interface "ix103" { stub; };
        # 这里填写路由器连接的网络,有几个填几个
        interface "net_101_103" { hello 1; dead count 2; };
        interface "net_103_105" { hello 1; dead count 2; };

    };
}
protocol bgp ibgp2 {
    ipv4 {
        table t_bgp;
        import all;
        export all;
        igp table t_ospf;
    };
    local 10.0.0.13 as 5;
    # 属于同一AS的peer路由
    neighbor 10.0.0.14 as 5;
}

修改AS-5/r103与AS-3/r103的配置,使它们以peer-to-peer方式互通:

! --------------------只给出AS-5/r101配置----------------------
define LOCAL_COMM = (5, 0, 0);
define CUSTOMER_COMM = (5, 1, 0);
define PEER_COMM = (5, 2, 0);
define PROVIDER_COMM = (5, 3, 0);

protocol bgp p_as3 {
    ipv4 {
        table t_bgp;
        import filter {
            bgp_large_community.add(PEER_COMM);
            bgp_local_pref = 20;
            accept;
        };
        export where bgp_large_community ~ [LOCAL_COMM, CUSTOMER_COMM];
        next hop self;
    };
    local 10.103.0.5 as 5;
    neighbor 10.103.0.3 as 3;
}

4 Task 3: Path Selection

        先查看一下AS-150的BGP路由器中,通往10.161.0.0/24的路由表:

         可以看到,到达10.161.0.0/24的路由路径有两条,分别经过AS-2和AS-3,在转发路由时将会选择第一条路径转发,这是由于两条路径的优先级相同,所以优先选择AS路径更短的转发

         接下来修改AS-150的路由配置,使AS-150的流量均通过AS-3转发,而AS-2仅作为后备link使用。不修改路由配置时,发往10.152.0.0/24的流量将经AS-2转发:

        由于路由选择时优先挑选local-preference更大的,因此调整一下配置设置即可:

# The import filter for the AS-3 peering session
import filter {
    bgp_large_community.add(PROVIDER_COMM);
    # 把u_as3的这个调大
    bgp_local_pref = 15;
    accept;
};

 

 5 Task 4: IP Anycast

        Anycast(任意播),类似“抛绣球”,一个成员向一组成员发一个消息,DNS服务器即采用该技术。

        在10.156.0.71和10.160.0.72上ping 10.190.0.100,发现两台主机的icmp包发完不同的目的主机。

        Anycast的实现机理在于,路由器并不关心目的主机的具体位置(哪怕有多个),而只关心到达主机的路径。两台 10.190.0.100分别告知AS-3和AS-4自己的位置,并由AS-3和AS-4向外扩散,其他路由器接收到路由信息后,会根据路由选择算法挑选最优的路径转发,转发路径只有一条,所以消息只能抵达10.190.0.100中某一台主机。

6 Task 5: BGP Prefix Attack

        原理:最长路由匹配原则

6.1 Task 5.a. Launching the Prefix Hijacking Attack from AS-16

        修改AS-161的配置信息,使通往AS-154的流量全部转往AS-161。配置中的子网需要覆盖整个10.154.0.0/24

protocol static hijacks {
    ipv4 { 
        table t_bgp; 
    };
    route 10.154.0.0/25 blackhole {
    	bgp_large_community.add(LOCAL_COMM);
    };
    route 10.154.0.128/25 blackhole {
    	bgp_large_community.add(LOCAL_COMM);
    };
}

        效果如下:

 6.2 Task 5.b. Fighting Back from AS-154

        修改AS-154配置,使其可以抢回属于自己的流量:

protocol static {
    ipv4 { 
        table t_bgp; 
    };
    route 10.154.0.0/26 via "net0" {
    	bgp_large_community.add(LOCAL_COMM);
    };
    route 10.154.0.64/26 via "net0" {
    	bgp_large_community.add(LOCAL_COMM);
    };
    route 10.154.0.128/26 via "net0" {
    	bgp_large_community.add(LOCAL_COMM);
    };
    route 10.154.0.192/26 via "net0" {
    	bgp_large_community.add(LOCAL_COMM);
    };
}

 6.3 Task 5.c. Fixing the Problem at AS-3

        由于AS-3是AS-161的唯一provider,因此AS-3可以修改自己的配置,修复错误路由:

protocol bgp c_as161 {
    ipv4 {
        table t_bgp;
        import filter {
            bgp_large_community.add(CUSTOMER_COMM);
            bgp_local_pref = 30;
            # 添加以下内容
            if (net != 10.103.0.0/24) then reject;
            accept;
        };
        export all;
        next hop self;
    };
    local 10.103.0.3 as 3;
    neighbor 10.103.0.161 as 161;
}

        这里已经把AS-154的配置回滚了,可以发现,流量依然正确发往AS-154。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值