Here is what we do, at a high level. We are fairly optimized but there are many alternate routes that can obtain great performance. Ezoic is a good example. Avoid passbacks -- use header/server-server bidding. Passbacks kill CPM.
We leverage Google Ad Manager as our ad server (previously known as DFP). We use header bidding via the opensource prebid.js script. We have roughly 5 header bidding partners in the stack. You have to negotiate these deals one by one and can get better splits with them (20-25%). In addition to this we fold server-server bidding into the prebid header via both Amazon (UAM in this case, https://aps.amazon.com/aps/index.html) and Media.net. Google adsense competes with everything on a price priority level. Basically, Adsense has incredible fill (every impression almost always filled) but not always the highest rates (and they take a ~32% cut). ref: https://support.google.com/adsense/answer/180195?hl=en
If you are not familiar with header bidding (or server to server) it works like this. On every page load the header bidding code (prebid.js for example) will query all your header bidding ad partners for them to "bid" on your on-page inventory in a "blind" fashion (best bid without knowing what anyone else bids). As a part of your header, the server-server auction occurs as well where those ad networks/partners will provide their bids. After a set time (typically you set to around 700ms or so) the auction ends and all bids are passed back to Google Ad Manager. Google also then bids on your inventory (blind to the other bids). The highest bid wins. Since your header bidding ad partners typically pay more but have less "fill" you end up with a situation where they win say 10-30% of the time and pay you a lot more on a CPM basis (and you may negotiate a cut of 20-25% with them versus 32% to Adsense). The rest of the time adsense will win and fill the remaining inventory. The net effect is you make more.
If I had to pick one network to use if you don't have time for many others, then I'd probably pick Amazon UAM in concert with Admanager, with adsense set up in price priorty. AUM has a solid set of ad networks they pull in, and they also allow direct Amazon ads (re-targeting, yay!) to your users which convert and hence pay well. There are no pass-backs since in this config its actually all server-server bidding w/ Admanager and adsense competing on price priority.
So back to the forum. Some ideas.
320x50 (or 100) ad above the topic but under the topic title. 300x250 ad under post 1. Another 300x250 ad somewhere around post 8 (assume 15 posts per page). 300x250 ad under the last post but before the reply box. On the index and forums pages, put a 320x50/100 at the top and one at the bottom. On the forum index if you have tons of forums then place an ad in the middle between categories.
Do the above, but use 728x90 ads instead of 320x50/100 and 300x250. Also ad a 160x600 ad unit on topic pages on the right. Make sure (this is important) that in the Admanager code you have custom ad sizes for each browser width. This is important so when someone shrinks the screen and IPB hides the right column in the responsive view, that ad is not called on a page load. That can be a major no no. You do this as follows in the page header (ref Google docs for more info.. this is just the key code elements):
for browsers wider than 980 pixels show the 160x600 pixel ad. Else show nothing (no ad)
var mapping_skyscraper = googletag.sizeMapping().
addSize([980, 200], [160, 600]).
addSize([0, 0], ).
googletag.defineSlot('/123456/Forums-Topic-Side', [160, 600], 'div-gpt-ad-123456-1').defineSizeMapping(mapping_skyscraper).addService(googletag.pubads());
Also, to show mobile ads versus desktop it is as simple as mapping like below, where above 768 pixels wide will show the 728x90 ad and below that will show a 300x250 ad unit (on page load):
var mapping_leader_rectangle = googletag.sizeMapping().
addSize([768, 200], [728, 90]).
addSize([0, 0], [300, 250]).
Now more advanced, you can do things like put conditional statements in the templates to not show certain ad units to members with post counts higher than some amount. I find that useful to reward frequent posters. Or you can filter by groups. This is all custom but not that hard.
Hope that helps some. I didn't proof my above notes too well so pardon any short hand or typos!
Note, I'm not sure on the UAM minimum page views to be accepted. If they don't let ya in then you can certainly find many header bidding partners that will let you in.