방금 서버를 확인한 /var/log/auth.log
결과 하루에 500 건이 넘는 암호 / 침입 시도 알림이 수신되지 않는 것으로 나타났습니다! 내 사이트가 작고 URL이 모호합니다. 이것이 정상입니까? 조치를 취해야합니까?
방금 서버를 확인한 /var/log/auth.log
결과 하루에 500 건이 넘는 암호 / 침입 시도 알림이 수신되지 않는 것으로 나타났습니다! 내 사이트가 작고 URL이 모호합니다. 이것이 정상입니까? 조치를 취해야합니까?
답변:
오늘날의 인터넷에서 이것은 슬프게도 정상입니다. 전체 IP 네트워크에서 찾은 각 서버에 로그인하려고하는 많은 봇넷이 있습니다. 일반적으로 루트 또는 특정 응용 프로그램 계정과 같은 잘 알려진 계정에는 간단한 사전 공격을 사용합니다.
공격 대상은 Google 또는 DNS 항목을 통해 찾을 수 없지만 공격자는 특정 서브넷 (예 : 알려진 루트 서버 호스팅 회사)의 모든 IP 주소를 시도합니다. 따라서 URL (따라서 DNS 항목)이 모호하지는 않습니다.
그래서 다음과 같은 것이 중요합니다.
또한 authlog를 스캔하는 fail2ban 을 설치할 수 있으며 IP에서 일정량의 로그인 시도가 실패 /etc/hosts.deny
하면 공격자를 몇 분 동안 잠그기 위해 해당 IP를 추가 하거나 iptables / netfilter에 추가합니다 .
SSH 공격 외에도 취약한 웹 응용 프로그램 (일부 블로그 앱, CMS, phpmyadmin 등)이 있는지 웹 서버를 검색하는 것이 일반적이되었습니다. 따라서 최신 정보를 안전하게 유지하십시오!
action.d/iptables.conf
입니다.
몇 100은 괜찮습니다 ... 지난 달에 내 서버 중 하나가 40k 번의 시도 실패를 발견했습니다. 나는 그들을 플롯의 문제 물마루했다 : 지도
ssh 포트를 변경하고 Port Knocking을 구현하면 숫자가 0으로 떨어졌습니다 :-)
grep 'Failed password' /var/log/secure* | grep sshd | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq
(중복을 허용하려면 끝에있는 | uniq를 제거하십시오). 그런 다음 CSV로 넣어 zeemaps.com에 업로드 할 수 있습니다. 그들은 (군 당 시도 횟수에 대한 적색, 녹색)지도 색상을 카운트를 사용하는 것이 어디 다음 내 더 나은지도를 본 적이 있지만 제트는 생각하지 않은 한 밖으로
공개 키 인증 만 허용하고 루트 로그인을 허용하지 않는 것 외에도 "tarpit"을 사용합니다.
에서 netfilter
이 recent
당신이 (함께 사용할 수있는 모듈 INPUT
체인) :
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --set --name tarpit --rsource
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 6 --name tarpit --rsource -j DROP
iptables -A INPUT -i if0 -p tcp --dport 22 -j ACCEPT
포트 22에 연결하려는 모든 시도는 recent
IP와 모듈로 "타르 핏 (tarpit)"이라는 이름 으로 나열됩니다 (호기심이 많으면 살펴보십시오 /proc/net/xt_recent/tarpit
). 분명히 다른 이름을 사용할 수 있습니다.
IP를 나열하거나 등록 해제하려면 다음을 사용하십시오.
echo "+123.123.123.123" > /proc/net/xt_recent/tarpit
echo "-123.123.123.123" > /proc/net/xt_recent/tarpit
이 시도는 300 초 안에 5 회 시도를 제한합니다. 기존 연결이있는 사용자는 이미 연결이 설정되어 있고 더 많은 비율을 만들 수 있으므로이 제한에 의해 방해받지 않습니다.
원하는대로 규칙을 조정하되 규칙 순서대로 추가해야합니다 (즉, 순서를 추가 한 다음 순서대로 삽입 할 때 순서대로 사용하십시오).
이것은 소음을 엄청나게 줄입니다. 또한 포트 변경에 대한 인식 된 보안과 달리 실제 보안 (무차별 강제 실행)을 제공합니다. 그러나 귀하의 환경에서 가능한 경우 포트를 변경하는 것이 좋습니다. 소음 수준도 많이 줄입니다 ...
나는이 규칙과 위의 규칙없이 잘 실행되었지만 여전히 이것을 fail2ban과 결합 할 수 있습니다.
편집하다:
이 작업을 수행하여 자신을 잠글 수 있으므로 다음과 같은 것을 추가하면 특정 포트를 두드려 차단을 해제 할 수 있습니다.
iptables -A INPUT -i if0 -p tcp --dport <knockport> -m state --state NEW -m recent --name tarpit --remove
예 . 요즘 꽤 정상입니다.
가능한 경우 관리 목적으로 공개 키 인증 만 사용하십시오. 워크 스테이션에서 개인 키를 생성하십시오.
$ ssh-keygen -t dsa
~ / .ssh / id_dsa.pub 의 내용을 서버 ~ / .ssh / authorized_keys (및 직접 루트 로그인이 필요한 경우 /root/.ssh/authorized_keys)에 복사하십시오 .
공개 키 인증 만 수락하도록 서버 / etc / ssh / sshd_config 를 구성하십시오 .
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password
서버가 너무 많은 경우 Puppet 을 사용 하여 공개 키와 구성을 실행할 수 있습니다.
로 봐 Denyhosts 와 fail2ban 반복되는 SSH 로그인 시도를 차단하고 볼 스 노트를 당신이 / IPS를 전체 IDS를 필요로합니다.
http://denyhosts.sourceforge.net/을 사용 하십시오
예, 공개 키 인증을 사용하고 비밀번호 인증을 비활성화해야합니다.
시도는 기계화되어 있으므로 숫자는 정상으로 보입니다 (예 : 일부 사이트에 비해 높고 다른 사이트에 비해 낮음). 일반적으로해야 할 단계를 수행해야합니다. 공격을 탐지하지 않더라도 매일 사이트를 공격 대상으로 간주합니다. 공격을 감지하지 못한다고해서 공격이 존재하지 않는 것은 아닙니다 .
이것은 일반적이지만 좋은 싸움과 싸워서는 안된다는 의미는 아닙니다. 다음은 서버 보안을 강화하는 방법에 대한 몇 가지 단계입니다.
도메인 이름과 관련된 IP 주소에서 SSH 액세스를 비활성화하여 공유 또는 코 로케이션 환경에서이 수를 크게 줄일 수 있습니다. 목록에없는 비 도메인 IP 주소는 이러한 유형의 트래픽을 덜 수신하므로 목록에없는 IP를 구입하고이 IP 만 SSH 액세스에 사용하십시오.
서버 환경 내 개인 네트워크에 IPsec / VPN을 구현할 수있는 환경에있는 경우이 방법이 이상적입니다. 모든 SSH 인터넷 액세스를 비활성화하고 통합 된 소등 솔루션이 있는지 확인하십시오. VPN을 설정하고 VPN에서 SSH 액세스 만 허용하십시오.
VLAN이 옵션이 아닌 경우 알려진 IP 주소 범위의 SSH 연결 만 허용하도록 라우터 또는 방화벽 규칙을 구성하십시오.
이 단계를 수행하면 밤에 누군가가 SSH를 통해 서버에 액세스하기 위해 호스팅 회사 네트워크를 손상시켜야한다는 것을 알기 때문에 훨씬 더 쉽게 잠을 자게됩니다.
fail2ban과 같은 자동 잠금 메커니즘을 사용하는 것 외에도 실제로 공격자의 남용 주소 ISP에 문의하는 옵션이 하나 더 있습니다. 완전히 쓸데없는 것처럼 보일지 모르지만 script-kiddie의 경우 ISP가 조치를 취하려는 것 이상입니다.
남용 주소를 찾으려면 arin.net으로 시작한 후 whois를 사용하여 IP 주소 를 찾으십시오 . 다른 지역 레지스트리로 리디렉션 될 수 있지만 결국에는 주소가 포함 된 IP 블록의 담당 ISP를 찾을 수 있습니다. abuse @ 주소를 찾거나 기술 담당자에게 메일을 보내십시오.
관련 로그 파일 항목과 함께 정중 한 메시지를 보내고 (개인 정보를 제거해야 함) 문제가있는 호스트에 대해 조치를 취하도록 요청하십시오.
fail2ban을 사용하지 않고 비표준 포트에서 SSH 및 기타를 실행하는 것이 좋습니다. 나는 모호함에 의한 보안을 믿지 않지만 이것이 로그의 소음을 줄이는 훌륭한 방법이라고 생각합니다.
비표준 포트에서 로그인에 실패하면 그 사이가 거의 없으며 더 많은 표적 공격을 나타낼 수도 있습니다.
한 걸음 더 나아가서 Kippo 와 같은 SSH 허니팟을 설치하여 무차별 대항 자 들을 ' 들어가서 '기회를 주 었는지 확인할 수도 있습니다.
예, 정상입니다. 소규모 웹 사이트로 고객의 상황을 설명합니다.
항상 해킹 당할 준비를하십시오.
개발자 서버에 웹 사이트 사본을 준비하십시오. XAMPP를 사용하는 Windows 바탕 화면이 무료로 제공됩니다.
항상 개발자 서버를 변경 한 다음 라이브 웹 사이트에 업로드하십시오. Wordpress와 같은 CMS 인 경우 개발자 서버에 게시물을 작성한 후 복사하여 라이브 서버에 붙여 넣습니다.
라이브 웹 사이트에서 개발자 서버로 아무것도 다운로드하지 마십시오.
변경 사항이 없는지 정기적으로 웹 페이지를 모니터링하십시오. 특히, 약물 또는 '향상된'제품에 대한 숨겨진 링크. 이를 위해 많은 브라우저 추가 기능과 프로그램을 찾을 수 있습니다.
당신이 타협 한 경우. 호스트에게 알리고 모든 것을 삭제하고 모든 비밀번호를 변경하고 깨끗한 dev 서버를 빈 웹 서버에 업로드하십시오. 재발을 방지하기 위해 호스트와 협력하십시오.
소규모 사이트에는 보안 팀이 필요하지 않습니다. 그것이 당신의 호스트가 제공하는 것입니다. 그렇지 않은 경우 라이브 서버를 이동하는 대신 dev 서버가있을 때 수행하기가 훨씬 쉬운 다른 호스트를 얻습니다.
도움이 되었기를 바랍니다.
개인적으로 SSH 포트를 옮기고 싶지 않기 때문에 다른 방법으로 중지 할 수 있습니다.
로컬 ISP의 WHOIS 항목을 통해 공격을 한 달에 1-2 회 로그인 시도로 줄일 수있었습니다 (당시 약 1k / 일). 나는 아직도 denyhosts를 사용하여 그것들을 발견했다 .
이미받은 다른 훌륭한 제안 외에도 주어진 서버에 적절한 경우 AllowUsers 지시문 을 사용하고 싶습니다 . 이렇게하면 지정된 사용자 만 SSH를 통해 로그인 할 수 있으므로 안전하지 않게 구성된 게스트 / 서비스 / 시스템 계정을 통해 액세스 할 가능성이 크게 줄어 듭니다.
예:
AllowUsers admin jsmith jdoe
AllowUsers 옵션은 ssh 서비스에 액세스 할 수있는 사용자를 지정하고 제어합니다. 공백으로 구분하여 여러 사용자를 지정할 수 있습니다.
예, 정상입니다. 당신은 할 수 있습니다 :
Fwknop은 스푸핑이 불가능하고 실제로 연결 권한 부여와 달리 인증되기 때문에 더 나은 포트 노크 구현 중 하나입니다.
Openssh가 사용하는 포트를 변경할 수 있지만 실제로 보안을 개선하지는 않습니다.
Google 인증 자 또는 Wikid를 사용하여 SSH 인증 강화
이렇게하면 암호 기반 공격과 관리자 컴퓨터를 손상시키고 ssh-key & password 콤보를 훔치는 결정된 공격자 / 대상 공격의 가능성을 보호 할 수 있습니다.
숙련 된 공격자가 완전히 패치 된 관리자 상자를 얼마나 쉽게 손상시킬 수 있는지 확인 하려면 최신 pwn2own comp를 확인하십시오.
나는 pam_abl
무차별 강제력을 일시적으로 블랙리스트에 올리는데 효과적입니다. hosts.deny
또는에 의존하기보다는 자체 데이터베이스를 사용하여 PAM에서 인증을받는 것이 더 좋다고 생각합니다 iptables
.
또 다른 장점은 pam_abl
스캔 로그 파일에 의존하지 않는 것입니다.