Рубеж по дуге от залива Палдиски-Лахти до бухты Хара-Лахт был занят войсками 10-го стрелкового корпуса совместно с морской пехотой и другими частями, сформированными флотом. Общая численность войск, оборонявших Таллин, не превышала 20 тысяч человек. Сюда вошли и сформированные в период с 15 по 20 августа из личного состава флота 14 стрелковых частей и подразделений, в том числе сводный полк, особый отряд моряков, танковая рота (13 Т-26) и ряд других формирований. Эти войска должны были противостоять пяти немецким пехотным дивизиям 42-го армейского корпуса вермахта, усиленным артиллерией, танками и поддерживаемым авиацией.
Под Таллином противник пытался пробиться к городу с востока, вдоль морского побережья. Однако артиллерийский огонь кораблей, в частности канонерских лодок «Москва» и «Аргунь» (командир дивизиона капитан 2-го ранга Н. В. Антонов), сорвал замысел врага.
При обороне Таллина впервые с начала войны было достигнуто практическое взаимодействие сухопутных войск и артиллерии кораблей флота. В результате стойкой сухопутной обороны при поддержке огня корабельной артиллерии темп продвижения немецких частей к городу во второй половине августа резко снизился.
После некоторого затишья 19 августа противник начал артиллерийскую подготовку на восточном участке обороны, а утром 20 августа немецкие войска на всем фронте перешли в наступление. Главный удар наносился силами двух пехотных дивизий вдоль Нарвского шоссе в направлении населенных пунктов Кусалу-Кодасо. К этому времени общий фронт обороны базы флота имел протяжение до 180 км. Артиллерийская плотность обороны на основных направлениях составляла всего 2–3 орудия на один километр фронта. Боевыми порядками были заняты только наиболее важные направления и участки. Неприкрытые промежутки между ротами и батальонами доходили до 5–8 км. Полки оборонялись на фронте 25–30 км. Так, например, фронт обороны 156-го стрелкового полка достигал 28 км. В резерве у командиров соединений оставалось не более стрелковой роты, поэтому оказывать сколько-нибудь серьезное влияние на ход боя они не могли.
На всех участках обороны солдаты, матросы и рабочие боролись до конца. Особенно стойко удерживали рубежи обороны латышский полк, прошедший с боями от Риги, моряки отряда полковника Костикова и некоторые эстонские части. Но превосходство немецких войск в живой силе и боевой технике, особенно в артиллерии и авиации, дало им возможность к исходу дня вклиниться в оборону на восточном и юго-восточном участках.
Силы защитников Таллина таяли. Стал ощущаться недостаток в оружии, боеприпасах и резервах. Предпринятые 21 августа армейскими и флотскими частями контратаки успеха не имели, и защитники базы снова были потеснены противником. Левофланговые подразделения 22-й мотострелковой дивизии НКВД, поддерживаемые усиленным огнем 12-дюймовой батареи острова Аэгна и канонерских лодок «Москва» и «Аргунь», к вечеру закрепились в районе бухты Колга-Лахт. Моряки отряда полковника Костикова за этот день отбили 5 атак противника, но к вечеру также были потеснены. Немецкие части медленно продвигались вперед и 22 августа достигли рубежа, расположенного в 12 км от Таллина. К полудню 23 августа бои уже шли на рубеже реки Пирита. Отряд Костикова оборонялся в 16 км от населенного пункта Палдиски. Когда противнику удалось полностью окружить отряд, тяжелораненый командир повел бойцов на прорыв. Все, в том числе и полковник Костиков, пали смертью храбрых, но не отступили. Чем ближе подходили немцы к Таллину, тем ожесточеннее сражались его защитники. Стойко и мужественно дрались бойцы 1-й бригады морской пехоты, которой командовал полковник Парафило. По несколько раз в день они переходили в контратаки, уничтожая в рукопашном бою наседавших немецких солдат. Значительный урон противнику наносили зенитчики огнем прямой наводки. Командир зенитно-пулеметной роты младший лейтенант Казбан, скрытно заняв огневые позиции, отбил «психические» атаки двух батальонов немцев, которые оставили на поле боя до 500 человек убитыми и ранеными. Корабли флота и береговая оборона провели более 500 стрельб из 80 орудий. Расход боеприпасов на кораблях и батареях за сутки достигал 2000 снарядов. 24 августа на фронт ушел последний резерв обороны — милиция Таллина, отряд матросов-добровольцев с кораблей и курсантов Высшего военно-морского училища им. М. В. Фрунзе. 25 августа немецкое командование подтянуло артиллерию и тяжелые минометы. Крупные силы люфтваффе непрерывно бомбили боевые порядки, город Таллин, береговую полосу Финского залива в районе гаваней и пирсов, а также суда и корабли флота. После артиллерийской и авиационной подготовки немецкие части прорвали позиции восточного сектора обороны и стали продвигаться к окраинам города. Защитники Таллина упорно оборонялись, однако силы были слишком неравными. Оборонявшиеся войска несли большие потери. Только за 14 дней обороны из Таллина было эвакуировано 6000 раненых, но их число непрерывно увеличивалось. Вечером артиллерийский снаряд попал в крейсер «Киров», разворотив палубу и кормовые помещения. Возникший пожар был ликвидирован, и крейсер не переставал вести огонь по противнику.