I am new to Ethereum. We want to be able to receive funds (ETH and ERC20 tokens). It seems that exchanges do not allow to send funds to smart contracts, is it possible vice versa to send funds from contract address to exchanges or is it necessary to send them to a "normal" address first?
tl;dr - Yes, that should be possible.
Exchanges don't allow you to send to smart contracts because the gas needed to transfer the funds is higher and variable (depends on the smart contract that receives the funds). Also, if they don't use enough gas when sending the funds, the transaction fails, the gas is all burned and the funds don't reach their destination, while some amount of ETH is lost (the cost of gas). If the above is repeated several hundred times/day, we can imagine the loss they would incur.
When you deposit funds to them, they don't care where those funds are coming from, because the sender pays the gas.