Why does adding a bevel mess up a hole?
By default, the Bevel modifier adds bevels to every edge of your mesh, including all the edge loops and the ones around the hole. That's why it messes up your mesh.

To fix this, simply toggle the limit method of the Bevel modifier to "angle", and adjust the angle threshold, so that only the outer edges are affected. 



Alternatively, you can change the bevel limit method to "weight"; and in edit mode, select certain edges which you want to add bevel to, and adjust their bevel weight in the item tab (press N to bring up the tab if it's hidden). 



The advantage of this method is that you can precisely control where and how much the bevel modifier takes effect. A bevel weight of 1.0 means full depth, and 0.5 bevel weight means half depth, etc.

BTW, your cube mesh currently has unapplied scale transform (its Z scale value isn't 1). This will cause the bevel to appear wider along Z axis. You may want to apply its transform (select the object, Ctrl+A, and apply scale) before applying the bevel modifier.