Как максимально обезопасить socket.io от подключений снаружи?
никак
Как вариант передавать что-то на сервер, что позволит проверить авторизованный пользователь или нет.

Клиент
let socket = new io("http://localhost:7777", { query: "id=123" });

Сервер
io.on("connection", socket => {
    let id = socket.handshake.query.id;
    console.log(id) // 123
})

Пример проекта: https://github.com/space2pacman/pacman-chat