Oswalt (1-2) scattered five hits and struck out six in notching his first win of the season. Towles collected three hits, including and RBI single, while Jeff Keppinger also drove in a run.
Matt Lindstrom collected his first save of the season after pitching the ninth inning.
The Cubs staged a late rally, scoring three runs in the eighth, but their efforts fell short. Aramis Ramirez stroked a two-run double and Alfonso Soriano doubled home another run in the frame.
Chicago starter Tom Gorzelanny (0-1) came out after three innings when he was hit on the pitching arm by a line drive. He allowed two runs on three hits and a walk before being lifted.