When I visit my external IP, it just shows the same page as my domain. Am I supposed to hide it?
Por que você quer esconder? O IP e seu site são informações públicas. Não há segurança a ser obtida ao tentar esconder qualquer um deles.
And when I go to mydomain.com/phpmyadmin, the php page doesn't run and it's downloaded to my computer.
Como você instalou o phpmyadmin?
Esse problema indica que os scripts php não estão configurados para serem executados nesse servidor virtual.
Se você instalou usando o apt-get, não seria esperado que ele trabalhasse em uma configuração padrão Virtualmin (apesar de você receber um erro 501 ao invés de baixar o arquivo), porque o Virtualmin configura o suexec para todos os servidores virtuais. O Suexec é um recurso de segurança que faz com que os scripts sejam executados como o proprietário da conta do servidor virtual, em vez do usuário do Apache. O pacote phpmyadmin do Debian / Ubuntu apt repositories é executado dentro da raiz do documento padrão, e precisaria ser executado como o usuário do apache. Então, você precisará desativar o suexec para o servidor virtual no qual deseja executá-lo, configurar um servidor virtual especificamente para essa instalação do phpmyadmin que tenha o suexec desativado ou instalar o phpmyadmin no diretório public_html do servidor virtual que você deseja que ele seja executado e pertencente a esse usuário. O Suexec irá não executar aplicativos que não são de propriedade do dono do domínio ou fora do suexec docroot (e seu phpmyadmin é supostamente de propriedade do usuário do apache e fora do suexec docroot).
Mas, o seu problema específico é que os scripts php não estão sendo executados no local onde o phpmyadmin está instalado.
Quanto à segurança, há três coisas que são as fontes mais comuns de servidores explorados no mundo, e não estão relacionadas a nenhuma das suas perguntas:
- Sempre atualize o software. Virtualmin mostrará pacotes que estão desatualizados, assumindo que você usou nosso script de instalação para configurar, e você usa pacotes para tudo. Se você não usou o script de instalação, deverá instalar o módulo webmin-security-updates. A maioria dos sistemas explorados acontece porque ele possui um velho software explorável. Aplicativos da Web podem ser um pouco mais difíceis de manter atualizados, já que eles geralmente não vêm de pacotes do sistema, então você provavelmente precisará ficar de olho neles manualmente.
- Use senhas strongs. Uma senha strong é aquela com números, letras e possivelmente caracteres especiais. Tem 8 ou mais caracteres de comprimento. É alterado pelo menos uma ou duas vezes por ano.
- Não execute serviços desnecessários. Examine sua lista de processos e seus aplicativos de inicialização e verifique se você sabe o que todos eles fazem e, se não precisar, desligue-os. Se você não sabe o que faz, o Google faz.
Essas três coisas sozinhas impediriam 99% dos sistemas explorados que eu vi em meus 15 anos de administração do sistema. Não se distraia com o teatro de segurança até que você tenha conseguido essas três coisas e as tenha feito parte de sua rotina diária de administrador de sistemas. Depois disso, você pode se preocupar com o que quiser sobre outras coisas (mas provavelmente não fará muita diferença na segurança do seu servidor se preocupar com um monte de outras coisas).