저는 대학의 Unix 관리자입니다. 두 개의 웹 서버가 있습니다. 하나는 교직원을 위한 것이고 다른 하나는 대학 공식 네트워킹 팀을 위한 것입니다. 공식 웹 서버는 강사의 웹 페이지에 대한 요청을 프록시하기 때문에 두 개의 별도 서버이더라도 강사와 브라우저의 관점에서는 하나의 서버처럼 보입니다.
교사들의 혼란을 피하기 위해 공식 서버의 포트 22(socat 사용)를 교사 서버로 전달하고 공식 서버의 sshd가 다른 포트에서 수신하도록 했습니다. 이렇게 하면 교사는 공식 서버의 DNS 이름이더라도 mycollege.edu로 SSH를 통해 접속할 수 있습니다. 이는 네트워크 팀이 혼란스러울 가능성이 더 높다는 것을 의미하지만 수백 명의 교수진이 혼란스러워하는 것보다는 훨씬 낫습니다.
저는 Fail2Ban을 사용하여 무차별 SSH 로그인을 보다 관리하기 쉬운 숫자로 유지합니다. 교직원 서버에 대한 모든 SSH 연결은 공식 서버에서 오기 때문에 이 두 웹 서버에서는 작동하지 않으며 공식 서버의 연결을 차단하고 싶지 않습니다.
제가 하고 싶은 것은 서버에서 실패한 로그인을 추적하여 공식 서버가 소스 IP를 차단하도록 하는 방법을 찾는 것입니다. 문제는 공식 서버는 소스 IP를 알고 있지만 어떤 로그인이 실패했는지 알지 못하는 반면, 교직원 서버는 어떤 로그인이 실패했는지 알지만 소스 IP를 모른다는 것입니다.
공식 서버와 교직원 서버 사이의 연결에서 소스 포트를 추적하면 이를 수행할 수 있을 것입니다. 관계자는 원래 연결의 소스 IP와 교수 서버에 대한 후속 연결의 소스 포트를 알고 있습니다. 교직원 서버는 공식 서버의 소스 포트를 알고 로그인에 실패했다고 판단합니다.
기본적으로 공식(외부) 서버에는 외부 소스 IP 및 내부 소스 포트에 대한 로그를 보관하고, 교직원(내부) 서버에는 내부 소스 포트 및 로그인 실패 로그를 보관합니다. 그런 다음 교사 서버의 로그 항목을 공식 서버로 보내면 해당 로그 항목을 분석하고 적절하게 방화벽을 설정할 수 있습니다.
그래서! 내 질문은 다음과 같습니다.
- 미친 생각이지만 더 쉬운 해결책이 있습니까?
- 이것이 미친 것이 아니라면 내부 소스 포트 정보를 수집하는 가장 좋은 방법은 무엇입니까? Socat(외부 공식 호스트)는 일부 내용을 기록할 수 있지만 소스 포트를 호출하는 것이 내부/교사 호스트(tcpdump 사용)에서 보고 있는 연결의 어떤 것과도 일치하지 않는 것 같습니다.