apollo89 요즘 읽고 있는 책
프로그래머의 길,멘토에게 묻다
데이브 후버,애디웨일 오시나이 공저/강중빈 역
프로그래머 그 다음 이야기
임백준 등저
대규모 서비스를 지탱하는 기술
이토 나오야,다나카 신지 공저
존 맥아더의 성경,이렇게 믿어라
존 맥아더 저
아이디어맨 Idea man
안진환 역/폴 앨런 저
예스24 | 애드온2
위의 소스를 가지고 몇가지 추가하고 /etc/oops-firewall/user.conf 파일에 중복되는 ip로 파
일 용량이 커지는것을 막기하기 위해서 대충 만들어봤습니다.

denyip.sh
------------------ cut here -------------------

#!/bin/bash
# Script by Yunkiman
# Modified by icworld

days=`date +%d`

# 5회이상 패스워드 입력오류 ip를 추출하는 루틴입니다. ssh의 사전접속을 차단하는데 괜찮
은것 같습니다.

for i in $( cat /var/log/messages | grep "Failed password for" | awk '$2 = $days 
{print $13}' | sort | uniq -c | awk '$1 > 5 {print $2}'); do
echo "%-A INPUT -s $i -j DROP" >> /etc/oops-firewall/user.conf
done

# 5회 이상 ftp의 익명계정 접속을 시도하는 ip를 추출하는 루틴입니다.

for j in $( cat /var/log/messages | grep "anonymous" | awk '$2 = $days {print $7}' | 
sort | uniq -c | awk '$1 > 5 {print $2}' | awk -F"(" '{print $2}' | awk -F"[" '{print 
$1}'); do
echo "%-A INPUT -s $j -j DROP" >> /etc/oops-firewall/user.conf
done

# 3회이상 허용되지 않는 ftp 포트 접속을 시도하는 ip를 추출하는 루틴입니다.
for k in $( cat /var/log/messages | grep "Refused PORT" | awk '$2 = $days {print $7}' 
| sort | uniq -c | awk '$1 > 3 {print $2}' | awk -F"(" '{print $2}' | awk -
F"[" '{print $1}'); do
echo "%-A INPUT -s $k -j DROP" >> /etc/oops-firewall/user.conf
done

# 여기서부터는 삽질입니다. -0-;
# user.conf 파일에서 중복되는 ip를 없앤후 temp 파일에 저장해두고 user.bak(사용자 지정 
ip가 없는 깨끗한 user.conf 카피파일)을 user.conf로 덮어씁니다.
# 그리고 temp 파일에 저장해둔 ip를 user.conf 파일에 집어넣고 temp파일은 삭제하고 oops-
firewall을 재시작합니다.

for a in $( cat /etc/oops-firewall/user.conf | grep "%-A INPUT -s" | awk '{print $4}' 
| sort | uniq -c | awk '{print $2}'); do
echo "%-A INPUT -s $a -j DROP" >> /etc/oops-firewall/temp
done

cp /etc/oops-firewall/user.bak /etc/oops-firewall/user.conf

for b in $( cat /etc/oops-firewall/temp | grep "%-A INPUT -s" | awk '{print $4}' | 
sort | uniq -c | awk '{print $2}'); do
echo "%-A INPUT -s $b -j DROP" >> /etc/oops-firewall/user.conf
done

rm -rf /etc/oops-firewall/temp
/etc/init.d/oops-firewall restart

------------------ cut here -------------------

이렇게 하면 로그파일이 rotate되어도 블럭된 ip는 계속 누적되고 로그파일이나 user.conf 파
일용량이 커지는 것을 막을수 있습니다.
crontab에다가 2분마다 한번씩 실행하게 해놓으면 별 무리없이 잘 돌아갈겁니다.
이렇게 소스가 길다보니 삽질한 흔적이 피력하네요. ㅠㅠ
시간나면 소스좀 간결하게 만들어서 다시 올리도록 하겠습니다.
누가 대신 해주셔도 무방~~!! 합니다. 하핫!~(귀차니즘)


출처 : http://oops.org/SERVICE/jsboard/read.php?table=jsboard_oopsFAQ&no=503&page=2 (새 창으로 열기)
Trackback URL : http://apollo89.com/blog/trackback/138
openclose