예전에 쓴 글중에 php 로 제작되있는 ssh 불법 접속시도 차단 스크립트를 올린적 있는데.
모든 서버에 php가 올라가있는것도 아니고 php를 올리는것도 그래서 . bash shell 로 만들어 보았다.
#!/bin/bash
#현재시간에서 10분전 시간을 구한다.
ten_date_ago=`date -d "10 min ago" +"%d %H:%M"`
# ten_date_ago 변수에서 시간만 추출한다.
ten_min=`echo ${ten_date_ago} | awk '{print $2}'`
# ten_date_ago 변수에서 날짜만 추출한다.
ten_day=`echo ${ten_date_ago} | awk '{print $1}'`
# 로그에 입력할 시간을 변수에 입력한다.
now_date=`date +"%D -- %R"`
# awk 를 이용하여 불펍 접속 시도된 아이피를 추출한다.
# centos 5.2 기준으로 시스템에 등록되지 않은 ID 로 접속시도를 할경우 invalid 를 출력하여 예외처리
# 굵게 표시된 10 으로 접속 시도 차단 을 결정한다.
ip_count=`awk '$2=='${ten_day}' && $3 >= "'${ten_min}'" && $6 == "Failed" && $7 == "password" && $NF == "ssh2" {if($9 == "invalid") print $13; else print $11}' /var/log/secure | sort | uniq -c | awk '$1 > 10 {print $2}'`
# 차단 된 IP를 별도의 로그에 저장한다.
if [ "${ip_count}" ]
then
echo "########################
## ${now_date} ##
########################" >> /data/log/Illegal_ip.log
echo $ip_count >> /data/seols/log/Illegal_ip.log
fi
# 난 그냥 iptables 를 이용해서 전부 차단해버린다 ㅋㅋ
for i in ${ip_count}
do
iptables -A INPUT -s ${i} -j DROP
done
exit 0
#끝..............
추출 부분에서 아직 완벽하지는 않지만 그냥 대충 추출은 가능한것으로 보인다. 월 비교를 하지 않아서 좀 거시기 하지만. syslog 로 어짜피 분활되니깐 그건 신경안쓰기로 하고 별도의 로그에 카운트까지 저장하고 싶지만 한줄 더써주는게 귀찮아서 대충 저래 쓰다가 언젠간 수정해야지......
모든 서버에 php가 올라가있는것도 아니고 php를 올리는것도 그래서 . bash shell 로 만들어 보았다.
#!/bin/bash
#현재시간에서 10분전 시간을 구한다.
ten_date_ago=`date -d "10 min ago" +"%d %H:%M"`
# ten_date_ago 변수에서 시간만 추출한다.
ten_min=`echo ${ten_date_ago} | awk '{print $2}'`
# ten_date_ago 변수에서 날짜만 추출한다.
ten_day=`echo ${ten_date_ago} | awk '{print $1}'`
# 로그에 입력할 시간을 변수에 입력한다.
now_date=`date +"%D -- %R"`
# awk 를 이용하여 불펍 접속 시도된 아이피를 추출한다.
# centos 5.2 기준으로 시스템에 등록되지 않은 ID 로 접속시도를 할경우 invalid 를 출력하여 예외처리
# 굵게 표시된 10 으로 접속 시도 차단 을 결정한다.
ip_count=`awk '$2=='${ten_day}' && $3 >= "'${ten_min}'" && $6 == "Failed" && $7 == "password" && $NF == "ssh2" {if($9 == "invalid") print $13; else print $11}' /var/log/secure | sort | uniq -c | awk '$1 > 10 {print $2}'`
# 차단 된 IP를 별도의 로그에 저장한다.
if [ "${ip_count}" ]
then
echo "########################
## ${now_date} ##
########################" >> /data/log/Illegal_ip.log
echo $ip_count >> /data/seols/log/Illegal_ip.log
fi
# 난 그냥 iptables 를 이용해서 전부 차단해버린다 ㅋㅋ
for i in ${ip_count}
do
iptables -A INPUT -s ${i} -j DROP
done
exit 0
#끝..............
추출 부분에서 아직 완벽하지는 않지만 그냥 대충 추출은 가능한것으로 보인다. 월 비교를 하지 않아서 좀 거시기 하지만. syslog 로 어짜피 분활되니깐 그건 신경안쓰기로 하고 별도의 로그에 카운트까지 저장하고 싶지만 한줄 더써주는게 귀찮아서 대충 저래 쓰다가 언젠간 수정해야지......
이글 보시고 수정할점이나 더 좋은 방법이 있으신분은 알려주세요 ^^
댓글을 달아 주세요
오...님 좀 짱인듯...
2009/04/10 13:57 [ ADDR : EDIT/ DEL : REPLY ]배껴감...