The temporal solution I did is bound all the opened ports to programs, this means, the ports are open only when the program that uses the port is running. By this way, if I get attacked on those ports I just have to restart the server and the port will be closed when the OS reboots, so you can access the machine.
I'm not sure if my method will work well, since I just got small attacks (800k botnets attacks), and didn't last for too long, but right now is the only afford-able solution since I don't have the money for pay a hardware firewall, that is the only real solution, through still it doesn't protect the server at 100% against DDoS.