Leicester's Heineken Cup bid ended in the quarter-finals as last season's beaten finalists Clermont extended their unbeaten home run to 75 games.
Wesley Fofana's try and three penalties and a conversion from Morgan Parra put the hosts 16-0 up.
Jordan Crane crossed for Leicester but Parra's fourth penalty made it 19-7.
Leicester fought back to 19-16 through Owen Williams's boot, only for a fifth Parra penalty to seal victory for the hosts.
Clermont will play Saracens, who beat 14-man Ulster 17-15, at Twickenham in the semi-finals.
The hosts withstood a spirited second-half fightback from Leicester, whose cause was undermined by a 65th-minute yellow card for substitute Thomas Waldrom.
Three Parra penalties and a typically opportunist converted try from Fofana - whose quick hands released Davit Zirakashvili before the France centre raced onto the prop's well-timed return pass to score in the 22nd minute - put Clermont in total charge with the break in sight.
The English side hit back through Crane's try following a clever cross kick from Williams, who added the conversion, but Parra's immaculate boot gave the hosts what looked like an insurmountable 12-point lead at half-time.
But a typically dogged performance dragged Leicester back into the game.
Williams landed three penalties and, with Parra and Brock James both missing the target, Leicester only trailed 19-16 on the hour.
Nerves grew around Stade Marcel-Michelin as Clermont's lead dwindled, but when Waldrom was sent to the sin bin three minutes after coming on, the balance of the match titled back in the hosts' favour.
Parra slotted a fifth penalty and, although Leicester launched one last, desperate attack, with captain Ed Slater coming within two metres of the line, replacement lock Graham Kitchener's over-eagerness enabled James to clear the danger.
Leicester director of rugby Richard Cockerill: "This is a fantastic Clermont team and we took them to the wire.
"The players got themselves into a mess and then they got themselves out if it.
"Our players showed effort, pride and character, but against a very good side we just didn't quite have enough."
Clermont Auvergne: Buttin; Nakaitaci, Rougerie, Fofana, Nalaga; James, Parra; Domingo, Kayser, Zirakashvili, Cudmore, Hines, Bonnaire, Chouly, Lee.
Replacements: Debaty for Domingo (50), Paulo for Kayser (52), Ric for Zirakashvili (69), Pierre for Hines (76), Bardy for Lee (71).
Not Used: Lacrampe, Delany, Stanley.
Leicester: Tait; Scully, Tuilagi, Allen, Goneva; O Williams, B Youngs; Ayerza, T Youngs, Mulipola, Deacon, Slater, Gibson, Salvi, Crane.
Replacements: Flood for O Williams (76), Mele for B Youngs (76), Stankovich for Ayerza (76), Kitchener for Deacon (58), Waldrom for Crane (62).
Not Used: Hawkins, Balmain, Hamilton.
Sin Bin: Waldrom (65).
Ref: Alain Rolland (Ireland).