외부에서 SSH접속 안됩니다.

gilyongi의 이미지


CentOS 7을 최소설치를 하고, 공유기에서 포트포워딩으로 리눅스가 설치된 컴퓨터IP를 지정을 해주었습니다.

vi /etc/ssh/sshd_config

-> Port 22

열어주었습니다.

ip addr을 입력해서 컴퓨터의 네트워크 카드를 확인하고 동작의 이상유무를 확인 하였습니다.

sshd가 설치되었는지를 확인하였고,

방화벽 설치유무를 확인하고 포트22를 열어주었습니다.

firewall -cmd --permanent --zone=public -add-port=22/tcp

공유기에서 외부 ip 주소를 확인하여, 외부네트워크에서 ping 테스트를 해본 결과 이상이 없이 잘 작동하는 것이 확인이 되었습니다.

ping ***.***.***.***

그러나 Putty로 접속을 시도하니

'Remote side unexpectedly closed network connection'
라고 뜹니다.

혹시나 해서 동일한 공유기 내에서 접속한 윈도우 PC에서 Putty를 이용하여 네트워크 컴퓨터의 내부 ip로 접속을 하니 연결이 되었습니다.

외부에서 Putty로 접속시도시에

'Remote side unexpectedly closed network connection'

해결은 어떻게 해야 하나요? KT인터넷쓰고 있는데 서비스에서 막아놓은것인지

아까 방확벽 22포트 열어준 다음에
firewall --reload
를 안해서 그런지

방화벽에서 외부네트워크 IP를 접속을 허용 안해주어서 그런지 모르겠습니다.
몇일째 원인을 파악하고있는데, 답답합니다.. 도와주십시요!

chanik의 이미지

포트포워딩 문제이거나, 방화벽 설정 문제같은데요. 방화벽 끄고 해봐서 잘 되면 방화벽 문제이고, 그 상태로도 안 되면 포트포워딩 문제라 보면 되겠죠.

그리고, 헷갈린다 싶으면 패킷캡처로 확인하는게 확실합니다. 패킷이 리눅스의 NIC까지 잘 도달하고 있는지부터 차근차근 보는거죠. 아래 명령 정도로도 될 겁니다. NIC 이름은 eth0 말고 실제 이름으로 적절히 바꾸시고요.

$ sudo tcpdump -n -i eth0 tcp port 22
gilyongi2의 이미지

답변 정말 감사드립니다.
포트포워딩(내부포트 22, 외부포트 22로 설정하고 centos 설치된 컴퓨터 아이피 지정해주고), 방화벽 끄고 확인했습니다..
그러나 여전히 안됩니다. 같은 공유기를 쓰는 네트워크에서는 SSH접속이 잘되는데, 외부에서 접속하면 안됩니다.
패킷캡처는 ping ip 테스트를 말씀하시는 건가요? 외부에서 ping ip 테스트는 이상이 없이 잘 됩니다.
Putty접속 할때만 에러메세지 나옵니다.

chanik의 이미지

패킷캡처는 말 그대로 네트웍상에 전송되는 패킷들을 확인하는 것입니다. 아래 로그는 제가 쓰는 시스템중 하나에서 ssh 접속시도가 일어날 때의 패킷 캡처 결과의 일부입니다. (IP 노출때문에 클라이언트 주소는 xxx.xx.xxx.xx 로 바꿨고, 서버 주소는 yyy.yyy.yyy.yyy 로 바꿨습니다)

초기 과정을 보면 클라이언트가 서버로 패킷을 하나 보내면 서버가 응답하고 클라이언트가 다시 응답하는 식으로 진행되는 모습이 보일 겁니다.

$ sudo tcpdump -n -i enp0s3 tcp port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
08:15:27.019727 IP xxx.xx.xxx.xx.14052 > yyy.yyy.yyy.yyy.22: Flags [S], seq 281065749, win 8192, options [mss 1260,nop,wscale 2,nop,nop,sackOK], length 0
08:15:27.019754 IP yyy.yyy.yyy.yyy.22 > xxx.xx.xxx.xx.14052: Flags [S.], seq 793746987, ack 281065750, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
08:15:27.020932 IP xxx.xx.xxx.xx.14052 > yyy.yyy.yyy.yyy.22: Flags [.], ack 1, win 16695, length 0
08:15:27.025830 IP xxx.xx.xxx.xx.14052 > yyy.yyy.yyy.yyy.22: Flags [P.], seq 1:29, ack 1, win 16695, length 28
08:15:27.025845 IP yyy.yyy.yyy.yyy.22 > xxx.xx.xxx.xx.14052: Flags [.], ack 29, win 502, length 0
08:15:27.028607 IP yyy.yyy.yyy.yyy.22 > xxx.xx.xxx.xx.14052: Flags [P.], seq 1:42, ack 29, win 502, length 41

[1] 아래의 다른 분 말씀대로 통신사에서 22번 포트로 들어오는 클라이언트 패킷을 차단중
[2] 포트포워딩에 문제가 생겨 클라이언트의 패킷이 공유기에서 차단됨
[3] 서버의 방화벽 설정때문에 차단됨

[1], [2]의 상황이면 패킷캡처했을때 클라이언트 패킷이 검출되지 않을 것이고, [3]의 상황이면 검출은 되나 서버에서 바로 끊는 모습이 보일겁니다. 실제로 무슨 일이 일어나는지를 확인해보시라는 의미로 패킷캡처를 권한 것입니다.

gilyongi2의 이미지

답변 정말 감사드립니다.
포트포워딩(내부포트 22, 외부포트 22로 설정하고 centos 설치된 컴퓨터 아이피 지정해주고), 방화벽 끄고 확인했습니다..
그러나 여전히 안됩니다. 같은 공유기를 쓰는 네트워크에서는 SSH접속이 잘되는데, 외부에서 접속하면 안됩니다.
패킷캡처는 ping ip 테스트를 말씀하시는 건가요? 외부에서 ping ip 테스트는 이상이 없이 잘 됩니다.
Putty접속 할때만 에러메세지 나옵니다.

익명 사용자의 이미지

예전 언뜻 듣기로는, KT 등의 회선에서 해킹 및 보안의 이유로 통신사에서 22번 등을 막고 있다는 얘기를 들은적이 있습니다...
10022 등 포트를 바꿔서 함 해보세요...

gilyongi의 이미지

systemctl status sshd.service 입력해서 상태확인 해보았는데
bind to port 2333 on ;; failed: Permission denied.
라고 나옵니다.
공유기에서도 포트포워딩할때 2333으로 포트 잡아주었고,
vi .../sshd_config
들어가서
port 2333
하나만 열어주니까 sshd.service 실행이 안되어서
port 22
port 2333
2개 열어주니까
bind to port 2333 on ;; failed: Permission denied.
나옵니다..

chanik의 이미지

내부포트는 22번 유지하셔도 상관없고, 공유기 포트포워딩 설정의 외부포트만 바꾸시면 됩니다.

외부 22 --> 내부 22 말고, 외부 2333 --> 내부 22 이런 식으로요. 이 경우 외부에서 putty 쓰실때도 공인IP:2333 으로 접속하셔야 하고요.

gilyongi의 이미지

외부, 내부 모두 2333로 바꾸어주었습니다.
그런데 포트 2333으로 접속 시도하면 time out 메세지가 나오고,
포트 22로 접속하면 바로
'Remote side unexpectedly closed network connection'
라고 뜹니다.

chanik의 이미지

1. 2333 포트로의 ssh 접속이 내부 네트웍으로부터는 잘 되는지요?

2. sudo tcpdump -n -i eth0 tcp port 2333 식의 명령으로 패킷캡처해보시면, 외부로부터의 ssh 접속시 어떤 결과가 나오나요?

캡처해보시면 물밑에서 일어나는 일들이 보이니 차근차근 확인하시면 해결될 것입니다.

gilyongi의 이미지

저는 centos7인데 sudo는 우분투 명령어 아닌가요? 아니면 shell을 설치해야 하나요?
만약 설치를 해야한다면 명령어 알려주시면 감사드리겠습니다.

세벌의 이미지

sudo 명령어 안 되면

su -
해서 로그인 한 다음 명령을 실행해보셔요.
김정균의 이미지

sudo 는 우분투 명령이 아닙니다. 다른 배포본, 또는 unix 에서도 사용할 수 있습니다.
물론 centos 에도 있습니다.

chanik의 이미지

sudo는 root 권한으로 실행하기 위한 보조적인 명령일 뿐이고, 패킷캡처 명령은 tcpdump 입니다. root 로긴 상태에서는 sudo 빼고 그냥 tcpdump만 실행하시면 됩니다.

같은 랜상의 PC로부터 ssh 접속이 잘 될 경우의 로그를 먼저 봐두고, 인터넷으로부터의 접속시 로그를 보시면 차이가 느껴질 것입니다.

그리고 덤으로, 캡처결과를 더 압축적으로 보려면 root 권한으로 아래 명령을 쓰시면 특정포트만이 아닌 전 포트에 대해 TCP 접속/종료 관련 패킷들만 캡쳐하실 수 있습니다. eth0 대신 시스템의 실제 NIC 이름을 쓰셔야 하고요.

# tcpdump -n -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0'

캡처명령은 읽어내기만 할 뿐 시스템에 변경을 가하진 않으니 일단 해보시길 권합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.