check pass; user unknown 메세지로그 차단
불법 접근(SSH 무작위 접속시도, 스패머 릴레이 시도) 자동 차단, 통보 스크립트
" 아래의 메세지가 /var/log/message
check pass; user unknown
Aug 9 14:17:40 localhost sshd(pam_unix)[9144]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=
vi sshsecurity.sh
======================================================================================
#!/bin/sh
IPTABLES="/sbin/iptables" # iptables 의 절대 경로
#IPTABLES="/usr/local/sbin/iptables" # iptables 의 절대 경로
NUMBER=20 ## 1일 Block 적용 대상에 포함될 최대 체크 횟수 (Default:하루에 10번 이상 체킹 되면 해당 IP 패킷은 모두 DROP)
ORDER=4 ## iptables 정책에 몇번째 라인에 DROP 라인을 삽입할것인가 (Default:4번째 라인에 삽입)
## 작업디렉토리 지정, 없을시 생성
if [ ! -d "/root/root_dir" ] ; then
mkdir -p "/root/root_dir"
chmod 700 "/root/root_dir"
fi
#########################################
##### 211.43.205.124를 자기 서버 아피를 적는다. #
########################################
## 최초 실행시(/root/root_dir/iptables.deny 파일이 비존재시) 실행되는 부분
if [ ! -f /root/root_dir/iptables.deny ]; then
cd /root/root_dir
grep "illegal" /var/log/messages | egrep -v "211.43.205.124" | awk '{print $9 $13}' > temp
sed -e "s/illegal//g" temp > iptables.deny.tmp
grep "Invalid" /var/log/messages | egrep -v "211.43.205.124" | awk '{print $6 $10}' > temp
sed -e "s/Invalid//g" temp >> iptables.deny.tmp
grep "invalid" /var/log/messages | egrep -v "211.43.205.124" | awk '{print $9 $13}' > temp
sed -e "s/invalid//g" temp >> iptables.deny.tmp
grep "authentication failure" /var/log/messages | egrep -v "211.43.205.124" | awk '{print $9 $13}' | awk -F"host=" '{print $2}' > temp
#빈줄 없앰
sed -e "/^$/d" temp > temp.tmp
mv temp.tmp temp
sed -e "s/uid=0rhost=//g" temp >> iptables.deny.tmp
grep "Relaying denied" /var/log/maillog | egrep -v "211.43.205.124" | awk '{print $9}' | awk -F"[" '{print $2}' | awk -F"]" '{print $1}' > temp
#빈줄 없앰
sed -e "/^$/d" temp > temp.tmp
mv temp.tmp temp
sed -e "s/^//g" temp >> iptables.deny.tmp
if [ -s /root/root_dir/iptables.deny.tmp ]; then
sort iptables.deny.tmp | uniq > iptables.deny.uniq
# 일정 횟수 이상만 차단
for block_ip in $(cat iptables.deny.uniq)
do
num=`grep "$block_ip" iptables.deny.tmp | wc -l`
if [ $num -gt $NUMBER ]
then
echo $block_ip >> iptables.deny
fi
done
if [ -s /root/root_dir/iptables.deny ]; then
sort iptables.deny | uniq > iptables.deny.uniq
mv iptables.deny.uniq iptables.deny
fi
## 포착된 IP 관리자 메일로 통보
if [ -s /root/root_dir/iptables.deny ]; then
mail -s "[IPTABLES]불법 접근 IP 발견!! 방화벽:ALL 포트 차단" root@localhost < iptables.deny
fi
## 방화벽 정책에 DROP 정책 추가
if [ -s /root/root_dir/iptables.deny ]; then
for DENY_LIST in $(cat iptables.deny);
do $IPTABLES -I INPUT $ORDER -s $DENY_LIST -j DROP;
done;
fi
rm -f /root/root_dir/temp
rm -f /root/root_dir/illegal
rm -f /root/root_dir/invalid
rm -f /root/root_dir/authentication
rm -f /root/root_dir/smtp_block
rm -f /root/root_dir/iptables.deny.tmp
fi
else
### 최초 실행이 아닐경우에 구동되는 부분(/root/root_dir/iptables.deny 파일이 존재하고 있을경우)
cd /root/root_dir
sort iptables.deny | uniq > iptables.deny.uniq
mv iptables.deny.uniq iptables.deny
#빈줄 없앰
sed -e "/^$/d" iptables.deny > iptables.deny.uniq
mv iptables.deny.uniq iptables.deny
grep "illegal" /var/log/messages | egrep -v "211.43.205.124" | awk '{print $9 $13}' > temp
sed -e "s/illegal//g" temp > iptables.deny.tmp
grep "Invalid" /var/log/messages | egrep -v "211.43.205.124" | awk '{print $6 $10}' > temp
sed -e "s/Invalid//g" temp >> iptables.deny.tmp
grep "invalid" /var/log/messages | egrep -v "211.43.205.124" | awk '{print $9 $13}' > temp
sed -e "s/invalid//g" temp >> iptables.deny.tmp
grep "authentication failure" /var/log/messages | egrep -v "211.43.205.124" | awk '{print $9 $13}' | awk -F"host=" '{print $2}' > temp
#빈줄 없앰
sed -e '/^$/d' temp > temp.tmp
mv temp.tmp temp
sed -e "s/uid=0rhost=//g" temp >> iptables.deny.tmp
grep "Relaying denied" /var/log/maillog | egrep -v "211.43.205.124" | awk '{print $9}' | awk -F"[" '{print $2}' | awk -F"]" '{print $1}' > temp
#빈줄 없앰
sed -e '/^$/d' temp > temp.tmp
mv temp.tmp temp
sed -e "s/^//g" temp >> iptables.deny.tmp
if [ -s /root/root_dir/iptables.deny.tmp ]; then
sort iptables.deny.tmp | uniq > iptables.deny.uniq
# 일정 횟수 이상만 차단
for block_ip in $(cat iptables.deny.uniq)
do
num=`grep "$block_ip" iptables.deny.tmp | wc -l`
if [ $num -gt $NUMBER ]
then
echo $block_ip >> iptables.deny.tmp.tmp
fi
done
if [ -s /root/root_dir/iptables.deny.tmp.tmp ]; then
sort iptables.deny.tmp.tmp | uniq >> iptables.deny.tmp.tmp.uniq
mv iptables.deny.tmp.tmp.uniq iptables.deny.tmp.tmp
diff iptables.deny.tmp.tmp iptables.deny | awk -F"< " '{print $2}' > deny.new
#빈줄 없앰
sed -e '/^$/d' deny.new > deny.new.tmp
mv deny.new.tmp deny.new
sort deny.new | uniq >> deny.new.tmp
mv deny.new.tmp deny.new
fi
## 포착된 IP 관리자 메일로 통보
if [ -s /root/root_dir/deny.new ]; then
mail -s "[IPTABLES]불법 접근 IP 발견!! 방화벽:ALL 포트 차단" root@localhost < /root/root_dir/deny.new
fi
## 방화벽 정책에 DROP 정책 추가
if [ -s /root/root_dir/deny.new ]; then
for DENY_LIST in $(cat deny.new);
do $IPTABLES -I INPUT $ORDER -s $DENY_LIST -j DROP;
done;
cat deny.new >> iptables.deny
fi
## 스크립트 실행 중 생성된 임시 파일들 삭제
rm -f /root/root_dir/temp
rm -f /root/root_dir/illegal
rm -f /root/root_dir/invalid
rm -f /root/root_dir/authentication
rm -f /root/root_dir/smtp_block
rm -f /root/root_dir/deny.new
rm -f /root/root_dir/iptables.deny.tmp
rm -f /root/root_dir/iptables.deny.tmp.tmp
sort iptables.deny | uniq > iptables.deny.uniq
mv iptables.deny.uniq iptables.deny
#빈줄 없앰
sed -e '/^$/d' iptables.deny > iptables.deny.uniq
mv iptables.deny.uniq iptables.deny
fi
fi
cd - > /dev/null 2>&1
======================================================================================
* 위의 스크립트를 임의의 파일명으로
/etc/cron.1min/sshsecurity.sh 아래에 위치시키고,
/etc/crontab 에 */1 * * * * root run-parts /etc/cron.1min
라인을 추가시키면 매, 1분마다 불법접근을 분석후 차단시킴.
* 하루에 10번(패스워드 입력 실패, 불법 릴레이 시도, 비존재 계정 접근 시도 등..)의 제한을 두었으므로, 로그파일(/var/log/messages)역시 하루에 한번 로테이션 되게 설정.
* 매일 리셋되어야 하므로, /root/root_dir/iptables.deny 파일 내용을 하루에 한번 리셋(클리어) 해주어야 함
- 리셋 스크립트 내용을 아래의 디렉토리에 만들어주고 (/etc/cron.daily/reset_iptables_deny.sh)
======================================================================================
#!/bin/bash
cat /root/root_dir/iptables.deny >> /root/root_dir/iptables.deny_history
cat /dev/null > /root/root_dir/iptables.deny
uniq /root/root_dir/iptables.deny_history > /root/root_dir/iptables.deny_history.tmp
mv /root/root_dir/iptables.deny_history.tmp /root/root_dir/iptables.deny_history
/etc/rc.d/rc.firewall
======================================================================================
* 방화벽 구동시 차단된 아이피 자동 로딩 부분 추가
(/etc/rc.d/rc.firewall 파일 하단에 아래 스크립트 추가)함
======================================================================================
############# 불법 접근 시도 IP 차단 (해당 스크립트 구동시) #########################
if [ -s /root/root_dir/iptables.deny ]; then
for DENY_LIST in $(cat /root/root_dir/iptables.deny);
do $IPTABLES -I INPUT 4 -s $DENY_LIST -j DROP;
#### 4 는 정책이 들어간 순서(몇번째 라인에 삽입할것인가 임)
done;
fi
======================================================================================
'리눅스 > Security' 카테고리의 다른 글
웹해킹 서버 분석과 웹쉘 탐지 및 대응방법 2편 (0) | 2015.01.26 |
---|---|
웹해킹 서버 분석과 웹쉘 탐지 및 대응방법 1편 (0) | 2015.01.26 |
iframe 삽입 파일 스캔 (0) | 2015.01.26 |
리눅스용 백신 - f-prot 설치 및 사용법 (0) | 2015.01.26 |
arp 스푸핑 방지 (0) | 2015.01.26 |