Malavan player Hadi Ta'mini scored the opener in the 8th minute of Thursday's match, bringing euphoria among home side fans in northern port city of Bandar Anzali.
Shortly after the interval, Esteqlal could have pulled the game level through striker Arash Borhani, but he failed a one-against-one chance to keep the result intact.
Later into the game, Malavan doubled their advantage in the 57th minute when Mehrdad Oladi found himself in the box and scored his side's second goal.
The hosts had one player sent off in the 64th minute following a controversial scene to see opening goal's scorer leaving the pitch.
Ten minutes later, Esteqlal drew one goal back through captain Farhad Majidi, who found a loose ball behind the box and fired the ball into the net to close on Malavan.
However, the hosts won the game 2-1 to reach the finals.
Elsewhere in the southern city of Ahvaz, Vahid Hashemian scored in the 64th minute to register a 1-0 victory for Tehran's Persepolis over Foulad.
Persepolis will play Malavan in the final match next week.