ssh brute force attack이란 흔한 사용자 이름과 암호로 ssh를 계속 접속해서 해킹을 시도하는 방법으로, 여러가지 피해를 끼칩니다.
1. 정말로 약한 암호를 사용하는 사용자가 있을 경우 해당 계정이 해킹당할 수 있으며, 이 해킹당한 계정으로 로컬 커널 익스플로잇 등을 사용해서 루트를 빼앗길 수도 있습니다.
2. 그렇지 않더라도, 사용자 인증 로그(auth.log)에 짧은 시간 내에 수많은 실패 로그가 쌓여 다른 로그를 보는 데 방해가 될 수 있습니다.
3. 접속을 받는 동안 ssh 대몬이 암호학적 계산을 해야 하므로 시스템 자원을 소모합니다.
iptables 는 리눅스 커널에 기본적으로 포함되어 있는 방화벽으로, 아주 다양한 방화벽 규칙을 만들 수 있으며, iptables 모듈을 사용해서 기능을 확장할 수도 있습니다. 다음은 iptables로 ssh brute force attack을 막는 간단한 규칙입니다. 이 규칙은 iptables 기본 모듈인 state와 recent를 사용합니다.
state 모듈과 recent 모듈은 man 페이지에 자세하게 문서화되어 있습니다. state 모듈은 언제 접속이 시작되고 끝나는지 추적할 수 있게 하고, recent 모듈은 IP 주소의 목록을 만들고 최근 접속 시간을 기록할 수 있게 합니다.
규칙은 ssh 포트로 20초간 5회 이상 접속을 시도하면 10분간 접속을 차단합니다.
우선 blacklist와 ssh 체인을 만듭니다.
iptables -N blacklist
iptables -N ssh
INPUT 체인에서 state 모듈로 ssh 포트인 22번 포트에 접속이 시작되면 ssh 체인으로 보냅니다.
iptables -A INPUT -m state --state NEW -p tcp --dport ssh -j ssh
blacklist 체인에서는 recent 모듈로 "blacklist"라는 목록에 접속 주소를 기록하고 접속을 거부합니다.
iptables -A blacklist -m recent --set --name blacklist
iptables -A blacklist -j REJECT
규칙의 핵심인 ssh 체인은 다음과 같습니다.
iptables -A ssh -m recent --update --seconds 600 --hitcount 1 --name blacklist -j REJECT
iptables -A ssh -m recent --set --name ssh
iptables -A ssh -m recent --update --seconds 20 --hitcount 5 --name ssh -j blacklist
iptables -A ssh -j ACCEPT
첫 번째 규칙은 접속 주소가 이미 "blacklist"에 들어 있고, 지난 10분간 1회 이상 접속이 있었으면 접속을 거부합니다.
두 번째 규칙은 접속 주소를 "ssh" 목록에 기록합니다.
세 번째 규칙은 접속 주소가 이미 "ssh" 목록에 들어 있고, 지난 20초간 5회 이상 접속이 있었으면 blacklist 체인으로 보냅니다.
네 번째 규칙은 여기까지 통과한 경우 ssh 접속을 허락합니다.
따라서 전체 스크립트는 다음과 같이 됩니다.
iptables -N blacklist
iptables -N ssh
iptables -A INPUT -m state --state NEW -p tcp --dport ssh -j ssh
iptables -A blacklist -m recent --set --name blacklist
iptables -A blacklist -j REJECT
iptables -A ssh -m recent --update --seconds 600 --hitcount 1 --name blacklist -j REJECT
iptables -A ssh -m recent --set --name ssh
iptables -A ssh -m recent --update --seconds 20 --hitcount 5 --name ssh -j blacklist
iptables -A ssh -j ACCEPT
'Server Story.... > ubuntu' 카테고리의 다른 글
sshd TCP Wrapper(hosts.deny) 적용하기 (0) | 2011.01.30 |
---|---|
ssh 공격을 자주 하는 ip 리스트 2008 년도 산인데.. 어딘가 이런거 모아 두는곳이.. 있을틴디... (0) | 2011.01.30 |
ubuntu update Server Change (0) | 2011.01.29 |
우분투 su 암호변경 (0) | 2010.12.09 |
모티터링툴 cacti 설치 2 (0) | 2010.10.09 |