이 짧은 게시물에서 ssh 서버의 보안을 강화하는 방법을 모았습니다. 가장 기본적이고 간단한 기술이 설명되어 있으며 더 복잡한 기술은 관심 있는 독자를 위해 표시됩니다.

기본 트릭

모든 작업은 다음에서 수행됩니다. 구성 파일 sshd 데몬 -- /etc/ssh/sshd_config . 아래는 주석이 있는 구성 파일의 일부입니다.

### 네트워크 ### # 비표준 포트(>1024) 포트 사용 5679 # IPv4 연결만 사용 # inet = IPv4, inet6 = IPv6, any = 모두 AddressFamily inet # 특정 IP 주소의 연결만 허용 #ListenAddress 0.0.0.0 # 프로토콜의 두 번째 버전을 사용합니다. 첫 번째는 알려진 취약점에 취약합니다. 프로토콜 2 # 분명히 필요할 때까지 그래픽 전달(X 서버)을 비활성화합니다. X11Forwarding no # 비활성화 TCPKeepAlive를 비활성화하고 대신 ClientAliveInterval을 사용하여 # TCP 스푸핑과 같은 공격을 방지합니다. TCPKeepAlive no # 사용자를 버리십시오 비활성 상태에서 10분(600초) 후 ClientAliveInterval 600 ClientAliveCountMax 3 ### 키 구성 파일 ### # 프로토콜 버전 2용 호스트 키 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key # 권한 없는 프로세스를 사용하여 수신 처리 클라이언트 트래픽에서 # 샌드박스 - openSSH >= 5.9("예" - 낮은 버전의 경우) UsePrivilegeSeparation 샌드박스 # 이 값을 변경하면 제거해야 합니다. 오래된 열쇠# /etc/ssh/ssh_host_rsa_key(,.pub), 그리고 sshd를 다시 시작하여 # 새로운 것을 생성하십시오. # # 키의 수명, 즉. 생성하는 데 얼마나 걸립니까 새 키# 이전 것을 사용한 경우. KeyRegenerationInterval 1h # 키 강도 ServerKeyBits 2048 # 공개 키 인증 활성화 PubkeyAuthentication yes # 신뢰할 수 있는 키를 사용자 디렉토리에 저장 AuthorizedKeysFile .ssh/authorized_keys ### 로깅 ### # syslog용 접두어 SyslogFacility AUTH # sshd 자체에 대한 메시지 상세 수준 LogLevel INFO ## # 인증 ### # 허용된 사용자 목록 AllowUsers ivan # ssh 키에 대한 암호 입력 시간 제한 LoginGraceTime 30s # 루트 계정으로 원격 로그인 금지 PermitRootLogin no # ssh 키를 사용하여 파일 및 디렉터리 권한의 명시적 검사 활성화 StrictModes yes # 입력이 올바르지 않을 경우 비밀번호를 다시 묻는 횟수 MaxAuthTries 3 # 빈 비밀번호로 로그인 금지 PermitEmptyPasswords no # 비밀번호로 로그인하는 것을 원칙적으로 금지 # (대신 공개/개인 키를 사용) PasswordAuthentication no # 비활성화 "challenge-response" 인증 사용, # 왜냐하면 . 키를 사용할 때 쓸모가 없습니다. ChallengeResponseAuthentication no # 암호를 사용하지 않기 때문에 (PAM, login(1)) 둘 중 하나가 필요하지 않습니다. UsePAM no UseLogin no # 클라이언트가 특정 세트만 보내도록 허용 환경 변수# RH BZ#CVE-2014-2532 # ShellShock 악용 AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv

sshd 구성 파일에 구성된 매개변수입니다. 설정을 변경한 후 sshd 서비스를 다시 시작해야 합니다.

코멘트

  • 키 기반 인증을 사용하는 경우 키가 필요합니다. 이전에클라이언트 시스템에서 생성하고 공개 키를 서버에 복사합니다. 예시:
클라이언트 $ ssh-keygen 클라이언트 $ 고양이 ~/.ssh/id_rsa.pub | ssh -p 5679 [이메일 보호됨]"고양이 >> ~/.ssh/authorized_keys"
  • /var/log/auth.log 파일에는 다음의 메시지가 포함됩니다. SSHD. 이 파일이 없으면 로깅 시스템을 구성해야 합니다. syslog 및 syslon-ng의 예. syslog-ng를 사용 중이며 /etc/syslog-ng/syslog-ng.conf 파일에 다음 행을 추가해야 합니다.
대상 인증 로그( 파일("/var/log/auth.log"); ); 로그( 소스(src); 목적지(authlog); );

syslog-ng 서비스를 다시 시작합니다.

  • 비표준 포트를 사용하는 경우 방화벽(iptables, firewalld 등)을 구성해야 할 수 있습니다.
    예시 iptables에 대한 설정:
루트# iptables -A INPUT -p tcp -m 상태 --상태 NEW,ESTABLISHED --dport 5679 -j ACCEPT root# 서비스 iptables save root# iptables -L -n Chain INPUT(정책 ACCEPT) 대상 prot opt ​​​​소스 대상 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 ACCEPT tcp -- 0.0.0.0/0 0.0. 0.0/ 0 상태 NEW, ESTABLISHED tcp dpt:5679 ...

이것으로 충분하지 않다면

그건 단지 기본 설정. 또한 다음을 구성할 수 있습니다.

  • 방화벽(iptables)

서비스가 공용 네트워크에서 "켜지는" 즉시 공격 대상이 됩니다. 문제 중 하나는 암호 무차별 대입(brute force)을 사용하여 액세스 권한을 얻으려는 시도입니다. 이 경우 SSH도 예외는 아닙니다.

인증 로그 파일 /var/log/auth.log 또는 이와 유사한 것을 분석하면 암호 추측 시도가 일반적으로 한 번에 여러 IP에서 이루어지며 시간이 지남에 따라 확장된다는 것을 알 수 있습니다.

SSH 무차별 대입 보호

다음과 같은 다양한 방법으로 이로부터 자신을 보호할 수 있습니다.

  • SSH 데몬 구성 옵션 사용
  • 패킷 필터
  • 특수 애플리케이션
  • 포트 노킹

가장 간단하고 효과적인 방법다른 작업을 방해하지 않는 경우 기본 포트 22를 예를 들어 2002로 변경하는 것입니다. /etc/ssh/sshd_config에 항목을 만듭니다.

그 후에 암호를 추측하려는 시도가 거의 중지됩니다. 포트를 변경할 수 없는 경우가 있습니다. 또는 SSH를 통해 액세스를 제한할 수 있습니다. 특정 사용자(특히 루트) 또는 그룹. sshd_config에서 AllowUsers, AllowGroups, DenyUsers 및 DenyGroups와 같은 여러 매개변수가 이를 담당합니다. 로그인으로 IP 또는 서브넷을 지정할 수 있어 편리합니다. 예를 들어 사용자 admin 및 user에 대한 액세스를 허용하고 후자는 하나의 IP에서만 액세스하도록 허용합니다.

또 다른 효과적인 무차별 대입 방지 옵션은 인증에 인증서를 사용하는 것입니다. 그리고 도움으로 특수 매개변수일치하는 경우 전역 섹션의 매개변수를 재정의할 조건부 블록을 생성할 수 있습니다. 예를 들어, 루트 사용자의 비밀번호로 SSH 로그인을 비활성화하여 다른 모든 사용자를 허용하도록 합시다.

# 모든 사람이 암호로 액세스할 수 있도록 허용
비밀번호인증 예
# 루트는 인증서만 사용합니다.
사용자 루트 일치
비밀번호인증번호
KbdInteractive인증 번호

TCP 래퍼를 사용하여 특정 IP에서만 서비스에 대한 액세스를 제한할 수도 있습니다. 이를 위해 /etc/hosts.allow 또는 /etc/hosts.deny 파일에 쓰기만 하면 됩니다. 올바른 규칙. 필요한 서브넷에서만 /etc/hosts.allow에 대한 액세스를 허용합니다.

sshd: 192.168.1.0/24: 허용

또는 /etc/hosts.deny에서:

sshd:전체:거부
sshd: 192.168.1.0/24를 제외한 모두: 허용

패킷 필터를 사용하면 연결 매개변수를 매우 정확하게 설정하여 불필요한 패킷을 버릴 수 있습니다. 이를 통해 22번째 포트에 대한 액세스를 특정 주소로만 쉽게 제한할 수 있습니다. 간단한 예:

iptables -A 입력 -s !192.168.0.1 -p tcp -m tcp --dport 22 ↵
-j REJECT - icmp 포트에 연결할 수 없는 거부

포트 및 IP 주소에 의한 패킷 필터링은 관리자가 작업장에 연결되어 있지 않으면 그다지 효과적이지 않습니다. 이 경우 도움을 특수 유틸리티: Fail2ban , Sshguard . Fail2ban은 원래 SSH를 보호하도록 설계되었습니다. 오늘날에는 이미 모든 애플리케이션에 대해 쉽게 사용자 정의할 수 있는 프레임워크입니다. 작동 원리는 매우 간단합니다. 데몬은 의심스러운 활동이 있는지 로그를 주기적으로 확인합니다. 그런 다음 의심스러운 IP 주소는 iptables 또는 TCP Wrapper에 의해 차단됩니다. 설정에 지정된 시간이 지나면 블록은 일반적으로 실수로 합법적 노드를 차단하지 않도록 제거됩니다. 규칙이 트리거되면 /var/log/fail2ban.log 로그에 이벤트가 기록되고 이메일을 보낼 수 있습니다.

단일 프로세스는 한 번에 여러 서비스를 제어할 수 있으며 패키지에는 인기 있는 Linux 응용 프로그램에 대한 기본 설정이 함께 제공됩니다. 기본적으로 SSH만 보호됩니다.

Ubuntu 및 Debian에서는 다음 명령을 사용하여 설치합니다.

$ sudo apt-get install fail2ban

모든 설정은 /etc/fail2ban 디렉토리에 있는 여러 파일에서 이루어집니다. Fail2ban.conf는 데몬 자체의 시작 매개변수를 저장하고, jail.conf는 제어된 서비스를 설명합니다(SSH 섹션 내).

활성화 = 사실
포트=22
필터=sshd
로그 경로=/var/log/auth.log
최대 재시도 = 3

필터 및 작업은 filter.d 및 action.d 하위 디렉터리에 있는 파일에 작성됩니다. 기본적으로 모든 파일에는 .conf 확장자가 있으므로 건드리지 않는 것이 좋습니다(jail.conf 포함). 모든 변경 사항은 확장자가 .local인 파일(예: jail.local)로 이루어져야 합니다. 이 파일의 매개변수는 첫 번째 설정의 설정을 대체하며 업그레이드 중에 손실되지 않습니다. fail2ban-regex 유틸리티를 사용하여 필터가 작동하는지 확인할 수 있습니다.

SSH 서버에 대한 액세스를 보호하기 위한 몇 가지 규칙.

1. ssh 서버 구성에 추가하여 표준 포트 외에 하나의 포트를 더 수신합니다. (기억하기 쉽도록 모든 서버에 4개의 반복 번호를 사용할 수 있습니다.)

$ sudo vi /etc/ssh/sshd_config 포트 22 포트 xxxx

2. 포트 22에 대한 호출을 신뢰할 수 있는 IP 주소로 제한합니다. * 예: 8.8.8.8

$ sudo vi /etc/sysconfig/iptables -A INPUT -s 8.8.8.8 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

3. ipv6을 사용하고 있는지 확인하는 것을 잊지 마십시오. 그렇다면 초과분을 닫으십시오.

$ sudo vi /etc/sysconfig/ip6tables *filter:INPUT ACCEPT :FORWARD ACCEPT :OUTPUT ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p ipv6-icmp -j ACCEPT -A INPUT - i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A INPUT -j REJECT --reject-with icmp6-adm-prohibited -A FORWARD -j REJECT --reject-with icmp6-adm-prohibited COMMIT

특정 주소에서만 ssh를 사용하기 위해서는 설정 파일에서 충분하다. sshd_config매개변수를 지정 수신 주소(예: ListenAddress 74.125.200.100). 이 경우 ssh는 이 주소에서만 사용할 수 있으며 ipv6을 통해 작동하지 않습니다.

4. 클라이언트 측에서 ssh 구성 파일을 사용합니다.

위치: ~/.ssh/구성

# 쓰기 실패 수정: 깨진 파이프 ServerAliveInterval 120 TCPKeepAlive no # 짧은 이름을 사용하려면 호스트 dev-vps # IP 주소 또는 공용 도메인 이름 Hostname 127.0.0.3 # 어떤 사용자가 로그인할 것인지 User developer # 인증을 위한 키 파일(사용되는 경우) IdentityFile ~/.ssh/id_rsa.dev

구성 파일을 사용하는 또 다른 예:
{<1>}

호스트 ssh-server-1 호스트 이름 1.2.3.4 사용자 dev 포트 1234 호스트 ssh-server-2 사용자 루트 # 호스트 이름 192.168.10.20 # RHEL 기반 및 -q0 기반의 경우 -q0 없이 nc 데비안 기반 IdentityFile ~/.ssh/id_rsa.work -pc 프록시 명령 ssh -q0 ssh-server-1 nc -q0 192.168.10.20 22

이제 ssh-server-1에 연결할 때 필요한 호스트로 즉시 이동합니다. (예를 들어 다음과 같은 경우에 사용하기 편리합니다. 다른 키서버에서)

만큼 잘 유행을 좇는 사람프록시 옵션:

{<2>}

방화벽 뒤에 있는 서버에 ngrok 클라이언트를 다운로드합니다. 바이너리를 실행하고 전달할 포트를 지정하십시오.

SSH는 컴퓨터 간에 데이터(명령, 파일, 비디오 등)를 전송하기 위한 보안 프로토콜입니다.

기본적으로 VPS 및 대부분의 호스팅 제공업체의 전용 서버에서 활성화되어 있어 원격 시스템을 쉽고 안전하게 관리할 수 있습니다. 그런데 Well-Web 서비스에서는 VPS 서버를 저렴하게 빌릴 수 있습니다. SSH는 모든 VPS에서 활성화되어 있으므로 Secure Shell을 사용할 때 문제를 방지하려면 적절한 SSH 보호가 필요합니다.

루트 액세스 비활성화

우선, 아래의 기기에 원격으로 연결하는 기능을 비활성화하는 것이 좋습니다. 계정수퍼유저(루트). 이렇게 하려면 일반적으로 (항상 그런 것은 아님) /etc/ssh/ 디렉토리에 있는 sshd_config 파일을 찾아서 열어야 합니다.

그 안에 있는 PermitRootLogin 항목을 찾아 값을 "no"로 바꿔야 합니다. 즉, 다음 항목을 가져와야 합니다.

PermitRootLogin 아니요

물론 이것이 해킹을 막지는 못하지만 여전히 해킹을 다소 어렵게 만들 것입니다.

해킹 가능성을 최소화하기 위해 로그인과 비밀번호에 의한 인증 대신 키를 이용한 인증을 권장합니다. 이것은 여러 가지 방법으로 수행할 수 있습니다. 그건 그렇고, 이것은 또한 무차별 대입에 대한 좋은 SSH 보호입니다.

기본 포트 변경

SSH를 통한 서버 해킹은 보통 패스워드 무차별 대입(brute force) 방식으로 이루어지기 때문에 표준 22번 포트를 다른 포트로 변경하는 것이 합리적이다. 이렇게 하는 것은 매우 쉽습니다. 우선, 이미 언급한 sshd_config 파일을 열고 거기에 한 줄을 추가해야 합니다.

포트 포트 번호

항목은 예를 들어 다음과 같이 표시됩니다.

포트 3048

이렇게 하면 서버에 무단으로 액세스하려는 사람의 수가 크게 줄어듭니다. 포트 번호를 변경하기 전에 다른 응용 프로그램의 작동에 지장을 주지 않는지 확인하십시오. 또한 프로그램이 충돌하지 않도록 아직 사용하지 않는 포트를 선택해야 합니다.

IP별 접근 제한

무단 연결 가능성을 거의 0으로 줄이는 또 다른 보호 방법은 권한 부여에 대한 제한을 설정하는 것입니다. 특정 IP 주소를 가진 원격 시스템만 서버에 로그인할 수 있도록 SSH를 구성할 수 있습니다. 이렇게 하려면 sshd_config 파일의 AllowUser 줄에서 각 사용자의 이름에 @IP_number를 추가합니다. 항목은 다음과 같을 수 있습니다.

AllowUsers [이메일 보호됨], [이메일 보호됨]

이 방법을 사용하기 전에 구성에서 IP 주소가 제공되지 않은 시스템에서 서버에 액세스해야 하는 상황이 없는지 확인하는 것이 좋습니다.

안전한 비밀번호

물론 무차별 대입에 강한 암호를 사용해야 합니다. 길고 가능한 한 많은 다른 기호로, 가급적이면 krakozyabry를 사용하십시오. 이것은 필수품입니다.

OpenSSH수행할 수 있습니다. 원격 연결서버에 파일을 조작하고 시스템을 관리합니다. 오늘 우리가 이야기하고 싶은 모범 사례, OpenSSH 기반 시스템의 보안을 강화합니다.

구성 파일

  • /etc/ssh/sshd_config- OpenSSH 서버 구성 파일;
  • /etc/ssh/ssh_config- OpenSSH 클라이언트 구성 파일;
  • ~/.ssh/- 사용자 SSH 설정이 저장된 디렉토리;
  • ~/.ssh/authorized_keys 또는 ~/.ssh/authorized_keys- 사용자 계정에 연결하는 데 사용되는 키 목록(RSA 또는 DSA)
  • /etc/nologin- 이 파일이 시스템에 존재하면 sshd는 루트를 제외한 모든 사용자가 시스템에 연결하는 것을 금지합니다.
  • /etc/hosts.allow 및 /etc/hosts.deny- 금지 시스템(보안의 일부). ACL과 유사하게 작동합니다.
  • 기본적으로 SSH 포트 - 22

필요하지 않음 - 끄기

서버에 SSH를 통한 원격 연결이 필요하지 않은 경우 비활성화해야 합니다. CentOS/RHEL과 같은 시스템에서는 다음과 같이 수행됩니다.

chkconfig sshd 끄기 yum 지우기 openssh-server

SSH 버전 2 사용

첫 번째 버전의 SSH 프로토콜에는 두 번째 버전에서 닫힌 보안 문제가 있습니다. 따라서 두 번째 버전을 사용하십시오. /etc/ssh/sshd_config 파일이 Protocol 2 로 설정되어 있는지 확인하십시오.

SSH 액세스 제한

기본적으로 모든 시스템 사용자는 SSH를 통해 시스템에 연결할 수 있습니다. 보안상의 이유로 SSH 액세스를 제한하는 것이 좋습니다. 예를 들어 root, merion 및 네트워크 사용자에 대해 SSH를 허용합니다.

AllowUsers 루트 메리온 네트워크

반면에 지정된 사용자를 제외한 모든 사용자에게 액세스를 허용할 수 있습니다.

DenyUsers 루트 메리온 네트워크

비활동 시간

비활성 세션이 종료(완료)되는 시간을 지정하는 것이 중요합니다. 이것은 다음 옵션을 사용하여 수행할 수 있습니다.

ClientAliveInterval 300 ClientAliveCountMax 0

이 설정에서는 유휴 시간을 300초(5분)로 지정했습니다.

.rhosts 파일 정보

사실 이 파일에는 호스트 및 사용자 목록이 포함되어 있습니다. 만약에 주어진 파일호스트와 사용자의 조합을 포함하는 경우 주어진 사용자암호를 묻지 않고 SSH를 통해 시스템에 연결할 수 있습니다. 이 "훌륭한" 기능을 비활성화하는 것이 좋습니다.

IgnoreRhosts 예

호스트 기반 인증 없음!

소위 호스트 기반 인증특정 호스트의 사용자가 서버에 연결할 수 있습니다. 장애를 입히다:

호스트 기반 인증 아니요

루트를 통한 직접 연결

PermitRootLogin 아니요

배너 만들기

접속하는 각 사람에 대해 범행을 시도하는 공격자를 위협할 수 있는 배너를 만드십시오. 승인되지 않은 접근. 배너 매개변수는 배너 설정을 담당합니다.

내부에서만 22포트!

방화벽 규칙 체인을 통해서만 시스템 포트 22에 액세스합니다. 무엇보다도 LAN 내에서만 액세스할 수 있습니다. 예를 들어, iptables 192.168.11.0/24에 대한 액세스 권한을 부여할 수 있습니다.

A RH-방화벽-1-INPUT -s 192.168.11.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

들을 곳

기본적으로 SSH는 사용 가능한 모든 인터페이스에서 연결을 수신합니다. 기본 포트를 변경하고 연결을 기다려야 하는 IP 주소를 지정하는 것이 좋습니다. 예를 들어 포트 962와 IP 주소 192.168.11.24를 지정합니다.

포트 962 수신 주소 192.168.11.24

강력한 비밀번호

강력한 암호를 사용하십시오. 암호화 방지 암호를 온라인에서 SMS 없이 무료로 생성할 수 있는 많은 도구가 네트워크에 있습니다. :)

빈 암호 비활성화

비밀번호가 없는 사용자가 있습니다. SSH에 대한 액세스도 다음 옵션을 사용하여 거부되어야 합니다.

포트 962 PermitEmptyPasswords 아니요

로그 분석

이벤트 로깅을 INFO 또는 DEBUG 모드로 설정하십시오. 이렇게 하면 시스템에 대한 확장된 제어가 가능합니다.

로그 레벨 정보

이 글이 도움이 되셨나요?

이유를 말해주십시오?

글이 도움이 되지 못해서 죄송합니다. (어렵지 않다면 어떤 이유인지 알려주세요. 자세한 답변 정말 감사드립니다. 더 발전할 수 있도록 도와주셔서 감사합니다!