Despite a bright start from Iran, it was Bosnia who took the lead on 23 minutes when Edin Dzeko found the bottom corner with a powerful drive from just outside of the penalty area.
Carlos Queiroz's side continued to create the openings for the remainder of what was a slow-burning first half, but they were unable to breach the solid Bosnian defence.
Both teams battled hard at the start of the second half before Bosnia doubled their advantage when Miralem Pjanic rounded off a slick passing move with a calm finish.
They came close to adding a third when Dzeko poked wide on 66 minutes before Sead Kolasinac saw his effort hit the foot of the post.
Iran pulled a goal back on 81 minutes through Reza Ghoochannejhad's strike, but their joy did not last long as the Bosnians regained their two-goal advantage through Avdija Vrsajevic's powerful drive two minutes later.