AFAIK it's up to the phone to try and connect to your network, and it is up to
you to reject that. If it thinks it is going out of "own" coverage (as if
passing a border) it will try to start roaming.
A phone can only "go into the black hole" away from another operator's
coverage
when your CN accepts the Location Updating Request.
3GPP TS 24.008 4.4.1 describes LU Reject. IIUC, if you reject a LU with cause
'PLMN not allowed' you will still see requests popping up, but once rejected,
those MS should not try again.
If you're using osmo-msc, it seems the only remotely similar reject cause we
implement is "IMSI Unknown in HLR", which happens when osmo-hlr responds with a
LU NACK (i.e. doesn't know the IMSI).
"Roaming not allowed" could also be a good reject cause.
Maybe some new configuration for reject causes could help, but am not sure how.
Seems to be the HLR's job, so, such a feature in MSC could be a layer violation.
(osmo-bsc used to filter attach requests by IMSI, but we dropped that.)
For the record, it's also important to send in the System Information that you
are not providing emergency calls, see bsc cfg.
~N