'운영체제'에 해당되는 글 604건

  1. 2008.12.22 Eventtriggers.exe 를 이용한 실시간 이벤트 모니터링
  2. 2008.10.27 리눅스 방화벽 설정 iptables 옵션과 샘플
  3. 2008.10.27 리눅스(Linux) 시스템 및 데이타 백업(Data Backup)
2008. 12. 22. 18:34

Eventtriggers.exe 를 이용한 실시간 이벤트 모니터링

Eventtriggers 명령줄 도구를 사용하여 이벤트 로그를 생성하고 쿼리하거나 프로그램을 특정 기록된 이벤트와 연결할 수도 있습니다. Eventtriggers.exe 를 사용하면 특정 이벤트 발생 시 프로그램이 실행되는 이벤트 트리거를 만들 수 있습니다.

- Windows XP Professional 및 Windows Server 2003 에서만 지원 -

C:\>eventtriggers.exe /?

EVENTTRIGGERS /parameter [인수]

설명:
    이 도구는 관리자가 로컬 또는 원격 컴퓨터에서
    "이벤트 트리거"를 구성할 수 있도록 합니다.

매개 변수 목록:
    /Create     새 이벤트 트리거를 만듭니다.
    /Delete     트리거 ID로 이벤트 트리거를 삭제합니다.
    /Query      이벤트 트리거의 속성 및 설정을 표시합니다.
    /?          이 도움말/사용법을 표시합니다.

예:
    EVENTTRIGGERS /Create /?
    EVENTTRIGGERS /Delete /?
    EVENTTRIGGERS /Query /?


    EVENTTRIGGERS /Create [/S system [/U username [/P [password]]]]
                      /TR triggername /TK taskname [/D description]
                      [/L log] { [/EID id] [/T type] [/SO source] }
                      [/RU username [/RP [password]]]

이를테면,. 디스크 공간 부족 이벤트 로그가 발생할 경우 해당 이벤트 ID 에 대해서 트리거를 걸어 놓고, 특정 작업을 실행할수 있습니다... 메일을 보낸다건가,. SMS 를 전송한더건가...

EVENTTRIGGERS /Create /S system /U Administrator /TR "Low Disk Space" /EID 99 /SO "WinWord" /T ERROR /TK dsk.cmd

Administrator에 대한 실행할 계정 암호를 입력하십시오:********
성공: 이벤트 트리거 "Disk Cleanup"을(를) 만들었습니다.

등록된 트리거 목록은,.

C:\>eventtriggers.exe /query

트리거 ID 이벤트 트리거 이름        작업
========== ========================= ===================================
         1 Disk Cleanup              c:\windows\system32\cleanmgr.exe


이러한 트리거는, 실행할 작업에 대해서 예약 작업에 등록이 되어 있습니다. 이러한 작업이 가능한 이유는 WMI 의 이벤트 클래스는 이용하기 때문입니다. 물론 예약 작업의 Job 목록도 WMI 를 통해서 등록이 됩니다.

다음 코드는 닷넷 에서의 WMI 를 이용한 EventWatcher 코드 입니다.

ManagementEventWatcher watcher = new ManagementEventWatcher(
                     new EventQuery("SELECT * FROM __InstanceCreationEvent 
                                                           WHERE TargetInstance ISA 'Win32_NTLogEvent'"));
watcher.EventArrived += new EventArrivedEventHandler(Arrived);

Vbscript 에서는,

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" _
    & strComputer & "\root\CIMV2")
Set objEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM Win32_NTLogEvent")


물론, Vista 이상으로 오면서 부터는 예약 작업에 트리거 기능이 추가되어 있는데, 이 트리거 기능은 이벤트 로그 도구와 연동 되어 있어서 쉽게 트리거 설정이 가능합니다.

Trackback 0 Comment 0
2008. 10. 27. 09:49

리눅스 방화벽 설정 iptables 옵션과 샘플


// 넷필터라는 방화벽을 사용하기 위해 정보를 볼수 있는 홈페이지

http://www.netfilter.org


// 커널에 넷필터가 포함되어 있는지 확인하는 작업.. 커널에 필요한 파일은 /boot 안에 있습니다..

serv 컴: cd   /boot  &&  ls  -l
 vi  config-2.6.9-42.EL  ->   /NETFILTER  검색어 입력

 service   iptables  status -> 정지 상태면  start

 하지만 start는 안된다.. 왜?? 방화벽 활성화는 lokkit 으로 하자!!

 // 방화벽을 보여주는 명령어 입니다.. 우린 여기서 방화벽을 활성화를 시킵시다..

 lokkit

// 집중해서 잘 봐주시기 바랍니다...

@NETFILTER 방화벽의 구조
   1. 3개의 기본 table(filter,nat,mangle)로 구성
   2. 각 table 은 chain(패킷의 이동통로) 으로 구성
   3. 각 chain 에 rule 설정


        filter - 패킷의 허용/차단 판단
             FORWARD - 방화벽을 통과하는 패킷의 통로
             INPUT - 방화벽 자체의 서비스로 들어오는 패킷의 통로
             OUTPUT - 방화벽 자체에서 외부(내부망/외부망)으로 나가는 패킷의 통로


        nat - 패킷의 주소변환
             OUTPUT
             POSTROUTING
             PREROUTING


        mangle - 패킷의 속성(ttl,tos,,,) 변경
             FORWARD
             INPUT
             OUTPUT 
             POSTROUTING
             PREROUTING


@ iptables 문법
  1. table name (예: -t  filter/ -t  nat/  -t  mangle)
  2. chain name (예: -A  INPUT/ -D  FORWARD/ -I POSTROUTING)
  3. layer 3 object (예: -s 192.168.x.10 / -d 10.1.1.0/24)
  4. layer 4 object (예: -p tcp --dport 80/ -p udp  --sport 123)
  5. Jump (예: -j DROP/  -j  ACCEPT/ -j  REJECT/ -j  LOG ,,,)

예> 내부망의 특정 HOST(10.1.1.20)가 업무 시간에 업무는 등한시하고
     증권거래,웹서핑,채팅을 하는 것을 방화벽 로그를 통해 확인하였다.
     해당 HOST의 모든 인터넷 서비스 접속을 차단할 수 있도록 네트웍
     방화벽 셋팅을 하세요


iptables  -t  filter  -A  FORWARD  -s 10.1.1.20  -j  DROP

// iptables 의 룰 정보를 보여주는 명령어 입니다...

serv 컴: iptables  -L 

// iptables 의 룰을 전부 제거 하는 명령어 입니다..

 iptables  -F

주의: xp,work 컴에서 serv의 telnet,ftp,ssh 접속이 잘 되는지 반드시 확인

퀴즈> serv 컴에서  work 컴으로부터의 모든 서비스 접속을 차단할 수
        있도록 방화벽 셋팅을 하세요.
iptables  -t  filter  -A  INPUT  -s  192.168.x.20  -d 192.168.x.10 -j  DROPT


// 하지만 iptables 의 룰을 셋팅하고 서비스를 재시작 시키면 모든게 원상태 즉 초기화 되버리는 것을

   우리는 지금 볼수 잇습니다...

serv 컴: service   iptables   restart
 iptables   -L

 iptables   -F
 

// 그리하여 iptables-save 라는 명령으로 파일로 저장을 하는 모습입니다..
 iptables-save  >   /root/firewall.txt

// 그리고 다시 iptables의 룰 정보를 다시 보았습니다.. 하지만 또 다시 돌아가버렸네요 그쵸???

 service   iptables   restart   &&  iptables  -L

// 아까전에 firewall.txt라는 파일로 우린 룰 정보를 저장을 하였습니다.. 그걸로 다시 복구를 하네요..

 iptables-restore   <  /root/firewall.txt
 iptables   -L


// 이렇게 매번 부팅할때마다 iptables를 restore 해줘야 하냐구요??? 아닙니다.. ^^

// 밑에 환경설정 폴더로 가서 iptables-config 파일을 한번 열어볼까요~

 ls   /etc/sysconfig/
 
 vi   /etc/sysconfig/iptables-config

 // 19행에 보시면  IPTABLES_SAVE_ON_STOP="no" 를 yes로 바꿔주세요... 무슨뜻이냐구요?

    iptables가 정지를 할때에 저장을 할것이냐 하고 물어본것입니다.. 초기값은 no 이므로 우리는

    당연히 yes 를 눌러주시면 정지했을때 저장이 되겠죠... 또하나!!!
  -> 19행  IPTABLES_SAVE_ON_STOP="yes"


 // IPTABLES_SAVE_ON_RESTART="no" 를 yes로 변경~!!! 이건 iptable가 재부팅할때 저장

    할것인지 물어보는겁니다.. 당연히 yes!! 그럼 우린 정지했을때나 재부팅 했을때 전부 저장이 되는

    것입니다.. 한번 확인해 볼까요??
  -> 25행  IPTABLES_SAVE_ON_RESTART="yes"

 service   iptables   restart   &&  iptables  -L



* filter 라는 테이블에 -A (해당 체인의 맨 밑에 추가) 하는 구조이다..

serv 컴: iptables  -t  filter  -A  INPUT  -s 1.1.1.1  -d  2.2.2.2 
   -p tcp   --dport  80  -j   ACCEPT
 iptables  -L

 iptables  -t  filter  -A  INPUT  -s  3.3.3.3  -j  DROP
 iptables  -L

* -I 는 삽입될 체인의 위치를 지정할수 있다.. 생략하게 되면 맨위에 추가가 된다..

 iptables  -t  filter  -I  INPUT  -s  192.168.x.1  -j   REJECT
 iptables  -L

* 해당 체인의 3번째에 룰이 삽입 되는 모습이다..

 iptables  -t  filter  -I  INPUT  3   -s  192.168.x.20  -j  LOG
 iptables  -L

* 특정위치의 룰을 -D 라는 옵션으로 제거를 한다..

 iptables  -t  filter  -D  INPUT  4   
 iptables  -L

* 특정위치의 룰을 다시 재설정 하는 장면이다.. -s 는 192.168.x.30, -j ACCEPT 허용으로 ~

 iptables  -t  filter  -R  INPUT  3  -s  192.168.x.30  -j  ACCEPT
 iptables  -L

* iptables 의 정보를 보여주는데 -v를 써서 패킷과 바이트 까지 보여주게 된다.

 iptables  -L   -v   =  iptables  -vL

* iptables 의 정보를 패킷 즉 전체 체인의 패킷을 숫자형태로 보여주게 된다.

 iptables  -L   -n  =  iptables  -nL

* iptables 의 정보를 줄넘버를 붙여 보여준다.

 iptables  -L  --line-numbers

* iptables -Z 는 해당 패킷 및 바이트를 Zero로 초기화 하는 장면..!!

 iptables  -vL    ->   iptables  -Z    ->  iptables  -vL

* -X 는 사용자 정의 체인을 지우는 장면.. INPUT, FORWARD, OUTPUT 는 지울수 없다.

 iptables   -X   RH-Firewall-1-INPUT
 iptables  -L

* 밑에처럼 해보면 안지워짐을 알것이다..

 iptables  -X   INPUT

* 사용자 정의 체인을 TEST라는 이름으로 생성하는 모습.

 iptables  -N  TEST &&   iptables  -nL

* 사용자 정의 체인을 TEST 에서 SSH로 Rename을 하는 모습.

 iptables  -E   TEST   SSH   &&  iptables  -nL

* 사용자 정의 채인에 룰을 생성한다.. 해당체인의 맨 밑에 시작지의 ip를 허용을 한다.

 iptables  -A  SSH  -s  192.168.x.1  -j   ACCEPT

* 하지만 사용자 정의 체인에 허용을 한다고 했음에도 불구하고 INPUT에서  192.168.x.1을 차단하여

   xp 는 접속이 않됨을 알수 있다.. 접속이 되기 위해선 링크를 걸어주자...
 iptables  -nL
  -> xp 에서 serv 로 접속이 되는지 확인

* INPUT 1번째 라인에 xp를 DROP 했으니 우리는 그 위에 룰을 하나 생성하자..

   해당 룰 위치에 오면 SSH 사용자 정의 체인으로 점프를 시켜준다..

   이리 하여 이제 xp 에서 접속이 됨을 알수 있다..

 iptables  -I  INPUT  1  -j   SSH   &&  iptables  -nL


* 사용자 정의 체인을 삭제하기 위해선 아래와같은 순서가 필요하다..
 -> 실습 확인 다 하신 분은  사용자 정의 체인 SSH 를 삭제
       1. 링크 연결 해제
  iptables  -D  INPUT  1
       2. 사용자 정의 체인내의 모든 rule 삭제
  iptables  -F  SSH
       3. 사용자 정의 체인 삭제
  iptables  -X  SSH


* iptables (-t filter) 괄호 안의 부분은 생략이 가능하다.. 왜냐하면 filter 라는 테이블이 기본이기

   때문이다..


* -P 라는 옵션은 INPUT, FORWARD, OUTPUT의 Policy 기본정책을 의미한다..

   기본정책은 처음설정시 ACCEPT 로 허가가 되어있다.. 

* 그리하여 우리는 기본정책을 거부로 바꿔준다..

serv 컴: iptables  -P  INPUT  DROP
 iptables  -P  FORWARD  DROP
 iptables  -nL

 iptables  -D  INPUT  1   &&  iptables  -nL

* 하지만 OUTPUT 체인은 ACCEPT가 되어있다.. 그런데 ping 며 모든게 되지 않는다...

   아.......왜일까..???

확인> input,forward chain 의 기본정책을 DROP 바꾼후 serv 컴에서
        work로, 외부로 핑에 대한 응답이 오는지, "yum -y install  lynx"
        명령어 실행이 되는지 확인해 보세요.

* 잘 들어보자.. ping를 실행시켰을때 맨처음일어나는 일들이 무엇일까??.....

   3 way hand shake 계념을 잘 생각해보면 왜 ping가 않되는지 알것이다...

   그렇다 -0-;; 바로 설명하겠다..

   1 way -> SYN 을 보낸다. (즉 접속할라는데 괜찬냐??)

   2 way <- ACK/SYN 을 받는다.. (나 괜찬아.. 접속해~)

   3 way -> ACK 을 보낸다.. (알았어 접속한다~!!!)

   이리하여 tcp 세션이 맺어졌다.. 신뢰성있는 통신을 하기위해서 하는 과정이다..


   OUTPUT는 ACCEPT 인데 INPUT 가 DROP 라서 2 way 가 왔지만 거부당한다..


* 상태추적테이블이 있다.. 내가 나가면서 시작지 주소와 목적지 주소를 상태추적테이블에 저장한다.

   내가 목적지에 SYN 을 날려서 ACK/SYN을 유도한다.. 그러면 상태추적테이블에서 방화벽 룰

   검사를 하지 않고 내가 요청한거에 대해서는 허용을 해준다.. 그게 바로 ESTABLISHED 이다..


1. 상태추적은 메모리에 적재가 된다.. 그리하여 일정 시간이 지나면 자동으로 free가 된다..

   메모리를 바로 볼수 없으니 cat  /proc/net/ip_conntrack 를 통해 임시로 저장된 파일을

   볼수 있다..  이리하여 -m state --state ESTABLISHED 로 설정을 한다...


2. 또하나 그럼 RELATED는 무엇인가?? FTP 를 예로 들어보자.. FTP는 접속할때 21번 포트로 접속

   을 한다.. 모든 TCP 세션처리는 21번 포트에서 실행되지만 정작..데이터를 주고 받음에는

    20번 포트를 사용하게 된다.. 3way hand shake 로 21번 포트로 상태추적테이블에 저장이

    되었는데.. 전혀 생소한 20번 포트로 데이터가 전송이 되면 우리 컴퓨터는 당연히 INPUT에서

    DROP 된다.. ESTABLISHED의 이런점을 보안하고자 RELATED가 생겨났다..

    RELATED = 연관성을 가진 패킷을 허용한다.. 라는 의미로 알고 넘어가자!!!


* 이제 밑에처럼 설정 후 다시한번 ping 를 날려보자~ 그럼 시원하게 답이 올것이다..

serv 컴: iptables  -I  INPUT  -m  state  --state  ESTABLISHED,
 RELATED  -j   ACCEPT


* 아까 말했던 상태추적 메모리를 직접적이 아닌 간접적 으로 볼수 있는 파일이다..

 cat  /proc/net/ip_conntrack

serv 컴: telnet   localhost

 iptables  -A  INPUT  -i  lo  -j  ACCEPT
 telnet   localhost

 iptables  -F


퀴즈>  serv 컴에는 많은 서비스(ssh,telnet,ftp)가 동작중이다. 이러한
         서비스중 xp에는 telnet 서비스만 접속허용하고, work 에는
         ssh 서비스만 접속을 허용할 수 있도록 rule 셋팅하세요.
 iptables  -A  INPUT  -s  192.168.x.1  -d  192.168.x.10 
  -p  tcp  --dport  23  -j   ACCEPT


 iptables  -A  INPUT  -s  192.168.x.20  -d  192.168.x.10 
  -p  tcp  --dport  22  -j   ACCEPT



// 현재 iptables 의 정보를 -F 라는 옵션으로 제거 한 후 리스트를 찍어봅니다..

serv 컴: iptables  -F  &&  iptables  -nL


퀴즈> work 컴(관리자)의 ping test 에 대해서만 응답을 할 수 있도록
        serv 컴의 방화벽을 셋팅하세요.

// ping는 icmp 프로토콜을 사용하며 echo-request 는 클라이언트에서 들어오는 메시지를

   허용한다는 뜻이다... echo-request는 우리컴퓨터에서 보는게 되는것이다..

    하지만 지금은 OUTPUT 체인이 기본정책이 모든게 허용이 되있으니 이것만 추가하자!!
  iptables  -A  INPUT  -s  192.168.x.20   -p icmp  --icmp-type
  echo-request  -j  ACCEPT


// ESTABLISHED 는 관련성이 있는 어제 설명을 다 했다.. 어제껄 참조해 보기 바람..

serv 컴: iptables  -I INPUT -m state  --state  ESTABLISHED,
 RELATED  -j   ACCEPT

 yum  -y  install    httpd

 vi   /var/www/html/index.html
  <html>
  <body  bgcolor=green>
  <h1> Host Firewall</h1>
  </body>
  </html>
 service  httpd  start
 
퀴즈> serv 컴에는 많은 서비스(web,ftp,telnet,ssh) 가 동작중이다.
        이러한 서비스중 xp컴에는 web,telnet 접속을 허용할 수 있도록
        rule 셋팅을 하세요.(multiport 이용)

// 아래와 같이 처리하면된다.. -m multiport 여러개의 포트를 허가 및 거부할때 ~ 쓰인다.

 iptables  -A  INPUT  -s  192.168.x.1  -p tcp  -m multiport  --dport
 23,80  -j  ACCEPT

serv 컴: iptables  -A  INPUT  -s 192.168.x.20  -j  ACCEPT

work 컴: ifconfig   eth0   192.168.x.200
 -> serv 컴으로 ping test, telnet,ssh 접속을 시도
 -> ifconfig  eth0

serv 컴: iptables  -nL  --line-numbers


// 아이피를 차단했을 경우 그 사용자가 눈치를 까고 ip를 변경 해 주면 그사람은 또 인터넷에 접속을

   할수 잇다.. 그렇지 않기 위해서는 우린 맥 어드레스로 도 iptables를 사용할수 잇다는 점을 알자.


// 밑에는 해당 맥 어드레스만 확인하여 모든걸 다 허용을 해준다.

 iptables   -R  INPUT  -m  mac  --mac-source  00:0C:29
 :xx:xx:xx   -j   ACCEPT

serv 컴: iptables  -F
 iptables  -P  INPUT   ACCEPT
 iptables  -nL

// DROP과 REJECT의 차이점을 보기 위해 우린 두가지 상황을 만든다.

// DROP은 무조건 차단을한다.. 하지만 REJECT는 차단된 메시지를 보여준다..

// 여기서 DROP가 더 효율적이라 한다.. 이유는 REJECT같이 CPU 연산을 통하여 다시 해당

// Client로 메시지를 보내지 않아도 되기 때문이다.. CPU 작업 효율상 말이다.. ㅎ

 iptables  -A  INPUT  -s  192.168.x.1  -j  DROP
 iptables  -A  INPUT  -s  192.168.x.20  -j  REJECT
 iptables  -nL
   -> work, xp에서 serv 로 각각 ping test 시도


// 커널의 접속에 관란 정보를 LOG에 저장을 하기 위해 우리는 syslog.conf 파일의 주석을 풀어

    준다.. 하지만 이게 해당위치에 저장을 할뿐만 아니라 화면에도 계속적으로 뿌려주니 좀 귀찬다..

    그래서 Default는 주석이다 ㅎ

serv 컴: vi   /etc/syslog.conf
       -> 3행 주석제거후  kern.info      /var/log/firewall   수정
 service   syslog   restart

 ls   -l   /var/log/firewall

serv 컴: iptables  -F


// 해당 체인의 기본정책을 DROP로 설정하는 부분이다.. 어제 다 했지 않은가?ㅎㅎ
 iptables  -P   INPUT   DROP

// 항상 iptables 는 순서가 아주 중요하다.. 밑에 두 문장이 순서가 바뀌면 로그는 저장이 되지 않는다

   왜냐하면 INPUT 체인의 해당 룰을 체크하는 도중에 조건이 맞아버리면 바로 거기서 멈쳐버리기때문.

 iptables  -I  INPUT  -p tcp  --dport  80  -j  LOG
 --log-prefix " Web Access : "

 iptables   -A  INPUT  -d  192.168.x.10  -p tcp --dport  80
   -j  ACCEPT

 iptables   -nL

 tail   /var/log/firewall


// 여기도 어려울거 하나 없다.. 단지 추가된 계념이란건 내부망의 전체만 허용하면 된다는것..

    그건 192.168.59.0/24 로 ACCEPT 하면 이 네트워크는 전부다 허용이 되는 것이다..

    그리고 LOG를 기록해주면 된다.. 뭣만?? Telnet으로 접속하는 사람만!! ^^

퀴즈> TELNET 이란 사용자 정의 체인을 만들고, 내부망(192.168.X.0/24)
        의 사용자만 접속을 할 수 있도록 RULE 셋팅을 해당 체인에
        설정하세요. 또한 serv 컴에 telnet 접속을 한 사용자를 추적하기
        위해 log 가 남겨질 수 있도록 방화벽을 셋팅하세요.

iptables  -N  TELNET
iptables  -A  INPUT  -p tcp  --dport  23  -j  TELNET
iptables  -A  TELNET  -s  192.168.x.0/24  -p tcp  --dport  23 
  -j  ACCEPT
iptables  -I  TELNET  -s  192.168.x.0/24  -p tcp  --dport  23  -j
LOG  --log-prefix  " Telnet Access : "


serv 컴: iptables-restore   <  /root/firewall.txt
 iptables   -nL


// 이거는 각자 해보기 바란다.. 지난날 배웠던 기억을 마구마구 꺼내라..ㅎ

   그럼 기억나겠지 ^-^*

총정리 퀴즈> 1. serv 컴에는 여러 서비스(web,telnet,ftp,ssh) 가 동작중
     2. 내부망(192.168.x.0/24) 의 clinet 에게는 web,ftp,telnet
         접속만 허용(multiport 이용).
     3. 외부망(인터넷) 의 clinet 에게는 web 서비스만 허용
     4. 관리자컴(192.168.x.20) 는 ip주소가 바뀌더라도 항상
                     모든 서비스에 접속이 되도록 설정
     5. client 의 서비스 접속시에 방화벽에 log 가 남도록 설정
     6. serv 컴이 내부/외부망의 client 의 ping test 에
         응답하도록 설정
     7. 위에서 언급된 서비스 이외의 모든 접속은 차단.

iptables -L  ==> 목록 열람
iptables -F  ==> 기존에 설정된 것을 전부다 없앤다.

iptables 명령어순서
1. chain name - 체인에 설정할 내용 (insert/delete/replace..) ex) -I CHAIN 3, -A, -D, -R, -F
2. table name - filter(기본값),nat,mangle ex) -t nat, -t filter(기본값)
3.Layer 3 - ex) -s ip주소, -d ip주소
4.Layer 4 - ex) -p tcp --dport 80, -p udp --sport 21
5.Target - ex) -j ACCEPT,LOG,DROP,REJECT

호스트기반의 방화벽에서, serv컴이 방화벽이 설치되어있다.
퀴즈1) serv컴퓨터로 접속할 수 있는 client 중 ip가 192.168.247.20(work)가 있다.
         serv컴에서 이 컴퓨터의 모든 접속을 차단하고자 한다.
         어떻게 방화벽을 셋팅을 해야 할까..
===>INPUT 기본 정책이 ACCEPT로 되어있기에 work컴만 DROP또는 REJECT 시키면 된다.
     iptables -I INPUT -t filter -s 192.168.247.20 -j DROP (DROP은 ping도 거절한다.모든응답차단)    
                       (REJECT는 ping응답을 받고 보낸다)

iptables-save > /root/firewall.rule  ==>룰을 저장
iptables-restore < /root/firewall.rule  ==>룰을 불러옴

컴퓨터가 재부팅되면 설정되었던 iptables룰이 없어진다.
==>/etc/sysconfig/iptables ==> 기본설정룰
    /etc/sysconfig/iptables-config  ==> 환결설정화일
vi iptables-config
19행 IPTABLES_SAVE_ON_STOP="yes"
25행 IPTABLES_SAVE_ON_RESTART="yes"
로 바꾸면 재부팅되어도 설정된 룰이 사라지지 않는다.
iptables -L -v ==> 차단한 패킷의 수와 사이즈를 확인
iptables -L --line-numbers  ==> 룰의 순서를 보여준다.
iptables -L -n ==> 문자주소가 숫자주소로 바뀌어 출력된다. or -nL

iptables -R INPUT 3 -t filter -s 10.1.1.0/24 -j REJECT
iptables -D INPUT 3

iptables -Z  ==>iptables -L -v 로 확인했던 차단패킷 사이즈등을 초기화시킴(모니터링을위해)

<사용자정의체인>:관리의 편의성을 위해서 사용한다.
iptables -X RH-Firewall-1-INPUT  ==>사용자정의 체인 삭제
iptables -N INTRANET  ==>사용자정의 생성
iptables -E INTRANET EXTRANET  ==>사용자정의 이름 변경

*매칭되는 룰이 없을경우는 기본정책의 적용을 받는다.
iptables -A EXTRANET -t filter -s 192.168.247.1 -j ACCEPT
*사용자 정의 체인은 만들어도 쓸수 없다. 링크가 되어 있어야 쓸 수 있다.(0 references)
*INPUT체인에서 EXTRANET에 링크로 갔다가 다시 INPUT으로 돌아와서 다 적용해본후 아무런 매칭된 경우가 없을 경우 INPUT의 기본정책에 적용된다.
iptables -I INPUT 2 -j EXTRANET ==>EXTRANET을 링크시킨다.
iptables -D INPUT 2

*1)사용자 정의를 삭제하기 위해서는 링크를 먼저 삭제해야한다.
*2)사용자 정의를 삭제하기 위해서는 체인내의 모든 RULE을 삭제
iptables -D INPUT 3
iptables -X EXTRANET
iptables -F EXTRANET  ==>EXTRANET 사용자정의체인내의 룰만 삭제한다..

퀴즈) serv컴퓨터에서는 work컴퓨터에서의 telnet접속만 차단할 수 있도록 rule셋팅하세요.
iptables -I INPUT -t filter -s 192.168.247.20 -p tcp --dport 23 -j DROP
iptables -P FORWARD DROP
iptables -P INPUT DROP

퀴즈) serv컴에서는 work 컴에게 ssh접속만 허용하고 xp컴에게는 telnet 접속만 허용하도록 설정하시고 그 이외의 모든 접속을 차단하도록 설정해보세요.
iptables -P INPUT DROP
iptables -A INPUT -t filter -s 192.168.247.20 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -t filter -s 192.168.247.1 -p tcp --dport 23 -j ACCEPT
iptables -A INPUT -t filter -p tcp --sport 1:1023 -j ACCEPT  ==>1세대방화벽의 단점(ssh,telnet등의 서비스들의 ack/syn패킷을 받기 위해서 사용)

 

상태추적기능을 이용해보자.

*ping은 echo-request와 echo-reply를 사용한다.
              <-m state --state>

NEW상태는  접속요청하면 아무나 다 접속된다.(SYN패킷을 가져오는 컴은 다 접속된다.)
ESTABLISH상태는 접속요청에대한 응답패킷을 establish상태라고 한다.요청으로 나갔다가 다시들어오는 패킷들을 허용한다.
RELATED ftp서버를 위해서
INVALID 연결상태를 알수 없거나 잘못된 페더를 가진 경우

iptables -I INPUT 1 -t filter -m state --state ESTABLISHED,RELATED -j ACCEPT 이제는 외부로의 ftp나 ping등의 접속이 된다.나갔다가(sync) 다시 되돌아오는 패킷(sync ack)들을 허용하기위해서(상태추적테이블을 이용한다.)

cat /proc/net/ip_conntrack ==> 상태추적 테이블 저장

방화벽은 2-3계층사이에서 동작한다.

iptables -I INPUT 1 -t filter -m state --state NEW,RELATED,ESTABLISHED ==> 모든 서비스가 다 접속이 되어 버린다. ( 절대로 이런설정은 하면 안된다.)

UDP:123
SysLog-UDP:514
TFTP UDP:69
UDP포트는 서비스를 제공받을시 똑같은 포트를 이용한다. 123/UDP <---------------->123/UDP
                                                                          SERVER                             CLIENT

퀴즈) work 컴퓨터에서만 핑을 허용하고 그외의 모든 핑은 차단한다.
iptables -A INPUT -t filter -s 192.168.149.20 -p icmp --icmp-type echo-request -j ACCEPT

멀티포트
iptables -I INPUT 1 -p tcp -m multiport --dport 80,22,25 -j ACCEPT

노트북을 이용해서 이동하면서 원격접속시는 ip어드레스가 바뀌므로 방화벽에 의해 접속이 안되는 경우를 위해서 맥어드레스를 이용해서 방화벽허용을 한다.
00:0C:29:D4:46:58
iptables -I INPUT 3 -t filter -m mac --mac-source 00:0C:29:D4:46:58 -p tcp --dport 22 -j ACCEPT

 

-j LOG  --> /var/log/messages

vi /etc/syslog.conf
3행수정 kern.*                      /var/log/firewall
-j LOG는 순서를 맨위로 하는 것이 좋다. 로그기록을 하고 바로 밑으로 순서대로 진행한다.
iptables -I INPUT -t filter -p tcp --dport 23 -j LOG --log-prefix "Warning telnet access"
사용자체인을 걸어서 로그기록들의 링크를 걸어놓는 것이 좋은 방법이다.

우리가 열어놓지 않는 포트에의 접속시도의 로그를 남기는 것이 더 효율적이다.

퀴즈)serv컴퓨터에서 접속을 허용한 ssh,web 서비스 이외의 접속에 대해서 로그를 생성할 수 있도록 방화벽 셋팅을 하세요(단 로그를 남길때 "not permit access" 코맨트를 첨부하세요) (not,multiport이용)
==>iptables -I INPUT 1 -t filter -p tcp -m multiport --dport ! 21,22,23,80 -j LOG --log-prefix "not permit access"

iptables의 LOG는 확장 타겟이며 커널레벨의 로그를 제공한다. syslogd에 의해 처리된다.

옵션은 --log-lever,과 --log-prefix가 있다. 일반적으로 --log-lever은 실제로 꼭 필요한 경우를 제외하고, 룰에 잘 명시하지 않으며 기본값인 warning을 쓴다.

loglevel은 총 7가지 옵션이 프로퍼티가 있는데, 유효한 이름은 (상황에 따라 다르다). 'debug' 'info', 'notice', 'warning', 'err', 'crit', 'alert', 'emerg' 이고 이것 은 각각 숫자 7 에서 0 에 대응한다.

이런 레벨에 대한 설명은 syslog.conf 의 man 페이지를 보라.

그 다음 --log-prefix옵션이다.

--log-prefix옵셔은
14자 까지의 별도의 문자로 로그메세지에 선행될 수있다.

ex) iptables -A INPUT -i eth0 -p tcp -J LOG --log-prefix="IPTABLES TCP:"

위와 같이 설정을 하면 INPUT 체인의 인터페이스 eth0에 대해여 tcp프로토콜일때 로그를 남기되 선행되는 메세지는 'IPTABLES TCP:로그내용' 이된다.

주의할것은 로그는 패킷의 운명을 결정하지 않으며 적용되든 되지않든 다음 룰을 검사하게 한다.
그리고 LOG는 LOG를 남기고자 하는 정책 위에 세워져야 한다.

예는 다음과 같다.

# iptables -A INPUT -p tcp --syn -j LOG --log-prefix 'SYN refuse'
# iptables -A INPUT -p tcp --syn -j REJECT

위와 같이 설정한다면 만약 tcp의 접속형 패킷의 로그를 남기고 패킷을 거절한다.

만약 해당룰에 대한 로그를 설정하고 운영중 로그파일(보통 /var/log/messages) 에서 iptables해당로그가 너무 많다거나 또는 너무 없어서(?) 조절하고 싶으면 limit모듈을 사용하면 효과적이다.

※ limit모듈은 기본값으로 한시간에 3번의 로그를 남긴다.
limit모듈은 '-m limit'로 사용할수 있다.

이것은 적용검사의 속도를 제한하는데 로그메세지와 함께 쓰일경우 로그메세지를 남기는 속도를 제어하게된다.

예를 보자
# iptables -A INPUT -p tcp -m limit -j LOG

위와 같이 한다면 한시간에 3번 로그를 남길것이다. limit는 위에도 말했듯이 기본적으로 한시간에 3번의 로그를 남긴다. 이를 조정할려면 --limit옵션을 사용하여 조절할수있다.

--limit
숫자가 따라온다 : 초당 평균 최대 적용 검사 수를 지정한다.  숫자뒤 에 시간단위를 지어할 수 도 있다. ('/second', '/minute', '/hour', '/day'형태이다. 예로, '5/second' 또는 '5/s'가 가능하다)

# iptables -A IPUT -p tcp -m limit --limit '5/minute' -j LOG

위와 같이 설정한다면 1분에 평균 5번의 로그를 쓸것이다.

로그는 syslogd에서 kernel message를 다른곳으로 남기지 않게 한 이상은 /var/log/messages에 남게 된다.

세밀한 로그정책을 세울려면 더 세세하게 설정하는 확장옵션들이 있으나 이정도면 충분히 로그정책을 수립할수있을것이다.


출처 : http://blog.mping.co.kr/


Trackback 0 Comment 0
2008. 10. 27. 09:27

리눅스(Linux) 시스템 및 데이타 백업(Data Backup)

시스템 백업의 중요성 : 외부의 침입자로부터 보호, 예기치 못한 사고로부터의 복원, 시스템 백업은 매일 해야 한다.

 

1. 백업(backup) 종류

1) 완전 백업(Full backup)

2) 증분 백업(Incremental Baxkup) - 부분 백업

3) 차등 백업(Differential Backup) - 전체 백업후의 모든 것을 백업하는것

 

2. 백업 정책과 백업 시간

백업 매체: 하드 디스크, CD-RW, DVD-RW

백업 시간: 이용자가 적은 새벽 시간대(cron이나 at데몬을 이용)에 한다.

 

3. 백업 매체 선택

비용보다는 매체의 신뢰성을 더 따져야 할 것이다. 테이프는 장비가 비싸고 저장 매체는 저가이나 일반인이 사용하기엔 너무 비용부담이 크다.

 

4. tar를 이용한 로컬 데이터 백업

1) tar의 증분 백업(--listed-invremental (-g)옵션)

# mkdir /backup

# mkdir /backup/home

# mkdir /backup/home/fedora

# cd /home/fedora

# touch test1 test2 test3

# tar cpfz /backup/Full-backup.tar.gz --listed-incremental /backup/backuplist /home/fedora

# touch /home/fedora/test4

# tar cpfz /backup/Incremental1.tar.gz --listed-incremental /backup/backuplist /home/fedora

# touch /home/fedora/test5

# tar cpfz /backup/Incremental2.tar.gz --listed-incremental /backup/backuplist /home/fedora

# rm -f /home/fedora/test5

# tar cpfz /backup/Incremental3.tar.gz --listed-incremental /bckup/backuplist /home/fedora

# ls -l /backup

2) 증분 백업 복원

# cd /backup

# tar xvzf Full-backup.tar.gz

# ls /backup/home/fedora

# tar xvzf Incremental1.tar.gz -g ./backuplist

# ls home/fedora

# tar svzf Incremental2.tar.gz -g ./backuplist

# ls home/fedora

# tar xvzf Incremental3.tar.gz -g ./backuplist

# ls home/fedora

# ls /home/fedora

3) tar를 이용한 특정 디렉토리 데이터 자동 백업

자동화 작업은 백업할 때 많은 도움을 주는데, 아래에서는 자동으로 백업하기 위해서 backup.cron이라는 스크립트를 예로들어 설명하고 있다. 이 백업 스크립트는 몇 가지 변수(COMPUTER, DIRECTORIES, BACKUPDIR 그리고 TIMEDIR)만 변경해 주면 어떠한 환경에서도 사용할 수 있다. 이 스크립트를 이용해 첫 달 초에 실행하고 주된 변경이 있기 전에 한 달 동안 실행한다. 이 예제에서는 로컬 서버의(BACKUPDIR) 디렉토리로 백업을 하는데 물론 이 스크립트를 수정하여 로컬 서버에 있는 테이프나 nfs를 통한 백업도 할 수 있다.

1단계

'touch /etc/cron.daily/backup.cron'로 /etc/cron.daily/ 디렉토리에 backup.cron 파일을 생성하고 아래의 내용을 추가한다.

#!/bin/bash

#

#각자의 환경에 맞도록 아래 5개의 변수를 수정한다.

COMPUTER=deep #이 컴퓨터의 이름

DIRECTORIES="/home #백업할 디렉토리

BACKUPDIR=/backups #백업을 저장할 위치

TIMEDIR=/backups/last-full #풀 백업한 시각을 저장할 파일

TAR=/bin/tar #tar 명령의 위치

#아래는 전혀 변경할 필요가 없다.

PATH=/usr/local/bin:/usr/bin:/bin

DOW=`date +%a` #일주일 중의 요일. 예를 들면 Mon

DOM=`date + %d` #한 달(31일) 중의 날짜. 예를 들면 27

DM=`date +%d%b` #날짜와 달. 예를 들면 27Sep

#한 달의 첫날(1일)에 영원한 풀 백업이 진행된다.

#매 일요일에는 지난 일요일의 백업을 덮어쓰는 풀 백업이 진행된다.

#나머지 시간에는 증가분 백업이 진행되는데,

#각각의 증가분 백업은 같은 이름으로 일주일 전의 증가분 백업을 덮어쓴다.

#

#만약 NEWER = ""일 경우 tar는 디렉토리에 있는 모든 파일을 백업하고

#NEWER의 날짜는 매주 일요일에 쓰여지는 파일에서 읽어온다.

#

#매달 풀 백업

if( $DOM = "01" ]; then

NEWER=""

$TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DM.tar $DIRECTORIES

fi

#매주별 풀 백업

if [ $DOW = "Sun" ]; then

NEWER="

NOW=`date +%d-%b`

#풀 백업 날짜를 갱신한다.

echo $NOW > $TIMEDIR/$COMPUTER-full-date

$TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $DIRECTORIES

#증가분 백업을 한다. 지난 주의 데이터를 덮어쓴다.

else

#지난 풀백업의 날짜를 가져온다.

NEWER="--newer `cat $TIMEDIR/$COMPUTER-full-date`"

$TAR$NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $DIRECTORIES

fi

주의) 백업하기 전에 백업을 저장할 디렉토리인(BACKUPDIR)의 풀 백업한 시간을 저장한 파일(TIMEDIR)은 이 백업 스크립트를 실행하기 전에 미리 생성해야 한다. 그렇지 않다면 오류 메시지가 나타날 것이다.

2단계

매 달의 처음(01-month-year)에 이 백업 스크립트를 실행하지 않는다면 증가분 백업을 제대로 실행하기 위해 일요일에 백업되었음을 나타내는 파일이 필요하다. 한 주의 중반 정도에 백업을 시작한다면 TIMEDIR에 시간을 나타내는 파일을 생성할 필요가 있다.

- TIMEDIR 디렉토리에 시간을 나타내는 파일을 생성하려면 아래와 같은 명령을 입력한다.

#date +%d%b > /backups/last-full/myserver-full-date

'/backups/last-full'은 TIMEDIR 변수로서 풀 백업을 한 시간을 저장하는 것이고 'myserver-full-date'은 서버의 이름이다(이를테면 deep등). 그리고 시간을 나타내는 파일은 15-Feb와 같이 한 줄로 되어 있다.

3단계

이 스크립트를 실행이 가능하고 관리자인 root만 읽고 실행할 수 있도록 실행권한을 변경한다.

#chmod 700 /etc/cron.daily/backup.cron

주의) 이 스크립트 파일은 /etc/cron.daily 디렉토리에 있으므로 cron에 의해 매일 오전 1시에 자동으로 실행된다.

4) tar를 이용한 로컬 데이터 미러링하기

형식 : tar cpf - --directory=백업할경로 | (cd /mnt/hdb4; tar xpf -)

# mkdir /data/fedora

# ls -l /home/fedora

# tar cpf - --derectory=/home/fedora | (cd /data/fedora; tar xpf -)

# ls -l /data/fedora

5) tar를 이용한 리눅스 운영체제 백업

운영체제를 백업하기 위해서 /proc, /mnt, /media, tmp 디렉토리는 포함하지 않아도 된다.(--exclude)

# tar cpvfz /backup/Fedora-Core4-bk.tar.gz --exclude=/proc --exclude=/tmp --exclude=/media --exclude=/backup --absolute-name /

 

5. Rsync를 이용한 로컬 데이터 백업 및 서버 동기화

1) 미러링(Mirroring)

리눅스 배포판의 미러링 사이트, 사이트 동기화, 로컬 시스템의 데이터 백업

2) rsync

분산 서버 데이터 동기화, SSH를 이용한 미러링

3) rsync 설치

# rpm -q rsync

# yum list installed rsync 또는 # apt-get install rsync 를 이용하여 설치

4) SSH를 이용한 원격 서버 데이터 미러링

형식 : rsync -avzr --delete -e ssh 원격서버:데이터경로 백업경로

# mkdir /data4/Fedora-Nirror

# rsync -avzr --delete -e ssh 192.168.0.1:/data/fedora /data4/Fedora-Mirror/

>> ssh를 이용한 rsync데이터 동기화를 위해서는 서버에 ssh서버가 작동 하고 있어야 한다.

5) rsync 서버 설정(/etc/rsyncd.conf)

>> 사용자가 직접 /etc/rsyncd.conf파일을 만듬.

# cat > /etc/rsyncd.conf

[Fdora-Core6]

comment=Fdora Core6 Linux

path=/var/ftp/pub/Mirror/Fedora

uid=nobody

gid=nobody

use chroot=yes

read only=yes

host allow=192.168.0.4

max connections=5

timeout=60

6) /etc/xinetd.d/rsync 설정

rsync 서비스는 수퍼 데몬 xinetd에 의해서 동작한다.

/etc/xinetd.d/rsync 파일을 만들어 xinetd 데몬에 의해 읽어 지도록 설정.

# default: off

# description: The rsync server is a good addirion to an ftp server, as it \

# allows crc checksumming etc.

service rsync

{

disable = no

sicket_type = stream

wait = no

user = root

server = /usr/bin/rsync

server_args = --deamon

log_on_failure += USERID

}

~

-- insert --

# /etc/init.d/xinetd restart

>> rsync 데몬은 독립 모드(standalone)으로 동작하질 않기 때문에 ps ax 명령으로느 이 데몬이 동작하고 있는지를 확일할 수 없다.

(tcp873번 포트로 텔넷 접속을 시도하여 연결 확인 /etc/sysconfig/iptables에서 수정)

# telnet localhost 873

7) rsync 사용법

형식: rsync [옵션] rsync서버주소::서비스명 미러경로

>> rsync 서비스 모듈(서비스명과 설명) 알아보기

형식: rsync 서버주소::

# rsync 192.168.0.1::

>> 로컬 시스템 데이터 백업

형식: rsync -avzr --delete 백업소스경로 백업될경로

# mkdir /rsync-src /rsync-mirror

# cd /rsync-src

# touch test1 test2 test3 test4 test5

# rsync -avzr /rsync-src/ /ysync-mirror/

# ls -l /rsync-mirror/

# rm -f test3 test4

# rsync -avzr --delete /rsyc-src/ /rsync-mirror/

# ls -l /rsync-mirror/

>> 원격 서버의 데이터 미러링

형식: rsync-avz 서버주소::모듈명(서비스명) 백업될경로

 

6. CD-RW/DVD-RW를 이용한 하드 디스크 백업

1) CD/DVD 레코딩 도구 설치

# yum list installed mkisofs 또는 # yum install mkisofs

# yum install cdrecord

# yum install dvd+tw-tools

# yum install k3b

# yum install xcdroast

2) 로컬 데이터 백업 ISO 파일 만들기

mkisofs 도구로 ISO이미지 파일 만들기

형식: mkiso -r -J -input-charset UTF-8 -o /디렉토리/이미지파일명.iso /백업데이터경로

# mkisofs -r -J -input-charset UTF-8 -o /tmp/homebackup.iso /home/

3) ISO 이미지 파일 레코딩 하기

>> cdrecord로 iso이미지 파일 CD굽기

형식: cdrecord -v speed=배속 -dao driveropts=burnfree -eject dev-디바이스명 -data 이미지명

# cdrecord -v speed=40 -dao driveropts=burnfree -eject dev=/dev/hdc -data /tmp/homebackup.iso

>> growisofs로 iso이미지 DVD로 굽기

형식: growisofs -Z DVD-R/RW디바이스명 iso파일명 -use-the-force-luke=notray \

-use-the-force-luke=tty -speed=배속

# growisofs -Z /dev.hdc /tmp/homebackup.iso -use-the-force-luke=notray \

-use-the=force-luke=tty -speed=4

>> CD-RW 미디어 포맷

cdrecord -v speed=배속 dev=디바이스명 blank=all or blank=fast

>>DVD-R/+R/RW 미디어 포맷

형식: dvd+rw-format -force 디바이스명

4) 그래픽 레코딩 프로그램으로 레코딩하기

엑스윈도우용 CD레코더 : K3B, X-CD-Roast, 노틸러스, Burn-it, KOnCD, gcombust

# yum install k3b

 

7. 시스템 응급 복구

1) 시스템 장애 일으키기

/etc/fstab 파일의 내용중 한곳을 임으로 틀리게 수정한다.

2) 시스템 응급 복구

설치 cd를 입력하고 GRUB 상태에서 boot: linux rescue 입력후 진행

3) 수동 응급 복구

rescue창에서 skip버튼을 눌러 실행.

>> mount -o remount,rw / 를 이용해 수정하는 방법도 있다.


Trackback 1 Comment 0