반응형

요즘 보안에 관심이 무척이나 많아졌다. 과거 회사에서 근무시 운영서버에 로그인을 3회

정보 실패하였을 때 로그인 차단 기능이 존재하였다. 어떻게 구현하는것인지 궁금해서

한번 찾아 본 뒤에 셋팅법을 적도록 하겠다.

[1] Tool Search
인터넷을 뒤지다 좋은 Tool인 fall2ban 이라는 Tool을 찾게 되었다. 단순히 각 데몬별로
로그인 성공 / 실패 횟수를 지정하여 그 기준이 넘을 경우 iptables에 등록해 주는 Tool
이다.

[2] fail2ban Install
아주간단하게 설치하였다. 아래 화면을 참조하도록 한다.

$ sudo apt-get install fail2ban
[sudo] password for testId:
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
다음 새 패키지가 전에 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  linux-headers-2.6.32-24 linux-headers-2.6.32-26 linux-headers-2.6.32-27 linux-headers-2.6.32-26-generic-pae linux-headers-2.6.32-27-generic-pae linux-headers-2.6.32-24-generic-pae
이들을 지우기 위해서는 'apt-get autoremove'를 사용하십시오.
다음 패키지를 더 설치할 것입니다:
  whois
제안하는 패키지:
  python-gamin mailx
다음 새 패키지를 설치할 것입니다:
  fail2ban whois
0개 업그레이드, 2개 새로 설치, 0개 지우기 및 65개 업그레이드 안 함.
127k바이트 아카이브를 받아야 합니다.
이 작업 후 1,016k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까 [Y/n]? Y
받기:1
http://gb.archive.ubuntu.com/ubuntu/ lucid/universe fail2ban 0.8.4-1ubuntu1 [96.0kB]
받기:2
http://gb.archive.ubuntu.com/ubuntu/ lucid/main whois 5.0.0ubuntu3 [30.7kB]
내려받기 127k바이트, 소요시간 3초 (41.5k바이트/초)
전에 선택하지 않은 fail2ban 패키지를 선택합니다.
(데이터베이스 읽는중 ...현재 116991개의 파일과 디렉토리가 설치되어 있습니다.)
fail2ban 패키지를 푸는 중입니다 (.../fail2ban_0.8.4-1ubuntu1_all.deb에서) ...
전에 선택하지 않은 whois 패키지를 선택합니다.
whois 패키지를 푸는 중입니다 (.../whois_5.0.0ubuntu3_i386.deb에서) ...
man-db에 대한 트리거를 처리하는 중입니다 ...
ureadahead에 대한 트리거를 처리하는 중입니다 ...
fail2ban (0.8.4-1ubuntu1) 설정하는 중입니다 ...

[3] 데몬별 차단 설정
path : /etc/fail2ban/jail.conf 파일을 수정하면된다.
아래 그림을 SSH 데몬의 차단 설정을 해놓은 예제이다.

[ssh]

enabled = true                     ==> ssh데몬 차단기능을 할것인지 설정(true/false)
port  = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3                          ==> 요기있는것이 몇번 로그인실패시 차단할것인지 입력


이상이다. 실제 저런 경우 차단이 되면 iptables에 자동 등록된다.

[4] 차단해제
관리자에게 연락 후 차단 해제시에는 다음과 같은 명령을 입력하도록 한다.

sudo iptables -D fail2ban-ssh -s 210.93.54.140 -j DROP

[5] 끝
다양한 해킹 시도에는, 막는방법에는 여러가지가 있다. 난 개인적으로 Application에서 막는것보다 물리적으로 막는것을 좋아라 하지만, 이문제는 돈이 드는 문제라, Application에서 막는 방법에 대해서라도 자세히 알아두는 것이 좋다고 생각한다.

                                                                   - 2011.02.18 랑이씀 -

반응형

'Server > Linux' 카테고리의 다른 글

[ VIM 창 분할하기 ]  (2) 2011.02.23
[ 파티션 설정 ]  (0) 2011.02.21
[ iptables 를 이용한 국가별 차단 ]  (10) 2011.02.15
[ SSH 터널링 팁 ]  (0) 2011.02.13
Ubuntu Logs Explain  (0) 2011.02.08
반응형
중국의 짱개 / 이태리 양키 이런놈들이 자꾸 나의 서버를 침입한다.
이놈들을 막기 위해 방화벽을 설치 후 간단한 Script를 돌려 차단하였다.
iptables를 이용하면 간단하게 막을 수가 있다.

iptables를 이용하여 국가별 접속을 차단하는 방법에는 2가지가 있다.
(1) Kernel을 업데이트 한 후 iptables를 이용하는 방법
(2) Script를 이용하는 방법

나는 아직 Kernel Level에서 접근하는 법을 확실히 익히지 못하여 (2) 번 레벨에서 막도록 하겠다.

[1] 접속한 IP찾기
/var/log/auth.log를 뒤져 보면 아래와 같은 메시지가 뜬다.
1 18:Feb 13 13:14:03 xxxxx pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=200.27.62.186
2 22:Feb 13 13:14:07 xxxxx pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=200.27.62.186
3 25:Feb 13 13:14:09 xxxxx pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=200.27.62.186

위에서 얼핏보면 알겠지만 220.27.62.186 에서 자꾸 접속을 시도한다. 저놈이 도대체 어느나라 놈인지 알아보자.


대충 보아하나 칠레쪽 양키놈이다. 아~~~ 내서버에 뭔 볼일이 있다고 ㅠㅠㅠ 이제 저놈을
막도록 하자. 참고적으로 오늘부터 칠레 놈들이 싫어졌다.

[2] 국가별 Network 정보 Download하기
URL :
http://geolite.maxmind.com/download/geoip/database/ 
위 URL로 가서 가장 최신으로 업데이트 된 Network 정보를 가져온다.
파일(GeoIPCountryWhois.csv) 을 열어보면 아래와 같다.

     1 "1.0.0.0","1.7.255.255","16777216","17301503","AU","Australia"
     2 "1.9.0.0","1.9.255.255","17367040","17432575","MY","Malaysia"
     3 "1.10.10.0","1.10.10.255","17435136","17435391","AU","Australia"
     4 "1.11.0.0","1.11.255.255","17498112","17563647","KR","Korea, Republic of"
     5 "1.12.0.0","1.15.255.255","17563648","17825791","CN","China"
     6 "1.16.0.0","1.19.255.255","17825792","18087935","KR","Korea, Republic of"
     7 "1.21.0.0","1.21.255.255","18153472","18219007","JP","Japan"
     8 "1.22.0.0","1.23.255.255","18219008","18350079","IN","India"
     9 "1.24.0.0","1.31.255.255","18350080","18874367","CN","China"
    10 "1.33.0.0","1.33.255.255","18939904","19005439","JP","Japan"
    11 "1.34.0.0","1.35.255.255","19005440","19136511","TW","Taiwan"
    12 "1.36.0.0","1.36.255.255","19136512","19202047","HK","Hong Kong"

앞에껀 순번 | startNetwork | EndNetwork | ,,, | 국가 이런 순이다. 그럼 위 정보를 파싱하여
Script를 만들어 보도록 하자.

[3] Script 생성하기

#! /bin/bash
echo "########## IP BLOCK Script START ###########"
# iptables init
sudo iptables -P INPUT ACCEPT
sudo iptables -F
echo "IPTABLES INIT SUCCESS"

BLOCK_LIST_FILE=./GeoIPCountryWhois.csv
echo "BLOCK LIST FILE = $BLOCK_LIST_FILE"

# ADD BLOCK TARGET LIST
BLOCK_TARGET_COUNTRY="China|France|Chile"

# REGIST BLOCK IP FOR LOOP
for IP_BANDWIDTH in `egrep $BLOCK_TARGET_COUNTRY $BLOCK_LIST_FILE | awk -F, '{print $1, $2}' | awk -F\"  '{print $2"-"$4}'`

do
   sudo iptables -I INPUT -p all -m iprange --src-range $IP_BANDWIDTH -j DROP
done

sudo iptables -L
echo "################### IP BLOCK Script END ############# "


위 스크립트는 랑이가 짠것이다. awk를 이해 하고 있다면, 아주 쉽게 만들수 있다.

만약 허용국가만 포함하고 싶을때에는 egrep의 조건을 조금 바꾸어주면된다.

#! /bin/bash
echo "########## IP BLOCK Script START ###########"
# iptables init
sudo iptables -P INPUT ACCEPT
sudo iptables -F
echo "IPTABLES INIT SUCCESS"

BLOCK_LIST_FILE=./GeoIPCountryWhois.csv
echo "BLOCK LIST FILE = $BLOCK_LIST_FILE"

# ADD BLOCK TARGET LIST
ALLOW_TARGET_COUNTRY="Korea"

# REGIST BLOCK IP FOR LOOP
for IP_BANDWIDTH in `egrep -v $ALLOW_TARGET_COUNTRY $BLOCK_LIST_FILE | awk -F, '{print $1, $2}' | awk -F\" '{print $2"-"$4}'`

do
sudo iptables -I INPUT -p all -m iprange --src-range $IP_BANDWIDTH -j DROP
done

sudo iptables -L
echo "################### IP BLOCK Script END ############# "

노란색으로 표현한 부분은 간단한 grep 명령이므로 별도로 설명안해도 될듯하다.

[4] Script 실행

########## IP BLOCK Script START ###########
IPTABLES INIT SUCCESS
BLOCK LIST FILE = ./GeoIPCountryWhois.csv


DROP       all  --  anywhere             anywhere            source IP range 1.202.0.0-1.207.255.255
.........
.........
.........

DROP       all  --  anywhere             anywhere            source IP range 1.12.0.0-1.15.255.255

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
################## IP BLOCK Script END #############


다됐따 ㅋㅋㅋ 요렇게 하면 무사히 작업이 완료된다.

이 글을 쓰니 괜시리 애국심이 막 불타온다. 나도 언젠간 짱깨 / 양키 놈들 서버 들어가서 해집고 다니는 실력자가 되어야 겠다 .ㅋㅋㅋㅋ 이제 중국|프랑스|칠레 의 나쁜시키들이 안들어오겠지? 낼도 로그를 지켜봐야겠당 ㅋㅋ

                                                             - 2011.02.15 랑이씀 -
반응형

'Server > Linux' 카테고리의 다른 글

[ 파티션 설정 ]  (0) 2011.02.21
[ 로그인 N번 실패시 아이피 차단 ]  (2) 2011.02.18
[ SSH 터널링 팁 ]  (0) 2011.02.13
Ubuntu Logs Explain  (0) 2011.02.08
Tomcat Parameters: Invalid Error 해결법  (0) 2011.02.04
반응형
터널링에 대해서 알아보도록 하겠다.

일전에 내가 회사에 다닐적, kt에서는 네이트온 이용이 불가능 했다. 머... 네이트는 skt 가 만

든 거라서 그랬던것 같다. 아무튼, U2 메신져만 사용하도록 했었는데, 네이트온이 너무

하고싶어서 터널링을 통해 사용한 것이 기억이 난다. 터널링의 개요는 별도로 설명하지 않겠다.

터널링을 위한 Tool로는 putty를 이용한 SSH 터널링에 대해 설명하도록 하겠다.

[1] PUTTY 셋팅

(1) Putty 의 터널링 옵션을 추가한다.


위 그림에서 보면 10000번 포트를 추가한 것을 확인 할 수 있다.
빨강선으로 된 부분을 반드세 체크해 주길 바란다.

(2) Connection Timeout을 설정한다.ㅋ


바로연결이 되지 않을 수도 있기 때문에 Connection Timeout을 30초로 설정한다.

(3) 로그인한다.

[2] IE Proxy 설정 변경
[도구] -> [인터넷 옵션] -> [연결] -> [LAN 설정] 에서 아래 그림과 같이 적어준다.


프록시 서버에서 체크를 한 둘 한 뒤에 , [고급] 버튼을 클릭한다.



Socket 에 localhost 와 10000번 포트를 입력하도록 한다.

[3] 마무리

이제 끝!! 이렇게 하면 IE는 10000번 포트를 사용하게 된다. 80번 포트를 사용하지 않게 되는것이다. 터널링을 잘못 오용하면 회사에서 딴짓하는데 사용될 가능성이 높다. 조심하길 바란다.

                                                                           - 2011.02.14 랑이씀 -



반응형
반응형
서버에서 로그관리는 매우 중요하다. 접속 이력 및 각종 정보들이 수집되기 때문에

보안을 위해서는 로그관리의 중요성을 인식해야한다.

[1] /var/user.log
: 유저레벨의 모든 로그들이 기록된다 .

Feb  8 11:32:08 MandS sudo: pam_sm_authenticate: Called
Feb  8 11:32:08 MandS sudo: pam_sm_authenticate: username = [testId]

위 로그는 $su - testId 를 한 결과이다. 위 로그는 특정아이디에서 다른 아이디로 로그인 했을
때 기록되는 로그이다.

[2] /var/auth.log
: 인증관련 로그이다. ( 로그인, 로그아웃 등의 접속이력을 관리한다.)

 ** testId 로 로그인 후 로그예제 **
Feb  8 11:37:39 MandS sshd[6991]: Invalid user ontobase from 192.168.0.2
Feb  8 11:37:39 MandS sshd[6991]: Failed none for invalid user testId from 192.168.0.2 port 24183 ssh2
==> 해당 로그는 testId로 로그인하였으나, 인증에 실패시 나타나는 오류이다.

Feb  8 11:37:48 MandS sshd[6993]: pam_sm_authenticate: Called
Feb  8 11:37:48 MandS sshd[6993]: pam_sm_authenticate: username = [testId]
Feb  8 11:37:48 MandS sshd[6993]: Accepted password for testId from 192.168.0.2 port 24184 ssh2
Feb  8 11:37:48 MandS sshd[6993]: pam_unix(sshd:session): session opened for user testId  by (uid=0)
==> 위 로그는 192.168.0.2 IP Address로 로그인이 성공하여 Session을 획득한 케이스의 로그이다.


[3] /var/dmesg.0
: 부팅을 하는 동안 생성된 로그들을 볼 수 있다.

** 부팅시 로그 샘플 **
 293 [    0.800798] CPU6: Thermal monitoring enabled (TM1)
 294 [    0.800800] CPU 6 MCA banks SHD:2 SHD:3 SHD:5 SHD:6 SHD:8
 295 [    0.800881] CPU6: Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz stepping 05
 296 [    0.800891] checking TSC synchronization [CPU#0 -> CPU#6]: passed.
 297 [    0.820947] Booting processor 7 APIC 0x7 ip 0x6000
 298 [    0.831194] Initializing CPU#7
 299 [    0.908291] CPU: Physical Processor ID: 0
 300 [    0.908292] CPU: Processor Core ID: 3
 301 [    0.908293] CPU: L1 I cache: 32K, L1 D cache: 32K
 302 [    0.908294] CPU: L2 cache: 256K
 303 [    0.908295] CPU: L3 cache: 8192K
 304 [    0.908303] CPU7: Thermal monitoring enabled (TM1)
 305 [    0.908305] CPU 7 MCA banks SHD:2 SHD:3 SHD:5 SHD:6 SHD:8
 306 [    0.908345] CPU7: Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz stepping 05
 307 [    0.908354] checking TSC synchronization [CPU#0 -> CPU#7]: passed.
 308 [    0.928365] Brought up 8 CPUs
 309 [    0.928366] Total of 8 processors activated (46930.37 BogoMIPS).
 310 [    0.931538] CPU0 attaching sched-domain:
 311 [    0.931541]  domain 0: span 0,4 level SIBLING
 312 [    0.931542]   groups: 0 (cpu_power = 589) 4 (cpu_power = 589)

위 로그는 부팅시 하드웨어 정보를 읽어와 로그로 기록하는 부분이다.

[4] Etc Log Files

이밖에도 어떠한 로그들이 있는지 알아보도록 하자.

/var/log/message : 일반적인 로그메시지
/var/log/boot        : 시스템 부트 메시지
/var/log/debug     : 디버그 모드 레벨 메시지
/var/log/daemon.log : 현재 실행중인 서비스에 대한 데몬 어플 로그
/var/log/dpkg.og : 다운받은 패키지에 관련된 로그
/var/log/faillog : 로그인 실패 History이력 로그
/var/log/kern.log : 커널 모드 로그

이상이다. 로그관리의 중요성은 몇번을 강조하더라도 부족함이 많을 정도로 중요한 부분이다.

좀더 실력이 된다면 내 입맛에 맛게 서버에서 로그를 셋팅하는 법을 공부해 보도록 하자.

                                                                                - 2011.02.08 랑이씀 -



반응형

'Server > Linux' 카테고리의 다른 글

[ iptables 를 이용한 국가별 차단 ]  (10) 2011.02.15
[ SSH 터널링 팁 ]  (0) 2011.02.13
Tomcat Parameters: Invalid Error 해결법  (0) 2011.02.04
[ IPRELAY 를 활용한 PORT 포워딩 ]  (0) 2010.12.16
[ Apache2 UserDir 설정방법 ]  (0) 2010.10.18

+ Recent posts