Web Server를 운영하다보니, 해외에서 내 Web Server를 공격하는 시도가 많이 보인다.
그래서 이런 Web Server를 공격하는 Access를 몽땅 iptables 명령으로 drop(block)하는 스크립트를 만들었다.
아래와 같이 스크립트를 작성하고, 실행하면 이 시간 이후로 공격이 모두 차단된다.
##
## Block Some IP addresses
##
#!/bin/bash
LOG_FILE_NAME="/var/log/apache2/access.log"
BLACK_LIST=$(awk '{ printf "%s\n", $1 }' $LOG_FILE_NAME | grep -v "192.168.0." | sort | uniq)
for BLOCKING_IP in $BLACK_LIST
do
BLOCKING_CIDR="$BLOCKING_IP/16"
echo "Blocking CIDR: $BLOCKING_CIDR"
GEO_ADDRESS=$(whois $BLOCKING_IP | grep -i "address:")
echo "$GEO_ADDRESS"
echo ""
iptables -A INPUT -s $BLOCKING_CIDR -p tcp --dport 80 -j DROP
done
iptables -L -n --line-numbers | grep "DROP" | awk '{ printf "%s\n", $5 }' | sort
# iptables -D INPUT 1
# iptables -D INPUT 2
# ...
##
## If you would like to save the iptables rules, then run the following command.
##
# service iptables save
만약, 위와 같이 수행했다가 다시 Rule을 지우고 싶다면, 아래와 같이 스크립트를 작성해서 실행한다.
##
## Remove rules of IP tables
##
#!/bin/bash
REMOVE_IP_LIST=$(iptables -L -n | grep "DROP" | awk '{ printf "%s\n", $4 }' | sort)
for REMOVE_IP in $REMOVE_IP_LIST
do
echo "IP Address to be removed: $REMOVE_IP"
iptables -D INPUT -s $REMOVE_IP -j DROP
done