Linux 시스템의 SSH 연결을 보호하여 시스템과 데이터를 보호하세요. 시스템 관리자와 가정 사용자 모두 인터넷 연결 컴퓨터를 강화하고 보호해야하지만 SSH는 복잡 할 수 있습니다. 다음은 SSH 서버를 보호하는 데 도움이되는 10 가지 간단한 방법입니다.
SSH 보안 기본 사항
SSH는 보안 셸 . "SSH"라는 이름은 SSH 프로토콜 자체 또는 시스템 관리자와 사용자가 해당 프로토콜을 사용하여 원격 컴퓨터에 보안 연결을 할 수 있도록하는 소프트웨어 도구를 의미하기 위해 같은 의미로 사용됩니다.
SSH 프로토콜은 인터넷과 같은 안전하지 않은 네트워크를 통해 보안 연결을 제공하도록 설계된 암호화 된 프로토콜입니다. Linux의 SSH는 휴대용 버전의 OpenSSH 계획. 그것은에서 구현됩니다 클래식 클라이언트-서버 모델 , SSH 클라이언트의 연결을 허용하는 SSH 서버. 클라이언트는 서버에 연결하고 디스플레이 원격 사용자에 대한 세션. 서버는 연결을 수락하고 실행 세션.
기본 구성에서 SSH 서버는 전송 제어 프로토콜 ( TCP ) 포트 22. 이것은 표준화 되었기 때문에, 잘 알려진 항구 , 대상입니다. 위협 행위자 과 악성 봇 .
위협 행위자들은 열린 포트를 찾는 다양한 IP 주소를 스캔하는 봇을 시작합니다. 그런 다음 악용 될 수있는 취약점이 있는지 확인하기 위해 포트를 조사합니다. “내가 안전하고 나쁜 놈들이 노릴 수있는 나보다 더 크고 좋은 목표가있다”는 생각은 잘못된 추론입니다. 봇은 장점에 따라 대상을 선택하지 않습니다. 조직적으로 침해 할 수있는 시스템을 찾고 있습니다.
시스템을 보호하지 않은 경우 자신을 피해자로 지정합니다.
보안 마찰
보안 마찰은 보안 조치를 구현할 때 사용자와 다른 사람들이 경험하게 될 자극입니다. 우리는 긴 기억을 가지고 있으며 새로운 사용자를 컴퓨터 시스템에 소개하고 끔찍한 목소리로 정말 암호를 입력해야했다 매번 메인 프레임에 로그인했습니다. 그것은 그들에게 보안 마찰이었습니다.
(부수적으로 암호의 발명은 페르난도 J. 코르 바토 , 컴퓨터 과학자의 판테온에있는 또 다른 인물로, 결합 된 작업으로 인해 환경이 탄생했습니다. 유닉스 .)
보안 조치를 도입하려면 일반적으로 누군가에 대한 일종의 마찰이 필요합니다. 사업주가 비용을 지불해야합니다. 컴퓨터 사용자는 익숙한 방식을 변경하거나 다른 인증 세부 정보를 기억하거나 성공적으로 연결하기 위해 추가 단계를 추가해야 할 수 있습니다. 시스템 관리자는 새로운 보안 조치를 구현하고 유지하기 위해 추가 작업을해야합니다.
Linux 또는 Unix와 유사한 운영 체제를 강화하고 잠그는 것은 매우 빠르게 진행될 수 있습니다. 여기에 제시된 내용은 타사 응용 프로그램 없이도 방화벽을 뚫지 않고도 컴퓨터의 보안을 향상시킬 수있는 구현하기 쉬운 일련의 단계입니다.
이 단계는 SSH 보안의 최종 단어는 아니지만 너무 많은 마찰없이 기본 설정에서 훨씬 더 발전 할 것입니다.
SSH 프로토콜 버전 2 사용
2006 년에 SSH 프로토콜은 버전 1에서 버전 2 . 상당한 업그레이드였습니다. 특히 암호화 및 보안과 관련하여 너무 많은 변경 및 개선 사항이있어 버전 2는 버전 1과 역 호환되지 않습니다. 버전 1 클라이언트의 연결을 방지하려면 컴퓨터가 버전 2 클라이언트의 연결 만 허용하도록 규정 할 수 있습니다.
이렇게하려면
/ etc / ssh / sshd_config
파일. 이 기사 전체에서이 작업을 많이 수행 할 것입니다. 이 파일을 편집해야 할 때마다 사용할 명령은 다음과 같습니다.
sudo gedit / etc / ssh / sshd_config
다음 행을 추가하십시오.
프로토콜 2
그리고 파일을 저장하십시오. SSH 데몬 프로세스를 다시 시작하겠습니다. 다시 말하지만이 기사 전체에서이 작업을 많이 수행 할 것입니다. 다음은 각 경우에 사용할 명령입니다.
sudo systemctl restart sshd
새 설정이 적용되는지 확인해 보겠습니다. 다른 컴퓨터로 이동하여 테스트 컴퓨터에 SSH를 시도합니다. 그리고 우리는
-1
(프로토콜 1) 옵션을 사용하여
ssh
프로토콜 버전 1을 사용하는 명령입니다.
SSH -1 [email protected]
좋습니다. 연결 요청이 거부되었습니다. 프로토콜 2와 계속 연결할 수 있는지 확인하겠습니다.
-2
(프로토콜 2) 사실을 증명하는 옵션.
ssh -2 [email protected]
SSH 서버가 암호를 요청한다는 사실은 연결이 이루어졌으며 서버와 상호 작용하고 있다는 긍정적 인 표시입니다. 실제로 최신 SSH 클라이언트는 기본적으로 프로토콜 2를 사용하므로 클라이언트가 최신 상태 인 한 프로토콜 2를 지정할 필요가 없습니다.
ssh [email protected]
그리고 우리의 연결이 허용됩니다. 따라서 거부되는 것은 약하고 덜 안전한 프로토콜 1 연결뿐입니다.
포트 22 피하기
포트 22는 SSH 연결을위한 표준 포트입니다. 다른 포트를 사용하면 모호함을 통해 시스템에 약간의 보안이 추가됩니다. 모호함을 통한 보안은 진정한 보안 조치로 간주되지 않으며 다른 기사에서 이에 대해 비난했습니다. 실제로 일부 똑똑한 공격 봇은 포트의 단순한 조회 목록에 의존하고 일반적인 서비스를 제공한다고 가정하는 대신 열려있는 모든 포트를 조사하고 어떤 서비스를 제공하는지 확인합니다. 그러나 비표준 포트를 사용하면 포트 22의 노이즈와 불량 트래픽을 줄이는 데 도움이 될 수 있습니다.
비표준 포트를 구성하려면 SSH 구성 파일을 편집하십시오.
sudo gedit / etc / ssh / sshd_config
"Port"줄의 시작 부분에서 해시 번호를 제거하고 "22"를 선택한 포트 번호로 바꿉니다. 구성 파일을 저장하고 SSH 데몬을 다시 시작합니다.
sudo systemctl restart sshd
어떤 효과가 있었는지 봅시다. 다른 컴퓨터에서
ssh
서버에 연결하는 명령. 그만큼
ssh
명령은 기본적으로 포트 22를 사용합니다.
ssh [email protected]
연결이 거부되었습니다. 다시 시도하고 -p (port) 옵션을 사용하여 포트 470을 지정하겠습니다.
ssh -p 479 [email protected]
연결이 허용됩니다.
TCP 래퍼를 사용하여 연결 필터링
TCP Wrappers는 이해하기 쉽습니다. 액세스 제어 목록 . 이를 통해 IP 주소 또는 호스트 이름과 같은 연결 요청의 특성에 따라 연결을 제외하고 허용 할 수 있습니다. TCP 래퍼는 적절하게 구성된 방화벽 대신이 아니라 함께 사용해야합니다. 특정 시나리오에서는 TCP 래퍼를 사용하여 상황을 상당히 강화할 수 있습니다.
TCP 래퍼는이 기사를 조사하는 데 사용 된 Ubuntu 18.04 LTS 시스템에 이미 설치되어 있습니다. Manjaro 18.10과 Fedora 30에 설치해야했습니다.
Fedora에 설치하려면 다음 명령을 사용하십시오.
sudo yum tcp_wrappers 설치
Manjaro에 설치하려면 다음 명령을 사용하십시오.
sudo pacman -Syu tcp-wrappers
관련된 두 개의 파일이 있습니다. 하나는 허용 목록을 보유하고 다른 하나는 거부 목록을 보유합니다. 다음을 사용하여 거부 목록을 편집합니다.
sudo gedit /etc/hosts.deny
이것은 열립니다
gedit
거부 파일이로드 된 편집기.
다음 줄을 추가해야합니다.
모두 : 모두
그리고 파일을 저장하십시오. 승인되지 않은 모든 액세스가 차단됩니다. 이제 수락하려는 연결을 승인해야합니다. 이렇게하려면 허용 파일을 편집해야합니다.
sudo gedit /etc/hosts.allow
이것은 열립니다
gedit
허용 파일이로드 된 편집기.
SSH 데몬 이름을 추가했습니다.
SSHD
, 및 연결을 허용 할 컴퓨터의 IP 주소. 파일을 저장하고 제한 및 권한이 적용되는지 확인합니다.
먼저, 연결되지 않은 컴퓨터에서 연결을 시도합니다.
hosts.allow
파일:
연결이 거부되었습니다. 이제 IP 주소 192.168.4.23의 컴퓨터에서 연결을 시도합니다.
연결이 허용됩니다.
여기에있는 예는 약간 잔인합니다. 컴퓨터 한 대만 연결할 수 있습니다. TCP 래퍼는 이보다 매우 다양하고 유연합니다. 그것은 지원합니다 호스트 이름, 와일드 카드 및 서브넷 마스크 IP 주소 범위에서 연결을 허용합니다. 당신은 man 페이지를 확인하십시오 .
암호가없는 연결 요청 거부
나쁜 습관이지만 Linux 시스템 관리자는 암호없이 사용자 계정을 만들 수 있습니다. 즉, 해당 계정의 원격 연결 요청에는 확인할 암호가 없습니다. 이러한 연결은 허용되지만 인증되지 않습니다.
SSH의 기본 설정은 암호없이 연결 요청을 수락합니다. 이를 매우 쉽게 변경할 수 있으며 모든 연결이 인증되었는지 확인할 수 있습니다.
SSH 구성 파일을 편집해야합니다.
sudo gedit / etc / ssh / sshd_config
"#PermitEmptyPasswords no"라는 줄이 나타날 때까지 파일을 스크롤합니다. 해시 제거
#
줄의 시작 부분에서 파일을 저장하십시오. SSH 데몬을 다시 시작합니다.
sudo systemctl restart sshd
암호 대신 SSH 키 사용
SSH 키는 SSH 서버에 로그인하는 보안 수단을 제공합니다. 암호를 추측하거나, 크랙하거나, 무자비한 . SSH 키는 이러한 유형의 공격에 개방되지 않습니다.
SSH 키를 생성 할 때 키 쌍을 생성합니다. 하나는 공개 키이고 다른 하나는 개인 키입니다. 공개 키는 연결하려는 서버에 설치됩니다. 이름에서 알 수 있듯이 개인 키는 자신의 컴퓨터에 안전하게 보관됩니다.
SSH 키를 사용하면 암호 인증을 사용하는 연결보다 더 안전한 (비 의식적으로) 암호없이 연결할 수 있습니다.
연결 요청을 할 때 원격 컴퓨터는 공개 키의 복사본을 사용하여 컴퓨터로 다시 전송되는 암호화 된 메시지를 만듭니다. 공개 키로 암호화 되었기 때문에 컴퓨터에서 개인 키로 암호화를 해제 할 수 있습니다.
그런 다음 컴퓨터는 메시지, 특히 세션 ID에서 일부 정보를 추출하고이를 암호화 한 다음 서버로 다시 보냅니다. 서버가 공개 키의 사본을 사용하여 암호를 해독 할 수 있고 메시지 내부의 정보가 서버가 사용자에게 보낸 정보와 일치하면 연결이 사용자로부터 오는 것으로 확인됩니다.
여기서는 SSH 키가있는 사용자가 192.168.4.11에서 서버에 연결합니다. 암호를 입력하라는 메시지가 표시되지 않습니다.
ssh [email protected]
SSH 키는 그 자체로 유용한 기사입니다. 편리하게, 우리는 당신을 위해 하나가 있습니다. 여기에 SSH 키를 만들고 설치하는 방법 .
관련 : Linux 셸에서 SSH 키를 만들고 설치하는 방법
암호 인증을 모두 비활성화
물론 SSH 키를 사용하는 논리적 확장은 모든 원격 사용자가 강제로이를 채택해야하는 경우 암호 인증을 완전히 끌 수 있다는 것입니다.
SSH 구성 파일을 편집해야합니다.
sudo gedit / etc / ssh / sshd_config
"#PasswordAuthentication yes"로 시작하는 줄이 나타날 때까지 파일을 스크롤합니다. 해시 제거
#
줄의 시작부터 "예"를 "아니요"로 변경하고 파일을 저장합니다. SSH 데몬을 다시 시작합니다.
sudo systemctl restart sshd
X11 전달 비활성화
X11 포워딩을 사용하면 원격 사용자가 SSH 세션을 통해 서버에서 그래픽 애플리케이션을 실행할 수 있습니다. 위협 행위자 또는 악의적 인 사용자의 손에 GUI 인터페이스는 악의적 인 목적을 더 쉽게 만들 수 있습니다.
사이버 보안의 표준 진언은이 기능을 켜야 할 충분한 이유가 없다면 끄는 것입니다. SSH 구성 파일을 편집하면됩니다.
sudo gedit / etc / ssh / sshd_config
"# X11Forwarding no"로 시작하는 줄이 보일 때까지 파일을 스크롤합니다. 해시 제거
#
줄의 시작 부분에서 파일을 저장하십시오. SSH 데몬을 다시 시작합니다.
sudo systemctl restart sshd
유휴 시간 초과 값 설정
컴퓨터에 대한 SSH 연결이 설정되어 있고 일정 기간 동안 활동이 없으면 보안 위험이 발생할 수 있습니다. 사용자가 책상을 떠나 다른 곳에서 바쁠 가능성이 있습니다. 책상 옆을 지나가는 사람은 누구나 앉아서 자신의 컴퓨터를 사용할 수 있으며 SSH를 통해 컴퓨터를 사용할 수 있습니다.
시간 제한을 설정하는 것이 훨씬 안전합니다. 비활성 기간이 시간 제한과 일치하면 SSH 연결이 끊어집니다. 한 번 더 SSH 구성 파일을 수정합니다.
sudo gedit / etc / ssh / sshd_config
"#ClientAliveInterval 0"으로 시작하는 줄이 보일 때까지 파일을 스크롤합니다. 해시를 제거합니다.
#
줄의 시작에서 숫자 0을 원하는 값으로 변경합니다. 300 초, 즉 5 분을 사용했습니다. 파일을 저장하고 SSH 데몬을 다시 시작합니다.
sudo systemctl restart sshd
암호 시도 제한 설정
인증 시도 횟수에 제한을 정의하면 암호 추측 및 무차별 대입 공격을 방지 할 수 있습니다. 지정된 수의 인증 요청 후 사용자는 SSH 서버에서 연결이 끊어집니다. 기본적으로 제한이 없습니다. 그러나 그것은 빨리 해결됩니다.
다시 한 번 SSH 구성 파일을 수정해야합니다.
sudo gedit / etc / ssh / sshd_config
"#MaxAuthTries 0"으로 시작하는 줄이 보일 때까지 파일을 스크롤합니다. 해시 제거
#
줄의 시작에서 숫자 0을 원하는 값으로 변경합니다. 여기서는 3 개를 사용했습니다. 변경 한 후 파일을 저장하고 SSH 데몬을 다시 시작합니다.
sudo systemctl restart sshd
연결을 시도하고 의도적으로 잘못된 암호를 입력하여이를 테스트 할 수 있습니다.
MaxAuthTries 수는 사용자가 허용 한 시도 수보다 하나 더 많은 것 같습니다. 두 번의 잘못된 시도 후 테스트 사용자의 연결이 끊어집니다. MaxAuthTries를 3으로 설정했습니다.
루트 로그인 비활성화
Linux 컴퓨터에서 루트로 로그인하는 것은 좋지 않습니다. 일반 사용자로 로그인하여
sudo
루트 권한이 필요한 작업을 수행합니다. 더군다나 루트가 SSH 서버에 로그인하는 것을 허용해서는 안됩니다. 일반 사용자 만 연결할 수 있어야합니다. 관리 작업을 수행해야하는 경우 다음을 사용해야합니다.
sudo
너무. 루트 사용자의 로그인을 강제로 허용하는 경우 최소한 SSH 키를 사용하도록 강제 할 수 있습니다.
마지막으로 SSH 구성 파일을 수정해야합니다.
sudo gedit / etc / ssh / sshd_config
"#PermitRootLogin prevent-password"로 시작하는 줄이 보일 때까지 파일을 스크롤합니다. 해시를 제거합니다.
#
줄의 시작부터.
- root가 로그인하지 못하도록하려면 "prohibit-password"를 "no"로 바꾸십시오.
- 루트 로그인을 허용하지만 SSH 키를 사용하도록 강제하려면 'prohibit-password'를 그대로 둡니다.
변경 사항을 저장하고 SSH 데몬을 다시 시작합니다.
sudo systemctl restart sshd
궁극적 인 단계
물론 컴퓨터에서 SSH를 실행할 필요가없는 경우 SSH를 사용 중지해야합니다.
sudo systemctl stop sshd
sudo systemctl sshd 비활성화
창문을 열지 않으면 아무도 올라갈 수 없습니다.