Matthias Ginter's goal midway through the first half gave Christian Streich's side the lead and they withstood a ferocious fightback attempt before Francis Coquelin made it two. Serhiy Rybalka pulled a goal back late on, but Freiburg held on to set up a grand finale in Baden-Württemberg on 12 December.
Buoyed by their Bundesliga win over Eintracht Braunschweig at the weekend, Freiburg made a bright start in Liberec, playing with authority and carving out the first opportunity when Christian Günter hooked in a deep cross in which goalkeeper Premysl Kovar managed to tip behind. That was not an end of the danger, though, as the resulting corner heralded the opening goal.
Kovar let the ball through to Ginter, who this time found the target with another hooked effort, the ball skimming the head of Pavel Krmas on its way in. It was just what Freiburg needed, and they continued to seek their fortune down the left wing, where the lively Nicolai Lorenzoni was tormenting right back Ondrej Kusnir.
Post to the rescue - twice
Liberec had two good chances at the end of the first half, but came to life at the start of the second, finding a way round the back with some neat interplay as the post came to Freiburg's rescue to deny Michael Rabusic. The same Liberec player hit the other post minutes later, and the warnings were clearly there.
Liberec were clearly keen not to lose their unbeaten record in Europe this season, but Freiburg responded when they could, Günter putting his head down, dribbling past three men and lifting a teasing cross for Coquelin to relieve the pressure with a close-range header making it two. Liberic did pull a goal back in the closing stages, but Freiburg held on to leave their European destiny in their own hands.
Liberec: Kovar – Kusnir (72' Pimpara), Kovac, Kelic, Fleisman - Rybalka, Sackey – Sural (77' Kalitvintsev), Pavelka, Delarge (58' Frydek) - Rabusic
Freiburg: Baumann - Sorg, Diagne, Krmas, Günter – Lorenzoni ('90 Höhn), Ginter ('89 Albutat), Fernandes – Kerk (60' Freis), Coquelin – Hanke
Goals: 0-1 (Ginter 23'), 0-2 (Coquelin 73'), 1-2 (Rybalka 81')