Pep Guardiola's side had already qualified for the round of 16 as group winners, while this was Leipzig's first match since the dismissal of Jesse Marsch. The result puts the German side third in the group, and earns them a place in the Europa League.
A first-half goal from Szoboszlai opened the scoring for Leipzig, before Silva doubled their lead in the 70th minute, drilling the ball in the net following a cross from Emil Forsberg.
Riyad Mahrez got one back for City in the 75th minute, nodding in an Oleksandr Zinchenko cross to keep the side in the game. However, a straight red card for Kyle Walker in the 82nd minute left Guardiola's side to see out the rest of the game with 10 men.
Szoboszlai opened the scoring in the 23rd minute. An outside-of-the-foot pass from Konrad Laimer saw him go clear, allowing him to easily slot the ball in the net after going round goalkeeper Zack Steffen.
The home side were unlucky to not double their lead just three minutes later, after another accurate pass from Laimer found Forsberg, but his first time shot was covered well by Steffen.
City had a chance to draw level late in the half through Phil Foden, however, his long range attempt was tipped onto the post by Leipzig goalkeeper Peter Gulacsi.
Guardiola's side continued to struggle after the break, making uncharacteristic errors in the final third and lacking the cohesion that has been seen in recent games.
Silva added to their frustration in the 70th minute, doubling the home side's lead following a composed pass from midfielder Forsberg but Mahrez closed the gap just six minutes later, scoring his fifth goal in the competition this term.
However, Walker sealed his side's fate with seven minutes to go, with referee Sandro Scharer showing him a straight red after fouling Silva from behind.