Отношения с Ордой, и без того бывшие напряжёнными, к началу 1470-х годов окончательно испортились. Орда продолжала распадаться; на территории прежней Золотой орды, помимо непосредственного преемника («Большой Орды»), образовались также Астраханская, Казанская, Крымская, Ногайская и Сибирская Орды. В 1472 году хан Большой Орды Ахмат начал поход на Русь. У Тарусы татары встретили многочисленное русское войско. Все попытки ордынцев переправиться через Оку были отбиты. Ордынскому войску удалось сжечь город Алексин, однако поход в целом окончился провалом. Вскоре (в том же 1472 или в 1476 году) Иван III прекратил уплату дани хану Большой Орды, что неминуемо должно было привести к новому столкновению[9]. Однако до 1480 года Ахмат был занят борьбой с Крымским ханством[10].
По сообщению «Казанской истории» (литературного памятника, написанного не ранее 1564 года), непосредственным поводом к началу войны стала казнь ордынского посольства, отправленного Ахматом к Ивану III за данью. Согласно этому известию, великий князь, отказавшись выплачивать деньги хану, взял «басму лица его» и растоптал её; после этого все ордынские послы, кроме одного, были казнены[11]. Впрочем, сообщения «Казанской истории», содержащие в том числе и ряд фактических ошибок, носят откровенно легендарный характер и, как правило, не воспринимаются современными историками всерьёз[12].
Так или иначе, летом 1480 года хан Ахмат двинулся на Русь. Ситуация для Московского государства осложнялась ухудшением отношений с западными соседями. Литовский великий князь Казимир вошёл в союз с Ахматом и мог напасть в любой момент, а расстояние от принадлежавшей Литве Вязьмы до Москвы литовское войско могло преодолеть за несколько дней. Войска Ливонского ордена напали на Псков. Ещё одним ударом для великого князя Ивана стал мятеж родных братьев: удельные князья Борис и Андрей Большой, недовольные притеснениями великого князя (так, в нарушение обычаев, Иван III после смерти брата Юрия забрал весь его удел себе, не поделился с братьями богатой добычей, взятой в Новгороде, а также нарушил старинное право отъезда дворян, приказав схватить князя Оболенского, отъехавшего от великого князя к его брату Борису) вместе со всем своим двором и дружинами отъехали к литовской границе и вступили в переговоры с Казимиром. И хотя в результате активных переговоров с братьями, в результате торгов и обещаний, Ивану III удалось предотвратить их выступление против него, угроза повторения гражданской войны не оставила Российское государство.
Выяснив, что хан Ахмат двигается к русской границе, Иван III, собрав войска, также направился на юг, к реке Оке. На помощь великокняжескому войску пришли также войска тверского великого князя. В течение двух месяцев готовая к бою армия ждала противника, однако хан Ахмат, также готовый к бою, не начинал наступательных действий. Наконец, в сентябре 1480 года хан Ахмат переправился через Оку южнее Калуги и направился по литовской территории к реке Угре — границе между московскими и литовскими владениями.
30 сентября Иван III оставил войска и выехал в Москву, дав распоряжение войскам под формальным командованием наследника, Ивана Молодого, при котором также состоял его дядя, удельный князь Андрей Васильевич Меньшой, двинуться в направлении реки Угры. Одновременно князь приказал сжечь Каширу. Источники упоминают о колебаниях великого князя; в одной из летописей даже отмечается, что Иван запаниковал: «ужас наиде на нь, и въсхоте бежати от брега, а свою великую княгиню Римлянку и казну с нею посла на Белоозеро»[13].
Последующие события трактуются в источниках неоднозначно. Автор независимого московского свода 1480-х годов пишет о том, что появление великого князя в Москве произвело тягостное впечатление на горожан, среди которых поднялся ропот: «Егда ты, государь князь великый, над нами княжишь в кротости и в тихости, тогда нас много в безлепице продаешь (много взыскиваешь того, что не следует). А нынеча, сам разгневив царя, выхода ему не платив, нас выдаешь царю и татаром». После этого в летописи сообщается о том, что ростовский епископ Вассиан, встретивший князя вместе с митрополитом, прямо обвинил его в трусости; после этого Иван, опасаясь за свою жизнь, уехал в Красное сельцо к северу от столицы. Великая княгиня Софья с приближёнными и государевой казной была отправлена в безопасное место, на Белоозеро, ко двору удельного князя Михаила Верейского[14]. Мать великого князя покинуть Москву отказалась. По словам этой летописи, великий князь неоднократно пытался вызвать к себе из войска сына, Ивана Молодого, посылая ему грамоты, которые тот проигнорировал; тогда Иван приказал князю Холмскому силой доставить к нему сына. Холмский не выполнил этот приказ, попытавшись уговорить княжича, на что тот, согласно сообщению этой летописи, ответил: «Подобает мне здесь умереть, а не к отцу ехать». Также в качестве одной из мер по подготовке ко вторжению татар великий князь приказал сжечь московский посад.
Как отмечает Р. Г. Скрынников, рассказ этой летописи находится в явном противоречии с рядом других источников. Так, в частности, изображение ростовского епископа Вассиана как злейшего обличителя великого князя не находит подтверждения; судя по «Посланию» и фактам биографии, Вассиан был полностью лоялен к великому князю. Исследователь связывает создание этого свода с окружением наследника престола Ивана Молодого и династической борьбой в великокняжеской семье. Это, по его мнению, объясняет как осуждение действий Софьи, так и похвалы в адрес наследника — в противовес нерешительным (превратившимся под пером летописца в трусливые) действиям великого князя[15].
Вместе с тем, сам факт отъезда Ивана III в Москву зафиксирован практически во всех источниках; различие в летописных рассказах относится лишь к продолжительности этой поездки. Великокняжеские летописцы сводили эту поездку всего к трём дням (30 сентября — 3 октября 1480 года). Очевиден также факт колебаний в великокняжеском окружении; великокняжеский свод первой половины 1490-х годов упоминает в качестве противника сопротивления татарам некоего Мамона; враждебный Ивану III независимый свод 1480-х годов помимо Г. В. Мамона упоминает также И. В. Ощеру, а ростовская летопись — В. Б. Тучко. Тем временем в Москве великий князь провёл совещание со своими боярами, и распорядился насчёт подготовки столицы к возможной осаде. При посредничестве матери были проведены активные переговоры с мятежными братьями, закончившиеся восстановлением отношений. 3 октября великий князь выехал из Москвы в войска, однако, не доехав до них, расположился в городке Кременец в 60 верстах от устья Угры, где и дождался подхода отрядов прекративших мятеж братьев — Андрея Большого и Бориса Волоцкого. Тем временем на Угре начались ожесточённые столкновения. Попытки ордынцев переправиться через реку были успешно отбиты русскими войсками. Вскоре Иван III отправил к хану посла Ивана Товаркова с богатыми дарами, прося его отступить прочь и «улус» его не разорять. Хан потребовал личного присутствия князя, однако тот ехать к нему отказался; также князь отказался от предложения хана послать к нему сына, брата или известного своей щедростью посла Никифора Басенкова (ранее часто ездившего в Орду).
26 октября 1480 года река Угра замёрзла. Русская армия, собравшись вместе, отошла к городу Кременцу, затем к Боровску. 11 ноября хан Ахмат отдал приказ отступить. Небольшой татарский отряд сумел разорить ряд русских волостей под Алексиным, но после того, как в его направлении были отправлены русские войска, также отошёл в степь. Отказ Ахмата от преследования русских войск объясняется неподготовленностью ханского войска к ведению войны в условиях суровой зимы — как сообщает летопись, «бяху бо татарове нагы и босы, ободралися». Кроме того, стало совершенно ясно, что король Казимир не собирается выполнять своих союзнических обязательств по отношению к Ахмату. Помимо отражения нападения союзных Ивану III крымских войск, Литва была занята решением внутренних проблем. «Стояние на Угре» завершилось фактической победой Российского государства, получившего желанную независимость.
Основная статья: Русско-литовская война 1487–1494
Существенные перемены произошли в правление Ивана III в отношениях Московского государства с Великим княжеством Литовским. Первоначально дружеские (литовский великий князь Казимир даже был назначен, по завещанию Василия II, опекуном детей великого московского князя), они постепенно ухудшались. Стремление Москвы объединить русские земли постоянно наталкивалось на противодействие Литвы. Попытка новгородцев перейти под власть Казимира не способствовала дружбе двух государств, а союз Литвы и Орды в 1480 году, во время «стояния на Угре», накалил отношения до предела. Именно к этому времени относится формирование союза Российского государства и Крымского ханства.