A pesquisa pode ser realmente útil;
Da resposta acima;
Here is a list of things I do to secure my server.
Turn on UFW (sudo ufw enable) and then only allow ports that are actually used. (sudo ufw allow 80)
Make sure MySQL only allows connections from localhost.
Enable TLS on mail services. Even if it's a self signed cert. You don't want passwords sent in the clear.
Install ssh bruteforce blockers like denyhosts or fail2ban. (sudo apt-get install denyhosts) Look into making ssh key-based logins only.
Learn AppArmor. If you use fairly vanilla configurations, then it's extremely easy. Just make sure it's turned on. It will help reduce zero-day exploits.
Depending on physical access to the server, you may even want to look at encrypting the data on the harddisk.
Follow other recommendations in this link. EDIT: I forgot to edit this when I didn't have enough reputation to add more links. The link meant here is the last link below.
Never trust your users. If you are having multiple users with access to the system, lock them down. If you have to give them sudo access, give them only what they need.
Use common sense. Think real hard about how you'd get in if you were ever locked out. Then close those holes.
Você deve procurar por "Ubuntu Hardening" e dar uma olhada na longa lista que você receberá de volta.
O UFW, mencionado na citação acima, significa Firewall Descomplicado ( link ), que é uma ótima e fácil maneira de gerenciar o IPTables.
Em relação aos ataques do tipo DDNS, talvez você queira considerar o emparelhamento do NGINX como um proxy estático de front-end para o Apache se estiver servindo conteúdo da Web e empregar algo como o CloudFlare para lidar com o DNS e a resiliência.
Há muitos artigos sobre boas práticas e configuração de serviços na Digital Ocean;
O site irmão do AskUbuntu é também uma riqueza de conhecimentos e ajuda relacionados ao seu SO;