The bevel modifier you're using is causing some bad and overlapping geometry that's making the subsurface modifier mess up. You can see this if you apply the modifier and then poke around at the mesh:
You can also see that if you enable the "adjust edit cage to modifier result" option, the lines that it creates are very unhappy:
One of the key things to understand when working with subsurface meshes is that the more source/control polygons you have affecting a area, the sharper the curvature in that area becomes. So, the primary method of shaping corners on these meshes is adding new edgeloops.
Here's an example of sharpening up this mesh using only edgeloops. The very first thing I did was loop select, extrude, scale the top edge of the cylinder because with with subsurf, if you have something coming together at a point like a cylinder it works much better if you have a final loop of perfectly planar quads; inside that you can usually fill the remaining flat hole with a n-gon or triangle fan or whatever and not have it come out lumpy or strange. Every other thing I did was just single ctrl-r loop cuts.
I did this quick and sloppy without much care for symmetry and it still doesn't look far off. If I wanted good symmetry I'd probably use a mirror modifier, and if I wanted more accuracy I'd work on the un-modified edit cage, though I do recommend working with the modified edit cage when you can because it helps get a feel for how the subsurf works. (Though do be careful of putting edges directly on top of each other, because they won't look like it in that mode.)
You can also use the manual bevel tool in some cases to add sharpening geometry, and sometimes you can get the right effect with the crease tool, though i've never had much luck with the latter.
If you need a model much more sharp and precise than this, I'd suggest learning some non-subsurf modeling techniques instead; you can make good looking curved pieces with just shade-smooth and an edgesplit modifier in many cases. That's also where you'll want to use the bevel modifier, because in plain modeling unbeveled edges tend to stand out and look bad.