The lower house of Russia's parliament, the Duma, has approved a controversial bill which sharply increases fines for violations of laws on public rallies.
The bill boosts fines from the current 5,000 rubles (£99; $152) to 300,000 roubles for participants and up 600,000 roubles for officials.
Opposition lawmakers had unsuccessfully tried to delay the vote by submitting nearly 400 amendments.
Critics have accused the ruling pro-Kremlin party of destroying freedoms.
The bill is now expected to be debated in the upper house on Wednesday.
It will then require President Vladimir Putin signature, and could become law before a planned anti-government street protest in Moscow next week.
With the pro-Kremlin United Russia party enjoying a majority in the parliament, there is little doubt the legislation will be adopted, the BBC's Steve Rosenberg in the Russian capital reports.
About 20 activists protesting outside the parliament were detained by police.
'Draconian' bill The bill was adopted after more than 11 hours of heated discussions in the Duma by a 241-147 vote.
The legislation also restricts where public protests can be held and what form they can take, including the ban on covering faces by participants.
Gennady Gudkov, an MP with the opposition Just Russia party, described the bill as "draconian", saying it reflected the Kremlin's "fear of people".
"It is the path toward civil war, it is the path towards massive repression and we all know how that ends: in blood, poverty and revolution," Mr Gudkov said.
Human rights activists have said that the bill violates Russia's constitution on the right to free assembly.
Mr Putin has recently publicly expressed his support for the bill.
"We must shield our people from radical actions," the president said.
Russia has seen a number of huge anti-government protests following parliamentary elections in December, which the opposition says were rigged. The authorities deny the claim.
Unauthorised spontaneous protests have been held since Mr Putin's inauguration as president for the third time on 7 May, and demonstrators have clashed with police.