우선 firewall가 켜져있는지 확인하시고 꺼져있다면 켜주세요.
# systemctl status firewalld
저는 해당작업을 root홈폴더에서 진행했습니다.
# mkdir -p /root/ipblock
# cd /root/ipblock
# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip
# unzip GeoLite2-Country-CSV.zip
# mv GeoLite2-Country-CSV_20190326/ GeoLite2-Country-CSV/
# vi ipblock_CN.sh
#!/bin/bash
#국가명
CONTRY="CN"
#geolite2 국가번호위치
LOCATION=/root/ipblock/GeoLite2-Country-CSV/GeoLite2-Country-Locations-en.csv
#geolite2 ipv4위치
DATA=/root/ipblock/GeoLite2-Country-CSV/GeoLite2-Country-Blocks-IPv4.csv
#firewall 수정할xml파일위치
FIREWALL=/etc/firewalld/zones/public.xml
#국가번호를 따서 code에 저장
CODE=`egrep ${CONTRY} ${LOCATION} | cut -d, -f1 | sed -e 's/"//g' | sed -e 's/,/-/g'`
#firewall xml파일 수정 스크립트
sed -i '/<\/zone>/d' ${FIREWALL}
for IPRANGE in `egrep "${CODE}" $DATA | cut -d, -f1 | sed -e 's/"//g' | sed -e 's/,/-/g'`
do
echo -e " <rule family=\"ipv4\">
<source address=\"${IPRANGE}\"/>
<drop/>
</rule>" >> ${FIREWALL}
done
echo -n "</zone>" >> ${FIREWALL}
해당스크립트를 만들때 https://blog.naver.com/travis31013/220262486667 를 참고하였습니다.
코드설명 : 해당코드를 2번 실행하면 차단코드가 2배가 됩니다. 조심하세요.
CONTRY="CN"으로 중국으로 설정하였습니다. 다른국가로 설정하는것도 가능합니다. (csv파일을 직접확인하여 국가코드가 뭔지 알 수 있습니다.)
LOCATION 과 DATA는 GeoLite2 를 설치한 디렉토리로 하여금 경로를 찾으시면됩니다. 만약 Pro를 돈주고 구매하신분들은 파일이름이 조금씩 다를겁니다.
FIREWALL는 현재 centos firewall에서 사용중인 xml파일(주로 public.xml)으로 경로를 잡아주시면됩니다.
2개이상의 국가를 설정하는건 옵션에 없습니다. 국가명을 다르게하여 2번실행하거나 변수를 몇개더만들고 아래 egrep을 적절히 수정하여 한번에 하는 방법도 있습니다. |
# chmod 700 ipblock_CN.sh
# ./ipblock_CN.sh
# firewall-cmd --reload
중국ip차단이 완료되었습니다.
그럼 이제 원래대로 되돌리고 싶어졌을때 어떻게 하느냐
ftp로 접속해서 firewall가 사용하는 xml파일(주로public.xml)에 해당 아이피를 쓸어서 지우는게 가장간단한 방법입니다. 하지만 이것이 불가피할 경우도 분명 존재합니다.
(ftp접속이 어렵거나, 장기간 관리가안되 아이피가 여러개 섞여서 어디서 어디까지 해당ip인지 알수가없거나...)
정말정말 불가피하다면
# vi ipblock_recover.sh
#!/bin/bash
CONTRY="CN"
LOCATION=/root/ipblock/GeoLite2-Country-CSV/GeoLite2-Country-Locations-en.csv
DATA=/root/ipblock/GeoLite2-Country-CSV/GeoLite2-Country-Blocks-IPv4.csv
CODE=`egrep ${CONTRY} ${LOCATION} | cut -d, -f1 | sed -e 's/"//g' | sed -e 's/,/-/g'`
for IPRANGE in `egrep "${CODE}" $DATA | cut -d, -f1 | sed -e 's/"//g' | sed -e 's/,/-/g'`
do
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family=ipv4 source address=$IPRANGE drop"
done
# chmod 700 ipblock_recover.sh
# ./ipblock_recover.sh
# firewall-cmd --reload
참고로 이 방법 지인짜 오래걸립니다. (1시간 넘는걸 예상로됨)
firewall-cmd 명령어에 그 망할 success안뜨게 하는 방법없는지...혹은 뜨더라도 빠르게좀 넘어가게 하는방법이라도..
아시는분은 피드백해주시면 감사하겠습니다.
오류가 떴을때 대응법
{
unzip 이란 명령어를 찾을수가 없습니다
# yum install unzip
}
'IT, Computer > Linux' 카테고리의 다른 글
그누보드5 설치(php7, mysql8) (1) | 2019.03.30 |
---|---|
mysql8 유저 생성 (1) | 2019.03.29 |
아파치 홈 디렉토리 설정 및 가상호스트설정 (0) | 2019.03.28 |
DNS 서버만들기 (0) | 2019.03.27 |
CentOS 7 APM 설치 - php7.3.3 설치(컴파일설치) (1) | 2019.03.26 |