"Overnight, Syrian regime troops moved into the village, but rebel forces sent reinforcements and were able to take control of the entire town," said Observatory director Rami Abdel Rahman.
He said the jihadist Al-Nusra Front was among the forces that had taken control of the town.
A Maalula resident, reached by phone, also confirmed that regime forces had withdrawn from the area and rebel forces were now in control.
Speaking on condition of anonymity, the resident said the situation on the ground was quiet.
"The rebels are inside Maalula, all of Maalula. The government troops have pulled out of Maalula," the resident said.
Abdel Rahman said "fierce fighting broke out between regime forces and rebel fighters overnight, and the soldiers withdrew to the outskirts of the town."
Maalula is considered a symbol of the Christian presence in Syria, and many of its inhabitants speak Aramaic, the language spoken by Jesus Christ that only small, scattered communities around the world still use.
The battle for the town left at least 17 rebels dead and more than 100 wounded, the Observatory said, adding that dozens of regime forces and pro-militia members were also killed or wounded in the fighting.
The clashes erupted on Wednesday, when Al-Nusra Front fighters and other Islamist rebels attacked a regime checkpoint at one entrance to the town.
The advance raised fears of attacks against churches or Christians in the town, and on Friday, the opposition Syrian National Coalition said rebels had withdrawn from the area.
"Free Syrian Army (FSA) units on Wednesday destroyed posts at Maalula and Jabadine held by the army on the Damascus-Homs road after fierce clashes with President Bashar al-Assad's forces and auxiliaries," the Observatory said in a statement on Friday.
"The FSA was stationed for several hours in the vicinity, but did not attack any church or convent," it said.
On Saturday, the Observatory said rebel forces were fighting pro-regime militias in the west of the town, and was also engaged in clashes with Syrian troops on the outskirts of Maalula.
(Voice of Russia, AFP)