2017/03에 대한 글이 5 개 검색되었습니다.
2017/03/28 15:19

iptables로 국가별 차단하기.

Posted by JParker
OS/Linux 2017/03/28 15:19
오랜만에 글을 쓰게 되네요... 

이전엔 커널과 iptables를 소스컴파일하여 사용하여 국가별 차단을 하였습니다.
하지만, 세월이 흐르고 많이 변했죠? Redhat계열에서는 RPM을 많이 사용하시므로 
rpm과 한가지 소스 컴파일만 가지고 국가별 차단할 수 있는 모듈을 만들어 보도록하겠습니다.

1. 관련 자료 다운받기
본 자료는 oops.org에서 가져온 데이터이며, 설치에 대한 부분은 생략 하도록 하겠습니다.
GeoIP는 기존 free 버전을 사용하셔도 무방합니다. 

RPM 소스 



제가 만들어놓은 CentOS 6.8 기준입니다.




xtables-addons-1.47.1.tgz 의 경우 ipv6관련으로 링크가 깨지는 문제로 수정해서 다시 패키징 해놓은 상태입니다.

2. 패키지 설치

2-1. yum 을 이용하여 kernel-debug-devel , iptables-devel  두가지를 설치 합니다.
2-2. 본 사이트에서 제공하는 GeoIP 패키지 (srpm제외)를 설치합니다.
2-3. xtables 애드온을 설치합니다.

# tar xvfz xtables-addons-1.47.1.tgz 
# cd xtables-addons-1.47.1
# ./configure; make; make install
# cd geoip
# cp xt_geoip* /usr/sbin/

위와 같이 하게 되면 설치가 완료되며, 해당 패키지들은 설정이 완료됩니다.2-4. 설정해당 모듈은 /usr/share/xt_geoip 내에 설정 됩니다. 초반에는 해당 디렉토리가 없으므로 디렉토리 생성을 합니다.

 # mkdir /usr/share/xt_geoip ;  cd /usr/share/xt_geoip 

위와 같이 진행하게 되면, 이제 IP대역을 다운 받아와야 합니다.

# /usr/sbin/xt_geoip_dl 
http://geolite.maxmind.com/download/geoip/database/GeoIPv6.csv.gz
Resolving geolite.maxmind.com... 104.16.38.47, 104.16.37.47, 2400:cb00:2048:1::6810:252f,
Connecting to geolite.maxmind.com|104.16.38.47|:80... connected.
>HTTP request sent, awaiting response... 200 OK
Length: 1402286 (1.3M) [application/octet-stream]
Saving to: “GeoIPv6.csv.gz” 100%[===================================>] 1,402,286
(28.3 MB/s) - “GeoIPv6.csv.gz” saved [1402286/1402286]
http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
Reusing existing connection to geolite.maxmind.com:80.
HTTP request sent, awaiting response... 200 OK Length: 2163552 (2.1M) [application/zip]
Saving to: “GeoIPCountryCSV.zip” 100%[===================================>] 2,163,552
(54.1 MB/s) - “GeoIPCountryCSV.zip” saved [2163552/2163552]

# ls -l
-rw-r--r-- 1 root root 2163552 Mar 8 06:20 GeoIPCountryCSV.zip
-rw-r--r-- 1 root root 10814456 Mar 8 06:18 GeoIPCountryWhois.csv
-rw-r--r-- 1 root root 5100890 Mar 8 06:19 GeoIPv6.csv

세가지의 디렉토리가 보일 것입니다. GeoIPCountryCSV.zip의 경우  GeoIPCountryWhois.csv를 압축하여 놓은 것이므로, 두가지만 입력하도록 합니다. 아까 복사해두었던 명령어중 한가지인 xt_geoip_build 명령을 이용합니다.

# /usr/sbin/xt_geoip_build GeoIPCountryWhois.csv
144432 entries total
0 IPv6 ranges for A1 Anonymous Proxy
32 IPv4 ranges for A1 Anonymous Proxy
.
. 많은 데이터가 있으므로 중략...
.
0 IPv6 ranges for ZM Zambia
66 IPv4 ranges for ZM Zambia
0 IPv6 ranges for ZW Zimbabwe
63 IPv4 ranges for ZW Zimbabwe

해당 데이터가 업로드되었습니다. 만일 perl error가 발생되시는 분들이 있다면 epel에서 패키지를 추가로 설치하셔야 합니다.

# yum install  perl-Text-CSV_XS --enablerepo=epel

위와 같이 정상적으로 설치가 된 경우 아래와 같이 iptables 명령어를 추가하여 사용하실 수 있습니다.

# iptables -A INPUT -m geoip --src-cc CN -j DROP 
# iptables -vL | grep DROP 354 19850 DROP
all -- any any anywhere anywhere Source country: CN

위와 같이 나오게 될 경우 정상적으로 중국 국가별로 차단하는 것입니다.
2017/03/28 15:19 2017/03/28 15:19
2017/03/22 13:08

금산 무지개 다리 야영장

Posted by JParker
취미/백패킹 2017/03/22 13:08
무료이며, 화장실이 있습니다. 다리 뒤쪽으로 슈퍼가 있어 물 공급이 원할합니다.

밤에 별들이 무수히 쏟아지는 경험을 하실 수 있습니다.
아래는 제가 소장하고 있는 드론으로 찍은 사진들입니다. 클릭하시면 원본사이즈를 보실 수 있습니다.

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

2017/03/22 13:08 2017/03/22 13:08
2017/03/20 17:13

마도-백패킹장소

Posted by JParker
취미/백패킹 2017/03/20 17:13
마도 - 꼬옥 가봐야 할 장소입니다.



참고 좌표 : http://m.blog.naver.com/haeinsammae/220480398882

2017/03/20 17:13 2017/03/20 17:13
2017/03/17 14:22

CentOS6에서 SSH 접속시도 차단하기

Posted by JParker
OS/Linux 2017/03/17 14:22
CentOS6에서 SSH 접근 시도 차단하기

기본 구성인 SSH 데몬은 무차별 공격(Blueforce Attack)에 취약할 수 있습니다. 이를 방어하기 위하여 iptables를 이용한 opensource가 있습니다. 바로 fail2ban 이라는 Application입니다. 이 프로그램은 /var/log/secure 로그 파일을 읽어 로그인 시도 실패에 대한 횟수를 지정한 수로 읽어 iptables로 차단을 하게 됩니다. 기본적으로 제공되는 프로그램이 아니기 떄문에 epel 패키지에서 가져와야 합니다.

1. Fail2Ban 설치
# rpm -Uhh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install -y fail2ban --enablerepo=epel
Loaded plugins: auto-update-debuginfo, fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
* base: ftp.daumkakao.com
* epel: mirror.premi.st
* epel-debuginfo: mirror.premi.st
* extras: ftp.daumkakao.com
* updates: ftp.daumkakao.com
Resolving Dependencies
--> Running transaction check
---> Package fail2ban.noarch 0:0.9.4-2.el6 will be updated
---> Package fail2ban.noarch 0:0.9.6-1.el6.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================
Package Arch Version Repository Size
==========================================================
Updating:
fail2ban noarch 0.9.6-1.el6.1 epel 468 k

Transaction Summary
==========================================================
Upgrade 1 Package(s)

Total download size: 468 k
Downloading Packages:

fail2ban-0.9.6-1.el6.1.noarch.rpm | 468 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : fail2ban-0.9.6-1.el6.1.noarch 1/2
Cleanup : fail2ban-0.9.4-2.el6.noarch 2/2
Verifying : fail2ban-0.9.6-1.el6.1.noarch 1/2
Verifying : fail2ban-0.9.4-2.el6.noarch 2/2

Updated:
fail2ban.noarch 0:0.9.6-1.el6.1
Complete!
2. 구성 파일 복사
기본 fail2ban 구성파일은 /etc/fail2ban/jail.conf로 되어있습니다. 기본으로 기동하게 되면 에러를 발생하게 합니다.
따라서, 적용할 수 있도록 다음과 같이 변경하셔야 합니다.
[root@www ~]# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
위와 같이 복사가 완료한 후 설정 파일을 열게 되면 보호할 수 있는 여러가지 방법이 존재합니다.
3. jail.local의 기본값 설정
[root@www ~]# vim /etc/fail2ban/jail.local
첫번째 섹션은 fail2ban이 따르는 기본 규칙을 다룹니다. 가상 서버에 더 세세히 변경하려면 각 섹션의 세부사항을 정의 할 수 도 있습니다.
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space (and/or comma) separator.
# 제외할 아이피를 설정합니다.
ignoreip = 127.0.0.1/8
# "bantime"은 호스트에 접근을 제안하는 시간(초 단위)입니다.
bantime = 3600
# "findtime" 시간 동안 "maxretry"를 초과할 경우 대상이 되도록 합니다. (초 단위)
findtime = 600
# "maxretry"는 /var/log/secure내에 fail 횟수에 대한 제안 설정입니다
# 아래는 3회 이상일 경우 bantime동안 차단됩니다.
maxretry = 3
ignoreip줄에 개인서버 IP를 입력하시기 바랍니다. 또한, 각 주소는 공백으로 구분할 수 있습니다. 접근하시는 IP를 넣을 경우 이 서버에서 실수로 접근하는 분을 차단하지 않을 것입니다.
bantime은 호스트에 접근 제한 시간입니다. 기본 단위는 초이며, 해당 시간 이후 자동으로 해제 됩니다.
maxretry는 접근 실패시 몇번이후 차단할 수 있도록 하는 것이며, 횟수로 설정합니다. (기본 6회)
findtime은 호스트가 로그인 시도후 600초 이내에 maxretry값 이상 실패하면, 해당 IP를 bantime동안 차단합니다.
4. jail.local에 ssh-iptables 섹션 구성
ssh 세부 정보 섹션은 구성에서 아래 있습니다. 하지만 이 섹션에는 따로 세부정보를 설정할 수가 없습니다. 예를 들면, fail시 담당 email을 발송 할 수 있도록 하는 기능도 포함되어있습니다.
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=root, sender=jaehun@me.com]
logpath = /var/log/secure
maxretry = 5
enabled는 해당 섹션의 동작유무를 나타냅니다. 기동은 true 중지는 fail로 설정할 수 있습니다. 기본적으로 sshd 설정에 fail2banuses가 일치하는 구성 파일이 있습니다. /etc/fail2ban/filter.d/sshd.conf  내에 기본 설정이 되어있습니다.
Action은 fail2ban이 일치하는 IP주소를 차단하기 위해 행할 단계입니다. failter 항목과 마찬가지로 각 작업은 action.d 디렉토리 내에 파일을 참조합니다. 기본 금지 조치인 IPTABLES는 /etc/fail2ban/action.d/iptables.conf 내에 존재합니다. iptables 세부사항에서 fail2ban을 추가로 사용자 정의가 가능합니다. 예를 들어 비표준 포트를 사용하는 경우 대괄호 내에 포트 번호와 일치하도록 변경하여 다음과 같이 표시 할 수 있습니다.
ex: iptables [name = SSH, port = 30000, protocol = tcp]
fail2ban에서 모니터링하는 프로토콜은 tcp에서 udp까지 변경이 가능합니다. 해당 엑션이 동작되면 fail2ban이 이메일을 발송할 수 있습니다. 해당 명령인 sendmail-whois는 /etc/fail2ban/action.d/sendmail-whois.conf 에 기본 설정이 되어있으므로 참조하시기 바랍니다. logpath는 secure 파일의 위치를 나타냅니다.

5. fail2ban 기동하기
fail2ban의 설정값을 변경하면 항상 fail2ban을 재시작하여 주시기 바랍니다.
/etc/init.d/fail2ban restart 또는 service fail2ban restart
항상 root로 기동하셔야 합니다. 만일 fail2ban이 iptables내에 적용되어있는지를 확인하고 싶다면 아래와 같이 확인할 수 있습니다.
iptables -L
요즘들어 SSH로 접근시도하는 중국발 blueforce공격이 심해지고 있습니다. 어이없는 패스워드 설정으로 공격자에게 root를 주는 황당한 일을 당하지 맙시다~
2017/03/17 14:22 2017/03/17 14:22
2017/03/16 08:58

SSH 사용자 접근제어

Posted by JParker
OS/Linux 2017/03/16 08:58

SSH 접근 제어 방법
접속을 허가한 계정만 ssh를 통해서 접속이 가능하게 설정해보자.
[테스트 시나리오]
서버에는 tommy, john, root 계정이 존재 한다. root와 john는 ssh로 접속이 가능하게 하고, tommy로는 접속이 되지 않도록 하고 싶다.

[설정]
이 방법은 pam 인증을 이용한 방법이므로 /etc/pam.d/sshd 에 다음과 같은 라인을 추가시켜 준다. /etc/pam.d/sshd 제일 상위 줄에에 추가시켜 준다.

#%PAM-1.0 
auth required /lib/security/pam_listfile.so item=user sense=allow file=/etc/sshd_acl onerr=succeed


각 간격은 tab 으로 띄어준다.
위와 같이 추가한 뒤에는 /etc/sshd_acl 파일을 생성한뒤에 다음과 같이 추가한다.

 #vi /etc/sshd_acl
root
john


자! 그럼 모두 완료 되었다.

[실행테스트]
 -> sshd_acl에 등록된 사용자 [root@john john]# ssh -l john 192.168.0.2  john@192.168.0.2's password: 
Last login: Tue Dec 14 15:31:36 2016 from john

-> sshd_acl에 등록이 되지 않은 사용자
[root@john john]# ssh -l tommy 192.168.0.2
tommy@192.168.0.2's password:
Permission denied, please try again.

-> sshd_acl에 등록한 사용자 (tommy 를 acl등록후 연결 성공)
[root@john john]# ssh -l tommy 192.168.0.2
tommy@192.168.0.2's password:
Last login: Tue Dec 14 15:31:36 2016 from john

이 방법을 사용하여, 서버에 계정을 가지고 있으면 누구나 서버에 접속할 수 있는것이 아니라,
root가 허가를 해준 사용자만이 접속 가능하도록 설정할수 있다.

2017/03/16 08:58 2017/03/16 08:58
Tags , ,