A promising start from Porto came to an abrupt end just before the seven-minute mark, when Marcus Rashford brilliantly came in from the far left and forged into the box, dodging challenges from Stephen Eustaquio and Joao Mario before sliding it under Diogo Costa at the near post.
Another strong spell for the hosts followed, but they were punished once again by the rampant Rashford, who wandered inside to feed Rasmus Hojlund on the overlap, and the Dane beat a floundering Costa at his near post for the second time in the match.
The two-goal deficit looked harsh on Porto, but they rallied back to parity in a scintillating seven-minute spell.
Quality crosses from Joao Mario were responsible for both goals, the first of which was inadvertently headed towards goal by Noussair Mazraoui under pressure from Samu, and Pepê was first to react to a fine save from Andre Onana and bundle into the net.
His next ball was whipped into the six-yard box and met by Samu, who beat Matthijs de Ligt to it to thump a header into the roof of the net.
Rashford’s withdrawal at the break was a big blow for United, and they soon succumbed to another as Porto completed the turnaround.
Nico Gonzalez sent Pepê away down the right, and the Brazilian pulled it back to Samu, who darted in at the near post and smashed into the top corner.
United needed their leaders to step up in response, but instead, captain Bruno Fernandes was shown a second yellow card - both for a high boot - to be sent off for the second game running.
A missed opportunity for Deniz Gul following that ultimately proved costly for the hosts, as substitute Maguire rose highest from a corner to thump in a stunning-headed equaliser in stoppage time.
For a fourth European away game in a row, United fail to win despite scoring three times, and a positive result at Aston Villa on Sunday may be vital in assessing Erik ten Hag’s future in Manchester.