8月底,德军变更部署后沿莫斯科-列宁格勒公路再度发起进攻。德军付出重大损失后,于8月25日夺取了柳班,8月29日占领了托斯诺,8月30日抵达涅瓦河,切断了沟通列宁格勒与外界的铁路联系。9月1日,苏军退至凯克斯霍尔姆维堡以东30-40公里一线。
9月8日,德军遭受重大损失后冲过姆加车站,进抵拉多加湖南岸,夺得什利谢尔堡,从陆上包围了列宁格勒。自此,列宁格勒陷入德军的三面包围,只能从拉多加湖和空中得到补给,长达900天的列宁格勒保卫战拉开了序幕。
包围列宁格勒之后,德军对该市实施了骇人听闻的野蛮轰炸和炮击,投掷了10多万枚航空燃烧弹和航空爆破炸弹,妄图用恐怖轰炸和饥饿困死守城军民。
9月9日,德军又向列宁格勒发起新的进攻。伏罗希洛夫元帅由于指挥不利而被撤职。9月10日,朱可夫大将接替指挥列宁格勒方面军。朱可夫做出的第一个决定是:即使战至最后一人,也要守住列宁格勒。他的口号是:"不是列宁格勒惧怕死亡,而是死亡惧怕列宁格勒!"
与此同时,朱可夫迅速调整和加强了列宁格勒防御,各预备部队得到了民兵支队的补充,大批海军军人离舰上陆,一部分高射炮调到高地上用于打坦克。至9月底,列宁格勒西南和南面的战线趋于稳定。德军一举夺取列宁格勒的计划破产了,抽调北路基本兵力进攻莫斯科的企图也随之失败。
从南面夺取列宁格勒的计划失败后,德军于10月改向季赫温实施突击,与芬兰军队会合,企图完全封死列宁格勒。但是,德军未能突至斯维里河。11月中旬,苏军转入了反攻,11月20日,攻占了小维舍拉,12月9日夺回了季赫温,将德军赶过沃尔霍夫河。
列宁格勒保卫战具有全民动员的性质。列宁格勒的工业给前线提供了武器、装备、服装和弹药,而该市居民则在被封锁后第一个冬春提供了10万多新兵。为了使居民免于挨饿,拉多加湖区舰队承担了湖上给养、弹药和武器的输送。11月中旬,湖上航行因为冰封而中止。11月19日,又在拉多加湖的冰上开辟军用汽车路,被围城市通过冰上交通线得到了战斗和生活必需品的供应,疏散了没有劳动能力的居民以及工业设备等。
尽管得到了一些给养补充,这些供应还远远不能满足守城军民的需要。列宁格勒城内被迫实行了配给制,工人每人每天只能得到8两面包,儿童、病人和公务员只能得到4两面包。但是,列宁格勒军民不畏困难,每天仍有45000人参加修筑防御工事,工人们在德军的炮火下坚持生产。全城军民步步为营,铸成了一条攻不破、打不烂的钢铁长城。
1942年1~4月,苏军在柳班方向发动突击,8~10月又在锡尼亚维诺方向实施了顽强战斗,疲惫和消耗了德军的基本兵力。苏联游击队也在列宁格勒州、诺夫哥罗德州和普斯科夫州的德国占领区展开了积极的战斗,以小型兵器使敌军遭受重大损失。
1943年1月12日,苏军在远程航空兵、炮兵和红旗波罗的海舰队航空兵的支援下,兵分两路在拉多加湖以南什利谢尔堡、锡尼亚维诺之间狭小突出部实施了相向突击,力图打破德军对列宁格勒的封锁。1月18日,两路苏军成功突破德军防线,在拉多加湖与战线之间形成了8~11公里宽的走廊,并在17个昼夜内铺设了铁路和公路各一条。
1943年夏秋,苏军又打破了德军再度封锁列宁格勒的企图,并且肃清了沃尔霍夫河岸基里希登陆场的德军,攻占锡尼亚维诺,从而改善了战役态势。
1944年1月14日,一支苏军从奥拉宁包姆登陆场向罗普沙转入反攻。1月15日,另一支从列宁格勒向红谢洛转入反攻。1月20日,进攻军队在罗普沙地域会合,并消灭了被合围的德军彼得戈夫-斯特列利纳集团。1月21日,德军开始从姆加、托斯诺退却。到1月底,苏军相继解放了普希金、克拉斯诺格瓦尔杰伊斯克、托斯诺、柳班、丘多沃、新索科利尼基等市。
2月12日,苏军在游击队配合下攻占了卢加。至2月15日,完全突破了德军的防御。此后,继续追击德军,至3月1日,苏军已进抵拉脱维亚边界。德国"北方"集团军群遭到重创,列宁格勒州几乎全境解放,加里宁州一部解放,苏军进入爱沙尼亚境内,为粉碎波罗的海沿岸地区和列宁格勒以北之敌创造了有利条件。