Daymond Langkow, Dion Phaneuf and Chuck Kobasew also scored for the Flames, who have won two straight games on their current six-game homestand.
With the win, the Flames (19-14-4) kept pace with the Minnesota Wild (20-17-2), who downed the Anaheim Mighty Ducks 4-3. Both teams have 42 points to sit atop the Northwest Division, although the Flames have played two less games than the Wild.
Ryan Smyth scored both goal for the Oilers (18-18-2), who have now lost four straight games and sit tied for last in the Northwest Division at 38 points with the Colorado Avalanche.
Jarrett Stoll had two assists for the Oilers, who went 2-for-8 on the power play.
Edmonton had a great chance to score in the game's first minute as Smyth had a clear-cut breakaway, but Calgary netminder Miikka Kiprusoff made a pair of pad saves before covering up the rebound.
Calgary jumped out to a 1-0 lead at 5:48 of the first when Kristian Huselius spotted Iginla in the slot and feathered him a nice pass. The Calgary captain wired a one-timer past Edmonton goalie Dwayne Roloson, who was screened by his own defenceman Jason Smith on the play.
Less than four minutes later, Iginla fought for the puck along the boards behind the Oilers net with Roloson and came away with it before centring a pass to Langkow who deposited it into an empty net to put the Flames up 2-0.
Just 49 seconds into the second period, Phaneuf wristed a point shot past Roloson, who was screened by Langkow, during a Calgary power play.
The Oilers then responded on a man advantage of their own when Smyth tipped a point shot by Daniel Tjarnqvist into the top corner past Kiprusoff.
The Flames regained their three-goal lead at 3:53 of the middle frame when Alex Tanguay spotted a streaking Kobasew and hit him with a perfect pass in front of the Edmonton net. Kobasew swatted it past Roloson to record his first goal in 13 games.
In the third, Smyth redirected a pass from Stoll past Kiprusoff during a two-man advantage for the Oilers to narrow the deficit to two goals.
That's as close as they would get though as the Flames held on for the victory behind a 22-save performance by Kiprusoff. Meanwhile, Roloson finished the game with 20 saves.
Notes: Calgary defenceman Roman Hamrlik returned to the lineup after missing seven games with a groin injury. During that span the Flames recorded a 3-3-1 record. ... Heading into the game, the Oilers were ranked first in road penalty killing with a 93.7 per cent efficiency rate having allowed just six power-play goals in 95 short-handed situations. ... This is the third time the Flames and Oilers have met on New Year's Eve in Calgary. The teams tied 2-2 on Dec. 31, 2001, while the Flames skated to a 6-5 victory one year ago at the Saddledome.