O'Neil came close once more midway through the half, but his header sailed narrowly over the bar following Conor Townsend's cross.
Madden came close to giving Scunthorpe the lead, but the ball just evaded him after O'Neil's low cross.
Crewe got off to a flying start after half time, with Leigh scoring first after his 20-yard strike struck the underside of the bar and went into the net.
One minute later, Haber doubled the home side's lead with a header from close range after James Jones's cross.
Hakeeb Adelakun almost got one back for Scunthorpe, but his long-range attempt was parried out for a corner by Rachubka, who saved from O'Neil late on to maintain his clean sheet.
The visitors failed to make any of their late chances count, meaning that Crewe claimed all three points in their first win in five matches.