建安十二年(公元207年),曹操回到邺城,大封功臣二十多人,皆为列侯,其余依次受封。
曹操为了肃清袁氏残余势力,也为了彻底解决三郡乌桓入塞为害问题,决定远征乌桓。汉末,辽西、辽东、右北平三郡乌桓结合,是为三郡乌桓,其首领为辽西部的蹋顿。三郡乌桓与袁氏关系一直很好,并屡次侵扰边境,掳掠人口财物。
五月,曹操亲率大军到达无终(今河北玉田)。时正雨季,道路积水,“浅不通车马,深不载舟船”。曹操从无终人田畴之议,改从一条久已断绝,但“尚有微径可寻”的路线进军。在田畴的引导下,曹操大军登徐无山(今河北玉田北),出卢龙塞(今河北喜峰口附近),“堑山堙谷五百余里”,直指乌桓老巢柳城(今辽宁朝阳南)。
八月,曹军进至离柳城不足二百里时,乌桓才发现,于是蹋顿与袁尚、袁熙等人率数万骑兵迎击。二军相遇,时乌桓军军势甚盛,而曹军则是“车重在后,被甲者少,左右皆惧”,唯独张辽力劝曹操迎战。曹操登高瞭望,见乌桓军虽多,但阵势尚未摆好,遂命将自己的持麾授予张辽暂用。张辽指挥先锋部队,乘乌桓军阵稍动之机,向乌桓军发动猛攻。乌桓军大败,死者被野。乌桓单于蹋顿也被临阵斩杀。曹军在白狼山之战中大获全胜,胡、汉降者二十余万。
袁尚等人逃奔割据平州的公孙康。这时,有人劝曹操乘势进击公孙康,曹操说:“吾方使康斩送尚、熙首,不烦兵也。”遂率军还师。不久,公孙康果然斩杀袁尚、袁熙,并将其首级献与曹操。诸将不明所以,曹操说:“彼素畏尚等,吾急之则并力,缓之则自相图,其势然也。”于是,曹操攻破三郡乌桓,也彻底肃清了袁氏势力。[]
十一月,曹操行至易水,代郡乌丸行单于普富卢、上郡乌丸行单于那楼率其部下名王来贺。
建安十三年(公元208年),曹操开辟玄武池训练水军。六月,曹操废三公,恢复丞相制度,自任汉朝丞相。曹操基本平定北方后,兵锋转而南向。七月,进军南征荆州牧刘表。八月,刘表病死,其子刘琮接任。九月,曹操大