The 22-year-old denied Eden Hazard a pair quality chances either side of the break, including one-on-one shortly after the half-hour mark.
Antonio Rudiger had picked out Hazard with a long ball that split the defence, but the effort struck Gunn on the side of the face and was turned behind.
Jan Valery would then block an Alvaro Morata attempt wide of the post with Southampton pinned in their own half for much of the opening 45 minutes against a surging Chelsea.
Saints were able to spring forward after the break and Stuart Armstrong tested Kepa Arrizabalaga from distance with the goalkeeper pushing the visitor’s best chance aside.
Gunn, who made six saves, was called back into action and made a confident stop on Hazard, who had cut in from the left before firing through space in the defence.
The introduction of Cesc Fabregas for Ross Barkley lifted Chelsea and the midfielder combined with Morata to hit the back of the net, but the goal was ruled offside.
Fabregas then picked out Ruben Loftus-Cheek, whose pass out wide played in Morata on goal, though Gunn was there to keep out the forward again with Saints finding enough to secure a point.
The point could prove vital down the line, as Southampton slipped back into the relegation zone with Burnley’s win over Huddersfield.
Chelsea: Arrizabalaga, Azpilicueta, Rudiger, David Luiz, Alonso, Jorginho, Kante, Barkley (Fabregas 68), Willian (Loftus-Cheek 37), Morata, Hazard.
Unused subs: Caballero, Christensen, Zappacosta, Ampadu, Emerson.
Bookings: Rudiger (74).
Southampton: Gunn, Cedric, Yoshida, Vestergaard, Bednarek, Valery, Romeu, Ward-Prowse, Armstrong (Austin 89), Ings (Long 46), Redmond (Stephens 90+5)
Unused subs: McCarthy (GK), Ramsay, Slattery, Elyounoussi.
Bookings: Bednarek (31), Romeu (79).