Windham is situated in Rockingham County in southeastern New Hampshire, approximately 3mi north of the Massachusetts border.
According to the United States Census Bureau, the town has a total area of , of which is land and is water, comprising 3.80% of the town.