This is a bit contrarian, but security-wise I don't differentiate between an internal server and an external server. Sooner or later someone will make a mistake in a firewall, management will insist a server be exposed because of an important client, Betty in accounting will somehow get a vpn client on her infected home machine, etc.
That said, layers are your friend, and you should blacklist by default.
Layers - you should have multiple layers of security. For instance, a hardware firewall and a software firewall. These theoretically serve the same purpose, but having multiple layers protects against mistakes and mitigates consequences of a single layer being exploited.
Another aspect of layering is "homeycombing", which is essentially multiple DMZs. At some point you have to have some level of trust between your machines and of the people accessing your accounts. If you can narrow those points of interaction, you can tightly control the kind of traffic you trust at any point. For instance, if you separate you interface/app servers from your database servers, you narrow the level of trust. If your app servers become compromised, those attackers gain a minimal foothold to your infrastructure (that is, in order to continue their attack and attempt to exploit your other servers, they only have those established trust points to use).
Regarding blacklisting by default, you should basically shut everything down and demand (even if it's only of yourself) justification for every port you open, username you allow access, app you install, etc.