England were 211 for six at the interval, still 264 runs behind South Africa's first innings total of 475. Rabada dismissed Joe Root, James Taylor and Jonny Bairstow in quick succession to have figures of five for 76 - his second five-wicket haul in successive matches.
Root, who hit a century and two fifties in the first three Tests, made 76 off 128 balls with 11 fours before edging a good delivery from Rabada to wicketkeeper Quinton de Kock.
Alastair Cook and Root made their third wicket stand worth 99 with largely watchful batting, adding 37 runs in an hour before Morne Morkel dismissed Cook.
The tall fast bowler, who had been wayward, followed up a wretched wide with a superb delivery from around the wicket which squared up Cook, straightened off the pitch and found the outside edge for wicketkeeper Quinton de Kock to take the catch. Cook made 76 off 186 balls with 11 fours.
Taylor made 14 before getting a top edge to a pull shot against a bouncer from Rabada and Bairstow was out when he gloved the third ball he faced from the fast bowler to De Kock, who took his fourth catch of the morning.