SSH 클라이언트 주소로 돌아가는 것을 제외하고 사용자 네트워크 액세스를 차단합니다.

SSH 클라이언트 주소로 돌아가는 것을 제외하고 사용자 네트워크 액세스를 차단합니다.

Linux 서버에서 특정 사용자 그룹이 SSH를 통해 로그인할 수 있도록 권한을 설정하려면 어떻게 해야 합니까? 그러나 연결이 SSH 클라이언트 주소로 돌아오지 않는 한 프로세스에 의한 모든 네트워크 연결이 차단됩니다. 예를 들어, 그룹의 사용자가 SSH에 접속하여 HTTP 서버(높은 포트에서)를 시작한 다음 SSH 클라이언트를 실행 중인 컴퓨터에서 해당 서버에 연결하도록 허용하고 싶지만 인터넷의 다른 클라이언트는 반드시 HTTP 서버에 액세스할 수 없습니다.

iptables를 사용하여 사용자의 네트워크 액세스를 완전히 차단할 수 있다는 것을 알고 있지만 값이 무엇이든 간에 들어오고 나가는 트래픽을 어떻게 허용합니까 $SSH_CLIENT?

답변1

당신이 할 수 있는 한 가지는 로그인 시 iptables를 수정하는 suid 스크립트를 실행하도록 하는 것입니다. 인수를 전달할 필요가 없으며 호출하기만 하면 됩니다. 그리고 .bash_login은 이를 자동으로 호출할 수 있습니다. lsof를 실행하여 상위 UID와 연관된 ssh 연결의 IP를 얻고 연결된 IP를 얻은 다음 다음과 같은 규칙을 사용하여 해당 IP를 화이트리스트에 추가할 수 있습니다.

iptables -w -A users_input -p tcp -s $ip -m owner --owner-uid $owner -j ACCEPT
iptables -w -A users_output -p tcp -d $ip -m owner --owner-uid $owner -j ACCEPT

해당 체인은 필터 INPUT 및 OUTPUT 체인에서 적절한 위치에 배치됩니다. 물론 --owner-uid를 사용하여 이전 규칙도 제거합니다. 원하는 경우 특정 포트만 허용할 수도 있습니다.

이러한 스크립트에는 오염 모드가 있는 Perl이 적합합니다.

이렇게 하면 SSH 연결이 끊어진 후에도 해당 사용자에 대해 네트워킹이 지속될 수 있습니다. 이것이 문제인 경우 연결된 SSH 연결을 정기적으로 확인한 다음 연결되지 않은 규칙을 제거하는 cronjob 또는 데몬을 사용하여 문제를 해결할 수 있습니다.

이 답변에는 "할 수 있는 일"이 많이 있다는 것을 알고 있지만 대부분은 힘든 작업입니다. -m owner 항목을 올바르게 설정하세요.

관련 정보