Liverpool got off to a nightmare start as Bruno Fernandes was found by Aaron Wan-Bissaka inside the box before his outside-of-the-foot finish was deflected into the net by Nathaniel Phillips.
But the Reds responded well and found themselves level through Diogo Jota, who turned home Phillips' wayward effort with a clever backheel finish to make it 1-1.
Firmino headed home from an excellent Trent Alexander-Arnold delivery to give the Reds the lead at half-time. The Brazilian then notched his second of the game less than two minutes after the restart to make it 3-1 to Liverpool.
Ole Gunnar Solskjaer's side were on the ropes at times and Liverpool had an array of chances to kill the game off, most notably through Jota and Alexander-Arnold.
Jota struck the post after being played through by Firmino before Alexander-Arnold's left-footed strike after a Liverpool counter was kept out by Dean Henderson.
But United looked dangerous following the introduction of Mason Greenwood as they cut the deficit through Marcus Rashford, who poked the ball past Alisson to make it 3-2.
It was a nervy finish for Liverpool but it was ultimately settled by Salah, who ran through on goal before calmly slotting the ball past Henderson to hand Liverpool all three points - for the first time at Old Trafford under Klopp and since 2014.
It means Liverpool move up to fifth in the table as they edge ever closer to a top-four spot, which remains in their hands should they win their remaining three fixtures.