TLDR; it might take a while to perfect your attack roster. So for now, use Poliwrath and Espeon as stepping stones.
Three of the toughest defenders are Blissey, Snorlax, and Tyranitar. (Dragonite is actually the strongest, but by now you should have a Cloyster)
Dragonite with Dragon Tail / Outrage is the best counter to both Snorlax and Blissey. And Machamp with Counter and Dynamic Punch is the ideal counter to Tyranitar.
These ideal attackers will take a while to grind out. So you’ll need some stepping stones so you don’t get locked out of gyms.
Poliwrath (Rock Smash / Dynamic Punch) is like the Honda Civic of Tyranitar. It’s cheap, accessible, and gets the job done. Fighting type gets 1.56x vs Tyranitar. Plus Fighting is resistant to Dark.
Poliwrath can be used against Snorlax and Blissey, because it has STAB Fighting moves. But there’s a major caveat.
Snorlax and Blissey have defensive non-STAB Psychic moves that are designed to punk Fighting types. So only use Poli against non-Psychic movesets.
[Edit: Fairy is super effective against Fighting. So Fighting counters get punked by Blissey 5 movesets out of 6]
For the Psychic movesets, counter with Espeon. Espeon resists Psychic, but still does its regular STAB damage against Normal.
So between Poliwrath and Espeon, you can counter all of the Snorlax and Blissey movesets. Plus, Poliwrath can double as a Tyranitar counter.