次年,晋军对广固发动总攻,终于将广固拿下。慕容超战败被俘。南燕从此灭亡。
灭了南燕,东晋的版图恢复到山东、河南。
刘裕准备乘胜讨伐后秦。这时国内传来消息,广州的卢循趁晋军北伐后防空虚北犯建康。
卢循当年南逃,趁广州兵力薄弱攻下了番禹,杀了百姓数万人。朝廷忙于内乱无暇顾及偏远的广州,只能设法诏安,任命卢循为广州刺史。卢循接受招安也只想获得一个喘息的机会。
刘裕北伐期间,卢循建造了大量适合内河航行的舰船,计划北上长江中上游,然后顺江而下进攻建康。
当年孙恩率军从海上进长江逆流而上进攻建康,因为舰队航行缓慢失去战机。卢循汲取教训,改从上游发起突袭,让刘裕来不及回援。
公元410年,卢循兵分两路,沿湘江和赣江北上。西路军打到长沙。东路军一口气打到豫章(江西南昌)。
朝廷震动,一度打算放弃建康保着皇帝北上投奔刘裕。
所幸刘裕这时已经结束了南燕之战,正在休整部队,准备西征。刘裕得知卢循南犯,立即回军救援。他担心都城有失,轻骑回京安稳人心。建康军民见到刘裕,得知晋军正在南返的路上,很快安定下来。
这时卢循已经攻破长沙打到长江。刘裕命令坐镇姑孰(安徽马鞍山当涂县)水军将军刘毅固守待援,等待大军南返。但是刘毅争功心切,主动出兵迎战卢循,结果受到卢循两路军夹击一败涂地。
卢循两路水军在桑落洲(江西九江北长江小岛)会师,随即顺江直下建康。卢循的水军“战士十余万,舟车百里不绝,楼船高十二丈”。战船布满百里江面,浩浩荡荡。
南返的晋军还没有到达。建康只有几千守军。群臣惊恐不安,建议刘裕赶紧迁都躲避。
刘裕坚决不同意,认为临阵脱逃是对军民士气的极大打击,不用人家打自己就垮了,逃走也不过是多苟延残喘几日而已。
刘裕在建康紧急动员,征招百姓参军守城。
卢循杀到建康,得知刘裕已经回到京城,迟迟不敢发动进攻。卢循是刘裕手下败将,知道刘裕的厉害,畏之如虎。
刘裕利用这个机会加固工事,部署兵力。南返的部队和各地援军源源不断赶到建康。
卢循终于决定发起进攻的时候早已失去战机。
卢循几次进攻建康都没攻下来,士气受挫。他想先拿下荆州有了立脚之地再图建康,于是撤围去打荆州,结果荆州也没打下来。刘裕率军与卢循决战,利用拿手的火攻大败卢循。卢循收拢残兵逃回广州。
卢循回到广州才发现广州已经被晋军占领。原来,刘裕在卢循撤围之后便派出一支军从海路远征番禺,趁卢循倾军而出后防空虚一举端掉了他的老窝。
卢循原本想趁刘裕北伐趁虚而入袭取建康,没想到刘裕以其人之道还治其人之身,趁虚而入攻占了番禺。
卢循率军全力攻打番禺。这时晋军追兵赶到,跟广州守军里应外合杀败卢循。
卢循收集残兵几千人逃往越南。越南那时也是东晋领土。龙编(越南河内市)守军再次把卢循击溃。卢循彻底绝望,自杀身亡。
持续11年之久的五斗米道之乱终于被平定。
刘裕休整军队,扩充水军,也建造了大量十几丈高的楼船。
公元413年,刘裕派兵去收复益州。
刘裕为此战制定了详细的作战计划。因为担心内鬼泄露情报,他把作战计划装进一个匣子里交给西征军的统帅朱龄石,告诉朱龄石进入蜀地之后再打开。
西征军进入蜀地。朱龄石打开匣子拿出作战计划,看到刘裕让他率领主力从外水(岷江)方向发起进攻直取成都,而以老弱部队从内水(涪江)佯攻黄虎(四川省绵阳)。朱龄石立即依计行事。
谯纵中计,派重兵把守内水。晋军从外水直插彭模(四川眉山彭山县南),抢滩登陆杀奔成都。谯纵以为全线失守,弃城而逃。朱龄石兵不血刃就占领了成都。驰援成都的蜀军遇到单身出逃的谯纵气得要死,杀了谯纵四散而走。益州于是被晋军收复。
至此东晋基本恢复了桓温、谢安时代的地盘。国内结束内乱恢复了安定。