They're based on hours you spend on the forum.
From threads we've had in the past:
Volunteer - 0h
Private - 10h
Corporal - 20h
Sergeant - 30h
First Sergeant - 40h
Sergeant Major - 50h
Second Lieutenant - 60h
First Lieutenant - 200h
Captain - 400h
Major - 500h
Lieutenant Colonel - 700h
Colonel - 1000h
Brigadier General - 1500h
Major General - 2000h
Lieutenant General - 3000h
General - 5000h
Commander in Chief - 10000h