The 40-year-old striker opened the scoring in the 25th minute, with Franck Kessie adding a second from the penalty spot in the second half after Ibrahimovic was upended.
Milan’s Theo Hernandez was sent off before Stephan El Shaarawy grabbed a late consolation goal in stoppage time for the home side, but it was not enough as manager Jose Mourinho – who spent two successful seasons with Inter Milan – suffered his first ever home defeat in Serie A.
Napoli, like Milan, are unbeaten and stayed top of the table with a 1-0 win over Salernitana as both sides finished the game with 10 men.
Piotr Zielinski scored the only goal of the game in the 61st minute in the hard-fought local derby.
Joaquin Correa scored twice as Inter secured a 2-0 win over Udinese, but they remain seven points behind the league leaders.
Fiorentina striker Dusan Vlahovic scored a hat-trick in a 3-0 win over Spezia.
The Serbian striker has now overtaken Luca Toni’s record of number of goals for the club in a calendar year.
Elsewhere, Sassuolo were beaten 2-1 at home by Empoli and Genoa and Venezia played out a goalless draw.
In La Liga, Real Sociedad held on to a slender one-point lead at the top of the table despite a late Athletic Bilbao equaliser.
Sociedad took the lead in the 58th minute from the penalty spot through Alexander Isak and looked to be on course for all three points.
However, despite a red card for Inigo Martinez, Iker Muniain struck the equaliser in the first minute of stoppage time at the end of the game, as Bilbao finished the match with 10 men.
Atletico Madrid beat Real Betis 3-0 to keep the pressure on second-placed city rivals Real Madrid.
Yannick Carrasco opened the scoring in the 26th minute before an own goal from German Pezzella doubled the home side’s lead. Joao Felix then wrapped up the victory with a goal in the 80th minute.
At the other end of the table, bottom-placed Getafe managed a surprise 2-1 win over Espanyol while Cadiz and Mallorca drew 1-1.
In France, Andy Delort struck a stoppage-time winner as Nice moved into second place behind league leaders Paris St Germain with a 2-1 win at Angers.
Nice were behind after a Sofiane Boufal penalty just before the half hour mark, only for Delort to strike twice in the second half to give the visitors all three points.
Bordeaux scored a penalty in the fifth minute of added time to beat Reims 3-2.
Reims had been 2-0 up in the 73rd minute before Yacine Adli’s goal pulled one back, then Jimmy Briand scored twice including from a spot-kick.
A first-half goal from Cengiz Under was enough for Marseille to claim all three points away at Clermont.
In the Bundesliga, Augsburg recorded their second win of the season in emphatic fashion with a 4-1 victory over Stuttgart.
Borussia Monchengladbach also won 2-1 against Bochum.