There are various apps you can buy for making ringtones for your iPhone, however if you have a Mac, you can very easily use Garageband to do exactly this, it will also very easily move the ringtone from Garageband to iTunes and then it can be synced to your iPhone.
First create your ringtone in Garageband. I have used music from my iTunes collection by dragging it in and cropping the track to the piece that I want to use as a ringtone. You could of course record a ringtone, use Apple loops to compose a ringtone, or even use the different iLife effects to create a soundeffect ringtone.
Once you are happy with your ringtone, from the menu
Share -> Send Ringtone to iTunes
Basically that’s it.
Of course it can much easier on other phones that allow you to use music tracks or mp3 files straight off as ringtones!