방화벽 뒤의 Linux 시스템에 대한 원격 액세스


11

원격 위치에 일종의 공용 터미널로 Linux 시스템을 배포하려고합니다. 유지 관리를 위해 SSH를 통해 원격으로 액세스하고 싶지만 드문 경우 에이 컴퓨터에 액세스 해야하는 경우 원격 방화벽에서 포트를 열어두고 싶지 않습니다. 나는 외부의 컴퓨터에 역방향 SSH 터널을 만드는 간단한 스크립트에 대해 설명했지만 액세스해야 할 때 사용자가 아무것도 할 필요가 없습니다. 어떤 아이디어?

업데이트 : 리버스 ssh 터널을 만들기 위해 스크립트의 원래 계획을 따르기로 결정했습니다. 포트 노킹과 같은 다른 제안 된 솔루션이 실제로하고 싶은 행을 더 많이 따르지만이 경우에는 구성을 통해 사용자를 걷는 것 이외의 라우터 구성에 대한 액세스 권한이 없습니다. 전율


라우터를 구성하지 않아도됩니다. 리눅스는 방화벽 보안을 위해 충분한 iptables 방화벽을 가지고 있습니다. 그리고 항상 ssh 터널을 서버에 연결하면 연결된 호스트를 공격하는 데 취약합니다.
Kazimieras Aliulis

1
그러나 라우터에서 포트를 열어 필요한 것을 리눅스 상자에 전달해야합니다. ssh 터널이 항상 켜져있는 것은 아닙니다. 컴퓨터에 액세스 해야하는 사용자 aat이 시작합니다.
baudtack

답변:


5

포트가 열려있는 것과 관련이 없으며 포트를 여는 프로세스를 통해 사용자를 걷고 싶지 않은 것과 관련이 있습니다. 불행히도이 라우터에 전혀 액세스 할 수 없습니다.

라우터를 변경하는 것이 문제가 아닌 경우 Hamachi 와 같은 P2P 또는 VPN 솔루션을 확인해야 할 수도 있습니다 . 시작할 때 VPN 연결을 자동으로 설정하도록 시스템을 설정하면 필요할 때마다 연결할 수 있어야합니다. Hamachi는 모든 방화벽 협상을 수행합니다. 단점은 연결해야 할 때 Hamachi 서버가 작동하고 작동해야한다는 것입니다.

서버가 항상 작동중인 경우 원격 시스템이 항상 터널을 열어두고 서버에 연결되도록 autossh를 설정할 수 있습니다. 한 가지 단점은 원격 시스템이 손상되어 공격자가 ssh 세션을 설정하는 데 사용되는 키를 얻는다는 것입니다. ssh 연결을 허용하는 시스템을 실제로 잠그는 것이 매우 중요합니다.


아래는 원래 답변입니다. 라우터 업데이트가 옵션이라고 가정했습니다.

방화벽이 방화벽을 지원하는지 조사하고 싶은 한 가지 해결책은 포트 노킹 입니다. 일부 방화벽의 경우 방화벽에서 확인한 특수 패킷 세트를 전송 한 다음 방화벽을 통해 일시적으로 구멍을 열 수 있습니다.

다른 구현보다 더 나은 구현이 많이 있습니다. 일부는 강력한 암호를 사용하여 올바른 키가없는 사람이 올바른 노크를 보내는 것을 거의 불가능하게 만듭니다.


좋은 생각 인 것 같습니다! 불행히도 문제의 방화벽은 단순한 소비자 등급의 Linksys 또는 이와 동등한 제품입니다.
baudtack

1
설치할 수있는 경우 DD-WRT 당신은 (knockd 사용할 수 있습니다 dd-wrt.com/wiki/index.php/Knockd를 )
Zoredache

@Zoredache True이지만 원격 위치에 있습니다. 나는이 라우터에 액세스 할 수 없으며 dd-wrt 설치를 통해 사용자를 안내하려고 생각합니다.
baudtack

dd-wrt를 설치하기 위해 라우터에 물리적으로 액세스 할 수 있다면 이것이 올바른 설정 방법이라는 데 동의합니다.
baudtack

Hamachi는 LogMeIn이 인수 한 이후 Linux 사용자들에게 심대한 고려를 해왔습니다. Linux 시스템이 hamachi 네트워크의 일부인 경우 제품을 신뢰할 수 없습니다.
bmb

6

포트 22를 인터넷에 액세스 할 수있는 상태로 두는 것에 대해 걱정하지는 않지만 보안을 위해 몇 가지 조치를 취할 것입니다.

먼저, 키보드 대화식 인증을 비활성화하고 ssh 키로 이동하십시오.

둘째, 원격 서버에 fail2ban 과 같은 것을 시스템을 반복적으로 검사하는 블랙 볼 IP 주소에 설치 하십시오. ssh 키를 설정 했으므로 인증 된 사용자에 대한 인증 실패가 없어야합니다.

또는 WerkkreWs의 조언을 따르고 컴퓨터 앞에서 방화벽을 구성하여 VPN 연결을 종료 한 다음 원격 서버의 ssh 데몬 만 해당 VPN을 통한 연결을 허용하도록 허용하십시오.

방화벽이 VPN 연결을 종료 할 수없는 경우 GRE 또는 IPSEC 패킷을 Linux 시스템으로 전달하여 종료 할 수 있습니다.


포트가 열려있는 것과 관련이 없으며 포트를 여는 프로세스를 통해 사용자를 걷고 싶지 않은 것과 관련이 있습니다. 불행히도이 라우터에 전혀 액세스 할 수 없습니다.
baudtack

나는 당신의 고통을 이해하고 동정합니다.
Dave Cheney

2
이 솔루션의 첫 번째 단계는 sshd가 비표준 포트에서 실행되도록 구성하는 것입니다. 22 번 포트에는 많은 봇들이 있습니다. / etc / services에 나타나지 않는 포트를 선택하고 "nmap HOST"가 찾지 못합니다.
hayalci

4

당신이 노크 찾고있는 것 같아

iptables 를 사용하여 리눅스 서버 자체 에 2 단계 방화벽과 같이 설치할 수 있습니다 . 프런트 엔드 방화벽에서 포트 22가 열려 있어도 서버에서 열리지 않으므로 포트 포트에 열린 포트가 표시되지 않습니다. 그런 다음 "비밀 노크"를 보내면 갑자기 포트 22에 대한 열린 경로가 있습니다.

말이 돼?


내가 실수하지 않는 한, 모든 노크 포트를 전달해야합니까? 누군가 라우터를 스캔했을 때 분명하지 않습니까? 순서를 알지 못하지만 가능한 조합을 6으로 줄이면 순열을 올바르게 수행하는 방법을 기억하면 큰 시작을 할 수 있습니다. 아니면 내가 잘못 생각하고 있습니까?
baudtack

노킹에 사용되는 포트는 전달되어야하지만, 노킹 된 호스트는 실제로 어떤 식 으로든 노킹 소스에 응답 할 필요가 없습니다.
Zoredache

올바른-첫 번째 방화벽에서 열린 포트는 두 번째 방화벽에서 열리지 않으므로 스캐너에서는 모두 닫혀있는 것으로 나타납니다. 노킹 포트와 비 노킹 포트를 구분할 방법이 없습니다.
Brent

3

모든 답변을 요약하면 다음과 같습니다.

ssh를 사용하지만 더 모호하고 안전합니다.

보안을 위해 :

  • 루트 로그인이 허용되지 않는지 확인하십시오 (PermitRootLogin no).
  • 구성 옵션 AllowUsers 또는 AllowGroups로 로그인 할 수있는 사용자 제한.
  • 2 개의 버전 ssh 프로토콜 (프로토콜 2) 만 사용하십시오.
  • 인증 키만 사용하는 것이 좋지만 인증 키에 액세스 할 수없는 휴일부터 서버에 연결해야 할 경우 비밀번호가 더 편리합니다.

모호한 경우 :

  • ssh 포트를 20486과 같이 임의의 높은 포트로 변경하십시오. 이것은 대부분의 자동 bruteforcer를 제거하지만 서버의 모든 포트 스캔에서 숨기는 것은 아닙니다.
  • 포트에 연결하는 기능을 숨 깁니다. 한 가지 방법은 다른 답변에서 언급 한 포트 노킹이지만 모든 곳에서 액세스 할 수없는 특수 소프트웨어가 필요합니다. 또 다른 간단한 옵션은 iptables 방화벽을 최신 모듈과 함께 사용하여 규칙을 작성하는 것입니다.이 규칙은 두 번째 또는 세 번째 시도에서만 연결할 수 있습니다. 따라서 성공적으로 연결하기 위해 여러 번 시도해야한다는 것을 알고 있지만 간단한 모든 포트 스캔은 ssh 포트를 나타내지 않습니다. 규칙은 다음과 유사합니다.


iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW -m recent --set
iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW  -m recent --rcheck --seconds 60 --hitcount 2 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 20486 -j DROP


다중 시도 트릭에 대한 +1 멋진 요약 및 흥미로운 아이디어.
David Z

2

예약 된 작업을 역방향 ssh 터널에 대한 스크립트로 만들거나 방화벽 포트를 엽니 다.

SSH가 전세계에 공개되는 것이 걱정된다면 iptables 스크립트를 사용하여 유지 관리 기간 동안 작업을 예약하고 포트만 사용할 수 있습니다.


1
동의했다. VPN을 사용할 수있는 방법이 없다면 기본적으로 포트를 여는 것이 유일한 해결책입니다. 신경이 쓰이면 항상 비표준 포트를 사용할 수 있습니다.
WerkkreW

2

포트 노킹 을 살펴보고 SSH 터널을 엽니 다.

또한 거부 요청이 너무 많으면 거부 호스트를 실행하여 사람들을 잠그십시오.

두 패키지 모두 표준 Ubuntu, Fedora 및 RHEL 리포지토리에서 사용할 수 있습니다.


1

계속해서 포트를 열고 일반적인 범위를 벗어난 포트로 만드십시오. 나는 그것을 1024 이상의 임의의 포트로 만들 것입니다. 그렇게하면 해커는 그것을 찾지 못할 것입니다.


0

그러나 원격으로 머신에 액세스해야하는 경우 방화벽에 구멍을 뚫을 이유가 없습니다.

그러나 여전히 포트를 열지 못하거나 열 수없는 경우 간단한 셸 스크립트는 리버스 터널을 시작하는 명령을 제어하고 수신하는 일부 인터넷 사용 가능 리소스를 모니터링 할 수 있습니다. 이메일 계정, IRC 채널 및 웹 페이지는 트리거 장치로 즉시 떠 오릅니다.

물론 이것은 단지 포트를 여는 것보다 훨씬 덜 취하고 덜 안전합니다. 하지만 당신은 당신의 이유가 있다고 확신합니다.

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