매일 밤 RedHat 4 서버에서 수백, 때로는 수천 개의 ssh 로그인에 실패했습니다. 원격 사이트의 방화벽 문제로 인해 표준 포트에서 실행해야합니다. 이것을 막기 위해해야 할 일이 있습니까? 많은 사람들이 동일한 IP 주소에서 온 것으로 나타났습니다. 잠시 후에 사람들을 멈추지 않아야합니까?
매일 밤 RedHat 4 서버에서 수백, 때로는 수천 개의 ssh 로그인에 실패했습니다. 원격 사이트의 방화벽 문제로 인해 표준 포트에서 실행해야합니다. 이것을 막기 위해해야 할 일이 있습니까? 많은 사람들이 동일한 IP 주소에서 온 것으로 나타났습니다. 잠시 후에 사람들을 멈추지 않아야합니까?
답변:
iptables를 사용하여 SSH 포트에 대한 새 수신 연결의 속도를 제한 할 수 있습니다. 턴키 솔루션을 제공하기 위해 전체 iptables 구성을 봐야하지만 기본적으로 다음과 같은 규칙을 추가하는 것에 대해 이야기하고 있습니다.
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT
이 규칙은 표 앞부분에서 ESTABLISHED 연결을 수락한다고 가정합니다 (따라서 새로운 연결 만이 규칙에 적용됨). 새로운 SSH 연결이이 규칙에 맞고 표시됩니다. 60 초 안에 단일 IP 주소에서 5 번 시도하면 해당 IP에서 들어오는 새로운 연결이 끊어집니다.
이것은 나를 위해 잘 작동했습니다.
편집 : 추가 소프트웨어를 설치할 필요가 없으며 커널 모드에서 완전히 발생하기 때문에이 방법을 "fail2ban"보다 선호합니다. "fail2ban"과 같은 구문 분석 로그 파일을 처리하지 않지만 문제가 SSH에만 해당되는 경우 소프트웨어 설치가 필요하고 더 복잡한 사용자 모드를 사용하지 않습니다.
-m condition
iptables match를 사용하십시오.
fail2ban 은 로그인 시도가 너무 실패한 IP 주소를 차단하여이 문제를 해결할 수 있습니다.
가능하면 SSH에 비표준 포트를 사용하는 것이 좋습니다 (예 : 포트 10222).하지만 언급 할 수 없으므로 DenyHosts와 같은 것을 사용하는 것이 좋습니다.
http://denyhosts.sourceforge.net/
설치 및 구성이 쉬운 훌륭한 패키지.
인터넷의 임의의 위치에서 시스템으로 ssh를 수행하는 것이 좋을 수도 있지만, 열린 ssh 포트에 잠그고 시스템에 대한 다양한 joe 계정 및 사전 공격을 적용하는 자동 비밀번호 공격 시스템이 있습니다. 이것은 야간 로그 요약을 읽기 위해 번거로울 수 있으며 대역폭을 낭비합니다.
동일한 시스템에 웹 서버가있는 경우 php 및 tcp 래퍼를 사용하여 ssh 인바운드 트래픽을 알려진 시스템으로 제한하고 인터넷의 임의 시스템에서 액세스 할 수 있도록 백도어 키를 제공 할 수 있습니다.
방법은 다음과 같습니다.
/etc/hosts.deny에서 모든 ssh 연결을 거부하십시오.
# /etc/hosts.deny fragment
sshd: all
/etc/hosts.allow에서 IP로 알려진 시스템을 허용하고 임시 액세스를위한 파일을 추가하십시오.
# /etc/hosts.allow fragment
sshd: 10.0.10.2 # some system
sshd: 172.99.99.99 # some other system
sshd: /etc/hosts.allow.temporary-sshd-access
웹 서버에서 PHP 파일을 생성하고 my-sshd-access.php와 같이 명백하지 않은 이름을 지정하십시오.
<?php
function get_ip()
{
return getenv("REMOTE_ADDR");
}
?>
<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';
print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);
$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);
print "Wrote: ";
readfile($out);
?>
PHP 코드를 용서하십시오-다른 곳에서 스 와이프 했으므로 아마 전체를 정리할 수있었습니다. 시스템에 액세스하는 시스템의 IP 주소를 /etc/hosts.allow.temporary-sshd-access 파일에 추가하면됩니다.이 파일은 연결시 sshd (/etc/hosts.allow에 포함되어 있기 때문에)에 의해 읽 힙니다. .
이제 웹에서 임의의 시스템에 있고이 시스템으로 ssh하려는 경우 먼저 웹 브라우저를 사용하여이 파일을 누르십시오 (또는 wget 또는 equivilent 사용).
$ wget http://your.system.name/my-sshd-access.php
이제 시스템에 ssh 할 수 있어야합니다. 이 위치가 자주 오지 않는 경우, /etc/hosts.allow.temporary-sshd-access 파일의 내용을 읽고 IP 주소를 / etc / hosts에 영구적으로 추가하는 것은 쉽지 않습니다. 허용하다.
denyhosts 를보고 싶을 수도 있습니다.
참고 : OpenSSH 6.7은 tcpwrappers 지원을 삭제 합니다 . 즉, 거부 호스트는 아마도 새로운 설치 솔루션이 아닐 것입니다.
호의를 베풀고 암호 로그인을 비활성화하십시오. 독점적으로 인증 키 사용 (예 : Google ssh-keygen-예 : http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4 .html ) 서버 보안이 강화되고보다 편안하게 서버에 연결되며 (ssh-agent, ssh-add, 키 체인 확인) 더 이상 ssh brute force 공격의 대상이되지 않습니다.
다른 해결책은 ssh를 다른 포트로 옮기는 것입니다. 이 벌레는 꽤 바보입니다.
솔직히 SSH (및 포트 22)를 실행해야하는 경우이를 피할 수 없습니다. 암호를 수락해야하는 경우 모양이 훨씬 나빠집니다.
가장 좋은 방법은 SSH 로그를 제외하도록 로그 분석 소프트웨어를 구성하는 것입니다. 그런 다음 별도의 인스턴스를 실행하여 SSH 로그 만보고 procmail을 사용하여 실패한 시도를 필터링하십시오. 여러 번의 시도 실패로 IP 주소에서 성공적인 로그인을 감시하는 스크립트를 작성할 수도 있습니다.
사람들이 SSH 서버를 조사하지 못하게 할 방법이 없습니다. Denyhosts, fail2ban 및 iptables 예제는 어느 정도 작동하지만 합법적 인 사용자를 실수로 차단할 위험이 있습니다. 가장 좋은 방법은 그것을 분석하고 로그 분석 프로세스를 자동화하여 생각해야하는 시간을 줄이는 것입니다.
Red Hat 서버에서 로그인 시도에 실패했다면 방화벽 뒤에 어떤 방화벽이 있고 몇 명의 사람들이 서버에 로그인해야합니까? 방화벽이 실제 서버 근처에 도달하기 전에 방화벽에서의 시도를 제한하고 싶을 때 제안합니다.
합법적으로 액세스해야하는 IP 주소 범위를 제한 할 수 있으면 방화벽에 액세스 목록을 설정할 수 있어야합니다. 방화벽에서 트래픽을 제한 할 수 있다면 서버가 무언가를 목표로하는 것처럼 들리므로 네트워크 침입 시스템을 살펴 보는 것이 좋습니다.
대부분의 웹 호스트는 APF + BFD 를 사용 하여 실패한 SSH 로그인을 ip- 차단합니다. 요즘에는 서버에 액세스하지 않으려는 특정 국가 (예 : 한국, 중국 등)의 SSH IP의 99 %가 포함 된 LFD라는 도구가 포함 된 CSF (Configserver Firewall) 가 있습니다. 에서 유래 한 것 같습니다).
둘 이상의 호스트에서이 문제를 해결해야하는 경우 OSSEC을 확인하십시오. http://www.ossec.net/main/ossec-architecture
이렇게하면 중앙에서 여러 에이전트를 구성하여 로그에서 추출 할 수있는 다른 패턴과 함께 무차별 대입 공격에 자동으로 대응할 수 있습니다.
소프트웨어의 아주 좋은 조각 :)
DenyHosts와 유사한 다른 옵션은 sshutout http://www.techfinesse.com/sshutout/sshutout.html입니다.