Millwall defended well before the interval and looked dangerous themselves at times going forward, but were torn apart by some clinical Town finishing.
Millwall had the first chance when Andy Marshall got down well to block Dennis Wise's low shot in the fourth minute.
Town should have scored five minutes later when Pablo Counago intercepted Stuart Nethercott's slack pass but his poor touch allowed Tony Warner to block, and Jim Magilton chipped the rebound against the bar.
The visitors had the better chances before the break - Steve Claridge missing a volley straight to Marshall and Nethercott glancing a header just wide from a Steven Reid cross.
Town went ahead 12 minutes after the break when a poor corner by substitute Darren Ambrose was cleared only to the edge of the box where Tommy Miller thundered a shot in to the top corner.
Millwall were level just seven minutes later when Reid fired home from a Neil Harris pass, and he could have scored again in the 68th minute, blazing a good chance wide.
Ipswich made the most of the let-off, and regained the lead in the 74th minute when former Millwall trainee Jermaine Wright fired a 30-yard screamer in to the corner of the net.
The points were sealed in the 79th minute when Jamie Clapham crossed form the by-line for substitute Marcus Bent to coolly slot in to the corner.
Town rubbed salt further in to the wounds four minutes from time when Ambrose was bundled over by Robbie Ryan, and Miller slotted home the penalty.
It could have been even worse in stoppage time when Magilton clipped a clever angled effort against the bar.