United were without the injured Paul Pogba, Rashford taking his place, while Liverpool made five changes from their Champions League game against Porto last week.
The visitors constructed the game's first move of note when Sadio Mane found Milner, whose low cross was cleared by Scott McTominay as Alex Oxlade-Chamberlain waited.
But that was a rare moment of cohesion in a shapeless opening few minutes, with United content to sit back and pick off Liverpool's passes.
Ashley Young played a dangerous-looking pass towards Marcus Rashford as the home side stepped up, and then Nemanja Matic looked early for Romelu Lukaku, who was unable to make anything of it.
But the deadlock was broken after 14 minutes thanks to Rashford, who conjured a superb finish to give United the lead.
Lukaku created the chance with a header into Rashford's path, and the England forward got to the ball ahead of Trent Alexander-Arnold, turned away from him and curled his shot high beyond Loris Karius.
Roberto Firmino looked for Mane at the back post as Liverpool tried to hit back, but the cross was a fraction too high.
At the other end, Rashford was in the action again as he darted into the area only for Andrew Roberson to get there and clear. But a 23rd-minute Liverpool corner should have brought the leveller only for Virgil van Dijk to fail to find a proper connection after getting away from Matic.
The defender was made to pay a minute later when he only half dealt with another Lukaku flick and Rashford, via a slight deflection, fired into the bottom corner for his second goal.
Firmino fired a low shot straight at David De Gea as Liverpool tried to find a way back into the game, while Rashford was booked for a lunging challenge on Milner.
Oxlade-Chamberlain soon followed him into the book when he fouled McTominay after losing out to him in a midfield challenge.
With half time approaching, Mata could have made it three when Alexis Sanchez floated in a cross and his attempted bicycle kick flew narrowly wide.
The visitors won a corner from which Dejan Lovren could only steer harmlessly wide as they continued to struggle to test De Gea, and Young was on the spot to clear another Mane cross seconds before the half-time whistle.
Salah attempted to get Liverpool going in the opening moments of the second half, but Robertson was unable to reach his pass out wide.
Jurgen Klopp's side were beginning the second period in bright style and Van Dijk floated a header onto the roof of the net before Young grappled with Salah inside the area only for referee Craig Pawson to wave away penalty appeals.
It was all Liverpool, and Mane tried his luck from distance only to see the effort strike Eric Bailly and deflect straight to De Gea.
Pawson was again unmoved when a Robertson cross hit Antonio Valencia on the arm, while Young was again in the right place for United as Mane flicked the ball dangerously towards Salah inside the area.
Shortly past the hour Klopp made his first change of the afternoon, bringing on Adam Lallana for Oxlade-Chamberlain, and Milner whacked an effort over moments later as De Gea remained almost untroubled in the United goal.
But that changed dramatically on 66 minutes when Mane got down the left and crossed, with the ball hitting Bailly's heel and going into the bottom corner despite De Gea getting a touch.
The United defender was hurt in the incident but got back to his feet after treatment and Jose Mourinho opted to make a change, taking off two-goal Rashford and replacing him with midfielder Marouane Fellaini.
Lukaku got away down the right and looked for Valencia as the game entered its final 20 minutes only for the move to fizzle out with the home side struggling to keep possession.
Mane tried another strike from the edge of the area but again the home defence held firm, and at the other end Sanchez almost gave Alexander-Arnold the slip before Liverpool got the ball away.
Klopp made another change as the game entered its final 10 minutes, bringing on midfielder Georginio Wijnaldum for Alexander-Arnold, and Robertson made way for Dominic Solanke as Klopp committed to all-out attack in search of a late equaliser.
Lallana crossed towards the far post where Matic produced a firm header clear, with Bailly doing likewise as Milner fired in another cross for the visitors.
Mourinho brought on Jesse Lingard for Juan Mata as the clock ticked towards injury time, with Valencia going into the book for a foul seconds later when Mane looked to be getting away from him.
Six minutes of injury time were given -- but United held on despite a flurry of late Liverpool corners.