在消滅眭固後,為了應對之後與袁紹的戰爭,曹操預作佈置。
命在青州有潛在影響的臧霸等人攻入青州,佔領齊、北海等地,鞏固右翼;
又命大將於禁屯軍黃河南岸,監視袁軍。
不久,張繡聽從謀士賈詡之計,投降曹操。
曹操大喜,拜張繡為揚武將軍,從而解除了後顧之憂。
建安四年199年)十二月,曹操自率軍屯於官渡,準備迎擊袁紹。
劉備在陶謙死後,曾一度出任徐州牧,後徐州被呂布攻佔,劉備投奔曹操。
曹操認為劉備是個英雄,先後表他為豫州牧、左將軍。
曹操攻佔徐州不久,淮南袁術準備逃往青州往依袁紹,曹操派劉備去截擊。
袁術北上不得,嘔血而死。
劉備到達下邳後,襲殺徐州刺史車胄,佔據徐州,自己屯於小沛。
曹操令劉岱、王忠率兵征討,被劉備擊敗。
建安五年200年)正月,董承等人謀誅曹操,事洩被殺。
曹操決定東征劉備。
諸將皆說:“與您爭奪天下的人是袁紹,如今袁紹要來討戰,您卻棄之不顧,而要東征劉備,倘若袁紹乘機從背後進攻,該怎麼辦呢?”
曹操說:“劉備是人傑,現在不除掉他,以後一定會成為心腹大患。袁紹雖然有遠大的志向,但反應遲鈍,不會馬上出兵。”
於是,急速進軍,以迅雷不及掩耳之勢擊破劉備,劉備逃奔袁紹處。
袁紹是當時北方最強大的一股勢力,也是曹操統一北方最強大的敵人。
袁氏一門,自袁紹曾祖袁安以下,“四世居三公位”,“門生故吏遍於天下”,勢力本就很大。
後袁紹取得冀、並、幽、青四州之地,實力大增,有軍隊數十萬人。
袁紹以其長子袁譚、次子袁熙、外甥高幹分守青、幽、並三州,後方穩固,兵精糧足。
他挑選精兵十萬、戰馬萬匹,志在一舉消滅曹操。
建安五年200年),袁紹命大將顏良等進兵白馬,自率大軍進屯黎陽,向曹操發動進攻,拉開了大戰的序幕。
曹操的實力比袁紹弱得多,曹操所佔的黃河以南地區,是殘破不堪、尚未恢復生產的四戰之地,物資儲備也不如袁紹。
袁紹大軍來攻,許都震動。
曹操安慰眾將,分析了袁紹的性格缺陷:“吾知紹之為人,志大而智小,色厲而膽薄,忌克而少威。”
雖然“兵多而分畫不明,將驕而眾令不一”,在這種情況下,袁紹地盤雖大,糧草雖足,但只能是“為我奉也”。
正是因為對袁紹有很深的認識,曹操才敢於在袁紹將要大軍壓境之時抽身去進攻劉備。
四月,曹操親自率兵北上解白馬之圍,他採納謀士荀攸之計——先進軍延津,做出要渡河襲擊袁軍的態勢,吸引袁軍分兵西向,然後突然轉向迅速趕往白馬。
曹操軍突然殺到,袁軍措手不及,顏良被將軍關羽斬首,袁軍大敗,白馬之圍遂解。
曹操救出白馬軍民,沿黃河西撤。
袁紹聞知,立即命文丑、劉備渡河追趕曹操。
曹操見追兵漸近,命軍士解鞍放馬,並置輜重於道。
袁軍追兵大至,爭搶輜重,陣形混亂。
曹操率領僅有的騎兵突然殺出,大破追兵,陣斬文丑。