Tengo una aplicación Java (que no se ejecuta en ningún contenedor de aplicaciones) que escucha en un ServerSocket para las conexiones. Me gustaría que solo acepte conexiones que provienen de localhost. Actualmente, después de que se acepta una conexión, comprueba la IP par y la rechaza si no es la dirección de bucle invertido, pero sé que las direcciones IP pares pueden ser falsificadas. Entonces, si es posible, preferiría vincularme a un socket que solo escucha en la interfaz loopback; ¿es posible?¿Cómo puedo hacer que un socket acepte conexiones solo desde el localhost (en Java)?
He intentado algunas cosas diferentes (como especificar "127.0.0.1" como la dirección local al llamar a bind()) sin suerte. Gracias por adelantado.
Gracias a todos por su ayuda. Me avergüenza admitir que esto fue todo mi error. Nuestra aplicación escucha en dos puertos diferentes, y yo estaba vinculando uno a la interfaz de bucle de retroceso, pero la prueba en contra de la otra. Cuando trato de hacer telnet en el puerto correcto, todo funciona bien (es decir, el enlace a "127.0.0.1" hace exactamente lo que se supone).
En cuanto a la suplantación de identidad de la dirección de bucle invertido, tienen razón. No debería haber hecho que sonara como la principal preocupación. Realmente, el comportamiento deseado es solo tomar conexiones locales, y enlazar solo a la interfaz local es una forma más directa de lograr eso que aceptar todas las conexiones y luego cerrar las no locales.
¿De dónde sacó la información de que 127.0.0.1 puede ser falsificado? Soy escéptico –