I'd say that in the common speech, and in terms of fireworks, these two words are practically synonymous, with фейерверк being a bit more formal.
There may be some difference, but it's very subtle. At least to my ear, салют refers only to the fireworks that fly really high (10-20 meters at least), while фейерверк can also refer to smaller types of fireworks (2-3 meters high, or even tabletop). Also, фейерверк may be better suited to the item itself (the pack that you ignite to start fireworks), e.g. to my ear, when you go into a store to buy some fireworks, it's better to say фейерверк — while салют is better for the show itself, or the process of launching them. But maybe that's only me, and others may not see this distinction.
Another, and maybe more important point is that салют is more celebrational, and even commemorative. You wouldn't say «фейерверк в честь чего-то», but «салют в честь чего-то». Conversely, in reference to unintended fireworks (e.g. an ammunition store catching fire with lots of explosions and so on) the word «фейерверк» is more likely to be used to describe what goes on.
Finally, as you may know, the word салют has other meanings that фейерверк does not. It may mean the official military greeting gesture (salute, no relation to fireworks at all), and it may also mean a gun salute, when a gun or cannon is fired to show respect (only tangentially related to fireworks, but may explain how the word салют came to mean fireworks, especially those of a celebrational/commemorative type).