SSH 로컬 포트 ​​전달을 비활성화하는 방법?


20

Ubuntu 및 OpenSSH 데몬을 실행하는 서버가 있습니다. S1이라고합시다.

클라이언트 컴퓨터 (이 중 하나를 C1이라고 함) 에서이 서버를 사용하여 원격 포트 전달을 사용하여 SSH 역 터널을 수행하십시오.

ssh -R 1234:localhost:23 login@S1

S1에서는 기본 sshd_config 파일을 사용합니다. 내가 볼 수 있듯이 S1에서 올바른 자격 증명 {login, pwd}을 가진 사람은 누구나 S1에 로그인하여 원격 포트 전달 로컬 포트 ​​전달을 수행 할 수 있습니다 . 이러한 자격 증명은 나중에 인증서가 될 수 있으므로 인증서를 잡는 사람은 다른 곳에서 (C1은 아님) S1에 로그인하여 로컬 포트 ​​전달을 만들 수 있다는 것을 이해합니다.

나에게 로컬 포트 ​​전달을 허용하는 것은 일종의 공개 프록시를 만들 수 있기 때문에 너무 위험합니다. -L 전달 만 비활성화하는 방법을 찾고 있습니다.

다음을 시도했지만 로컬 및 원격 전달을 모두 비활성화합니다.

AllowTcpForwarding No

나는 또한 다음을 시도했는데, 이것은 -L에서 SX : 1 만 허용합니다. 아무것도 아닌 것보다는 낫지 만 여전히 "필요한"옵션은 아닙니다.

PermitOpen SX:1

그래서 방법이 있는지 궁금해서 모든 로컬 포트 ​​전달이 다음과 같은 것을 작성하는 것을 금지 할 수 있습니다.

PermitOpen none:none

다음은 좋은 생각입니까?

PermitOpen localhost:1

항상 그렇듯이 근본에 도달하십시오. 실제 문제 는 무엇입니까 , 왜 모바일 / 임베디드 장치에 대해 이와 같은 것을 설정하고 싶습니까?
akira

여기서 해결해야 할 문제는 장치가 NAT로 연결되어 있거나 방화벽에 연결되어 있지 않기 때문에 인터넷 어디에서나 인터넷에 연결된 모바일 / 임베디드 장치로 텔넷 세션을 열 수 있다는 것입니다. 인터넷에서.
SCO

텔넷 .. 무엇을 위해? '스턴'에 대한 방화벽 구글에 펀칭 구멍을위한
아키라

답변:


16

로그인 자격 증명을 가진 사람은 임의의 포트에서 실행되는 -s 로컬 전달을 포함하여 자신의 sshd 인스턴스를 가져올 수 있습니다.

% /usr/sbin/sshd -d -f mysshd.config -p 12345

사용자가 컴퓨터로 무언가를 할 것을 믿지 않으면 처음 로그인을 허용해서는 안됩니다.

(btw, -D 플래그는 일종의 "프록시 문제"입니다)


글쎄, 나는이 목적을 위해 매우 제한적인 계정을 설정할 수 있다고 생각한다 (예 : 사용자를 집, 목록 없음, 파일 시스템 탐색 없음). 그래서 시작하고 sshd (또는 sshd 바이너리를 설치하고 시작할 수 없음) 할 수 없습니다. 요점은 클라이언트가 임베디드 장치 여야한다는 것입니다. 그러나 인증서가 내장되고 플래시 메모리가 덤프 될 수 있으므로 인증서가 유출 될 수 있으므로 누구나 S1에 로그인 할 수 있습니다.
SCO

해당 특정 사용자를 위해 ChrootDirectory를 사용하면 트릭을 수행하고 시도합니다!
SCO

1
authorized_keys에서을 설정하십시오 command="/sbin/nologin". 이렇게하면 서버에서 명령을 실행할 수 없습니다.
justis

"로그인 자격 증명을 가진 사람은 자신의 <whatever>를 불러올 수 있습니다"라는 문구가 거짓입니다. ssh허용되지 않는 로그인 셸이 심각하게 제한된 계정에 연결하는 데 사용할 수 있습니다. 포트 포워딩은 이러한 제한된 쉘의 보안 허점입니다. 허용 된 명령을 실행하는 것 외에도 사용자는 터널을 만들 수 있습니다.
Kaz

3
sshd_config매뉴얼 페이지 에서 인용 : TCP 포워딩을 비활성화해도 사용자가 항상 자신의 포워더를 설치할 수 있기 때문에 쉘 액세스가 거부되지 않는 한 보안이 향상되지 않습니다 . (Emphasis mine).
Kaz

17

또 다른 해결책은 특정 사용자에게만 포트 전달을 허용하는 것입니다.

SSH에서 : 확실한 안내서

sshd에서 포트 전달을 전체적으로 활성화하거나 비활성화 할 수 있습니다. 이것은 / etc / sshd_config의 서버 전체 구성 키워드 AllowTcpForwarding으로 수행됩니다. 키워드의 값은 yes (기본값, 전달 사용) 또는 no (전달 사용 안함) 일 수 있습니다.

# SSH1, SSH2, OpenSSH
AllowTcpForwarding no

또한 SSH2에는 다음과 같은 옵션이 있습니다.

# SSH2 only
AllowTcpForwardingForUsers
AllowTcpForwardingForGroups

이 구문은 AllowUsers 및 AllowGroups 옵션과 동일합니다. [5.5.2.1 절. "계정 액세스 제어"] 포트 전달을 사용할 수있는 사용자 또는 그룹 목록을 지정합니다. 서버는 다른 사람의 포트 전달 요청을 존중하지 않습니다. 이것들은 클라이언트 사용자 이름이 아닌 SSH 세션의 대상 계정을 나타냅니다 (주로 알려지지 않음).

...

대화식 로그인을 비활성화하고 원격 쪽에서 실행할 수있는 프로그램을 제한하지 않는 한이 섹션의 지시문이 실제로 포트 전달을 막지 못한다는 것을 알아야합니다. 그렇지 않으면, 지식이 풍부한 사용자는 SSH 세션을 통해 자신의 포트 전달 응용 프로그램을 실행할 수 있습니다. 이러한 설정만으로는 비 기술적 인 커뮤니티에서 충분한 억제책이 될 수 있지만 자신이하는 일을 아는 사람을 막지는 못할 것입니다.


1
기본적으로 S1에는 한 명의 사용자 만 프로비저닝됩니다. AFAIU,이 특정 경우 AllowTcpForwardingForUsers / AllowTcpForwardingForGroups를 사용하면 트릭을 수행하지 않습니다. 대화식 로그인을 금지하는 것은 사용자가 바이너리를 시작할 수 없도록하기 때문에 좋은 생각입니다. 그러나 모든 클라이언트는 여전히 -L 구문을 사용하여 허용됩니다. 따라서 가장 좋은 옵션은 다음과 같습니다. 1 / 대화식 로그인 비활성화, 2 / 가상 호스트 이름 : port로 PermitOpen. 내가 뭐 놓친 거 없니 ?
SCO

이를 확인하는 가장 좋은 방법은 설정을 시도하는 것입니다.
Christian

무료 OpenSSH 소프트웨어에서 이러한 옵션을 볼 수 없습니다. 에 대한 Google 은 일부 상용 프로그램에서 사용되는로 AllowTcpForwardingForUsers구성되어 있음 을 보여줍니다 sshd2_config. 에 대한 답변 중 하나를보십시오 : superuser.com/questions/384643/…
Kaz

^ OpenSSH에는 Match구성에 블록이 있습니다. 당신은 할 수있는 Match사용자 및 그룹에와 동봉 AllowTcpForwarding내.
Kaz

2

이제 로컬 / 원격 전달 만 허용하는 옵션이 있습니다.

AllowTcpForwarding TCP 전달이 허용되는지 여부를 지정합니다. 사용 가능한 옵션은 TCP 전달을 허용하는“yes”또는“all”, 모든 TCP 전달을 방지하는“no”, 로컬 (ssh (1)의 관점에서) 전달만을 허용하는“local”또는 원격을 허용하는“remote”입니다. 전달 만 . 기본값은“예”입니다. TCP 전달을 비활성화하면 사용자가 항상 자신의 전달자를 설치할 수 있으므로 셸 액세스가 거부되지 않는 한 보안이 향상되지 않습니다.

따라서 이미 언급했듯이 셸도 nologin으로 설정해야합니다.


0

이 문제에 대한 나의 해결책 은 sshd_config의 메인 섹션에 PermitOpen fo.local : 80 을 추가하는 것이었다 .

이는 fo.local : 80 외에 로컬 포워딩 요청을 거부합니다.


0

나는 -L 전달 만 할 수있는 방법을 찾고 있습니다.

내가 당신을 올바르게 이해한다면, 사용자는 완전한 쉘 액세스 권한을 가지지 만 나머지 네트워크를 향한 연결을 열 수는 원하지 않습니다.

SSH에서 허용하는 "로컬 포트 ​​전달"은 가능한 방법 중 하나 일뿐입니다. 다른 사람의 인스턴스 실행을 포함 socat, netcat또는 도구의 다른 수를.

Linux에서 나가고 들어오는 연결을 제어하는 ​​가장 좋은 방법은 IPTables라고하는 Netfilter입니다.

소유자 ( ipt_owner) 라는 특수 모듈이있어 로컬로 생성 된 패킷에 대해 패킷 작성자의 다양한 특성을 일치시킬 수 있습니다. OUTPUTPOSTROUTING체인 에서 유효합니다 .

특정 사용자 그룹이 생성 한 발신 패킷을 거부하는 데 사용할 수 있으므로 -LSSH 옵션 뿐만 아니라 모든 종류의 포트 전달이 허용되지 않습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.