Portadown made an encouraging start and threatened inside the opening minute when Divin Isamala headed over from Mikey Hewitt's corner, before Chris Johns got down well to deny Finn Flanagan.
However, Linfield took the lead on 26 minutes when they worked the ball across the edge of the box through Ethan McGee and Kobei Moore before finding McClean, who fired a low effort inside Jamie Barry's near post.
The hosts responded strongly and continued to create opportunities, with Sean O'Mahoney King coming closest in a frantic end to the first half when his effort struck the post before he sent another chance narrowly wide moments later.
Portadown maintained their attacking threat after the restart, with Johns turning Kennedy's powerful effort behind as the hosts searched for an equaliser.
Their pressure finally told after 82 minutes when Hewitt's cross struck the hand of McCullough and referee Steven Gregg pointed to the penalty spot.
The resulting penalty was driven low into the bottom-right corner by Kennedy beyond Johns to bring Portadown level.
The Ports almost completed the turnaround immediately afterwards as James Teelan burst forward from the restart and fired narrowly wide.
Both sides pushed for a winner during a frantic finish, with Teelan also curling over in stoppage time, but Portadown held on to collect their first point.