Linux 2013. 2. 12. 10:49

[ tar를 이용한 백업 (3) ]



O 백업 시나리오 



여러분이 서버 관리자라고 하자. 그러면 백업은 서버 관리자로서 필수 
사항이다. 제일 처음에 완전백업(full backup)을 받는다. 시스템의 모든 
파일을 백업받는다는 말이다. 다음처럼. 

$ tar -c -v -M -f /dev/st0 / 

완전백업본을 만약에 대비해서 2개 정도 만들어 둬도 좋다. 그리고 
정기적으로 완전백업본을 받아 두는 것도 좋을 것이다. 

완전백업을 받았으면, 월별 백업, 주별 백업, 일별 백업을 받는다. 각각 
지난달 1일 이후, 지난 주 월요일, 어제 이후로 바뀐 파일들을 백업 받는 
것이다. 

월별로 백업 받기 위해서 부분 백업 스크립트를 하나 작성하자. 매달 
1일에 돌리는 것으로 한다. 파일명은 month_back.sh로 하자. 

#!/bin/bash 
NOW=`date +"%d %b %Y"` 
THEN=`cat /.last_month` 
tar -c -v -M -G -f /dev/st0 -V "Backup monthly from \"$THEN\" to

\"$NOW\"" \ 
-N "$THEN" / 
echo $NOW > /.last_month 


주별로 백업 받기 위해서 부분 백업 스크립트를 작성하면 다음과 같다. 
월별 백업과 거의 같다. 매주 월요일날 돌리는 것으로 한다. 파일명은 
week_back.sh로 하자. 

#!/bin/bash 
NOW=`date +"%d %b %Y"` 
THEN=`cat /.last_week` 
tar -c -v -M -G -f /dev/st0 -V "Backup monthly from \"$THEN\" to

\"$NOW\"" \ 
-N "$THEN" / 
echo $NOW > /.last_week 


하루 하루 부분 백업 받기 위해서는 다음과 같다. 파일명은 day_back.sh로 
한다. 

#!/bin/bash 
NOW=`date +"%d %b %Y"` 
THEN=`cat /.last_day` 
tar -c -v -M -G -f /dev/st0 -V "Backup monthly from \"$THEN\" to

\"$NOW\"" \ 
-N "$THEN" / 
echo $NOW > /.last_day 


스크립트는 거의 같다. 중요한 것은 각각의 스크립트를 주기적으로 한달에 
한번, 한 주에 한 번, 하루에 한번 실행시키면 된다. 정기적으로 무언가를 
하기 위해 우리는 cron 유틸리티를 활용하면 된다. 

다음처럼 해서 간단히 cron에 작업을 등록할 수 있다. 

# chown root.root month_back.sh week_back.sh day_back.sh 
# chown u+x month_back.sh week_back.sh day_back.sh 
# cp month_back.sh /etc/cron.monthly 
# cp week_back.sh /etc/cron.weekly 
# cp day_back.sh /etc/cron.daily 


위와 같이 하면 한달에 한번 /etc/cron.monthly의 month_back.sh을 
실행한다. 
week_back.sh과 day_back.sh은 한주에 한번, 하루에 한번 crond에 의해 
실행된다. 

하루에 한번 실행될 때 몇시 몇분에 실행될 것인가를 정해주기 위해 
/etc/crontab을 편집하면 된다. 

[cornerstone@sylee:/etc/cron.daily] cat /etc/crontab 
1 SHELL=/bin/bash 
2 PATH=/sbin:/bin:/usr/sbin:/usr/bin 
3 MAILTO=root 
4 HOME=/ 
5 
6 # run-parts 
7 01 * * * * root run-parts /etc/cron.hourly 
8 00 1 * * * root run-parts /etc/cron.daily 
9 00 3 * * 0 root run-parts /etc/cron.weekly 
10 00 5 1 * * root run-parts /etc/cron.monthly 

위의 파일에서 7행에서 10행까지를 알아보자. 작업을 적어주는 양식은 

<분> <시> <일> <월> <요일> <실행할명령어> 

이다. 7행은 매시간 실행할 작업을 /etc/cron.hourly라는 디렉토리에서 
찾아서 실행하라는 것이다. 매시 1분에 실행된다. 8행은 매일 새벽 1시에 
/etc/cron.daily라는 디렉토리내의 스크립트를 실행하라는 것이다. 9행인 
경우에는 매월, 매일 새벽 3시에 무엇을 할 것 같지만 5번째 필드인 
<요일>필드의 값이 0 이므로 1주일에 한번 일요일에 /etc/cron.weekly 
디렉토리내의 스크립트를 실행하라는 것이며, 시간은 새벽 3시이다. 10행은 
독자의 해석에 맡기겠다. 

참고로 <분>은 0-59, <시>는 0-23, <날짜>는 0-31, <달>은
0-12(0또는 
12는 12월, 1은 1월...), <요일>은 0-7(0과 7은 일요일, 1은 월요일...)로 
나타낸다. 

시간대를 잘 조정하여 사용하면 된다.<끝>

//
프로그래밍/java 2013. 2. 3. 01:40

1. 디버그 모드로 실행하기

프로그램을 디버깅하려면 디버그 모두로 실행해야 한다. 디버그 모드로 프로그램을 실행할 때는 메뉴바의 Run > Debug As를 이용하면 된다. 메뉴바에서 Run > Debug를 선택하면 Debug 다이얼로그가 뜨며,  Java Application에서 실행하려는 설정을 선택하고, Debug버튼을 누르면 프로그램이 디버그 모드로 실행된다.


 

만약, 이클립스 디버그에 관해 별도의 세팅을 하지 않은 경우에 아래와 같이 다이얼로그가 뜨며, 여기서 Java Application으로 프로젝트를 생성한다. 생성 방법은 Java Application노드에서 오른쪽 버튼 클릭 > New를 클릭하자.

 

그러면, 아래와 같은 다이얼로그가 나타난다.

위의 그림과 같이 Entry Point를 설정해 준다. 즉, main메소드가 있는 클래스의 이름을 셋팅해주고 기타 등등의 설정을 한후 Debug버튼을 클릭하면 디버그가 실행이 된다.

 

아래 그림은 Debug 다이얼로그에서 Main탭의 Stop in main 체크박스에 체크한 상태에서 프로그램을 디버그 모드로 실행한 모습이다. Stop in main 체크박스에 체크했기 때문에, main()매서드의 첫 코드가 실행되기 직전에 진행이 멈추었다. 이렇게 멈춘 프로그램을 계속하려면, Debug 뷰의 툴바에서 Resume 버튼을 누른다.

 

2. 브레이크포인트 (Breakpoint) 설정하기

작성한 프로그램이 의도대로 실행되지 않는다면, 의심되는 부분을 집중적으로 살펴봐야 하는데, 바로 이럴 때 사용하는 것이 브레이크포인트이다.

Eclipse는 프로그램을 실행하다가 브레이크포인트를 만나면 프로그램의 실행을 멈추고 에디터에 브레이크포인트가 지정된 행을 하이라이트한다. 이상태에서 프로그램을 한 단계씩 실행시키며 프로그램의 흐름이 원하는 대로 진행되는지, 각 변수나 수식의 값이 제대로 설정되고 있는지를 확인 할 수 있다. 브레이크포인트는 디버그 모드로 실행될 때만 의미가 있다.

 

브레이크포인트를 사용해보자. 에디터에서 브레이크포인트를 지정하고 싶은 위치에 에디터의 왼쪽에 있는 마커(marker bar)를 더블클릭하거나 마커바에서 오른쪽 버튼 클릭 > Toggle Breakpoint를 선택해도 된다. 브레이크포인트가 추가되면 마커바에 파란색 동그라미로 표시된다. 삭제는 파란색 동그라미를 더블클릭하면 제거된다.

 

브레이크포인트를 설정하고 디버그를 실행하면 아래와 같은 그림이 나온다.

설정된 브레이크포인트들은 [Breakpoints View]에 전부 리스트 되며 설정된 브레이크포인트는 Breakpoints View에서 해당 항목을 check, uncheck 함에 따라 활성화 또는 비활성화된다

 

 * 브레이크포인트 활성화/비활성화

상황에 따라 브레이크포인트를 활성화하거나 비활성화할 수 있다. 활성화 상태에서 브레이크포인트의 팝업 메뉴중 Disable Breakpoint를 선택하면 비활성화 된다. 비활성화 브레이크포인트는 흰색 동그라미로 표시되고, 이 상태에서는 프로그램의 실행을 멈추지 않는다. 이는 특정 브레이크포인에서 실행을 멈추지 않고 싶지 않지만, 그렇다고 삭제하고 싶지 않은 경우에 이용한다.

비활성화를 활성화 하려면 팝업 메뉴에서 Enable Breakpoint를 선택하면 된다. 

 

루프 안에 설정된 브레이크포인트의 반복 횟수가 많을 경우(오류로 인한 무한 로프) 특정 회수에 대해서만 프로그램이 멈추게 하기 위해서는 브레이크포인트가 설정된 마커바에서 오른쪽 버튼의 팝업 메뉴의 [Breakpoint properties]를 눌러 나타나는 팝업 창의 [Hit Count]를 체크하고 방문 횟수를 입력한다.

 

또는 Hit Count를 설정하려는 브레이크포인틀 선택한 다음 컨텍스트 메뉴에서 Hit Count를 선택하려는 브레이크포인트를 선택한 다음 컨텍스트 메뉴에서 Hit Count를 선택하면 아래와 같은 그림이 뜨며, 여기에 적절한 숫자를 입력하면 된다.

 

브레이크포인트에 Hit Count가 설정되면, Breakpoint 뷰에서 해당 브레이크포인트 옆에 아래 그림과 같이 Hit Count 숫자가 표시된다.

 

3. 디버그 진행하기

설정한 환경 (breakpoint, hit count, stop in main...) 에 따라 프로그램의 진행을 수동으로 관리할 수 있다. 여기에서는 [Debug View]의 툴 바에 있는 메뉴들을 중심으로 Debug 진행 관리 방법을 살펴보자.

 

(1) Resume (F8): 멈췄던 쓰레드 다시 진행. 다음 브레이크포인트까지 계속 진행

(2) Suspend: 쓰레드를 멈춤

(3) Terminate: 프로그램 종료

(4) Step Into (F5): 스텝 단위로 프로그램 실행, 메서드가 호출될 경우 그 메서드 안으로 이동

(5) Step Over (F6): 메서드가 호출되더라도 메서드 안으로 이동하지 않고 현재 코드 진행

(6) Step Return (F7): 현재 메서드로부터 리턴. 메서드 호출부로 위치 이동

(7) Drop to Frame: 특정 메서드를 실행하다 그 메서드의 처음부터 다시 실행

(8) Step Filtering: 디버깅 도중 디버깅 대상이 되지 않는 메서드 안으로는 들어가지 않게 설정하는 곳. [Window > Preferences > Java > Debug > Step Filtering]에서 설정

 

아래 그림과 같이 Debugging을 하며 관련된 변수들을 관찰할 수 있는 창이 있는데 이 창이[Variables View]이다. 현재 가용한 변수들이 나열되고 현재 진행 시점에 할당되어 있는 값을 볼 수 있다.

 

[Display View] 현재 스택 프레임의 컨텍스트에서 실행할 수 있는 모든 종류의 수식을 입력 및 실행이 가능하다. 원본 코드의 수정 없이 다양한 형태로 메서드나 변수 값들을 또는 그 조합 결과를 확인해 볼 수 있다. [Window > Show View > Display] 로 Display View를 활성화 시킨다. 관찰하고자 하는 수식이나 메서드들을 기술해 놓는다. Debugging을 하면서 현재 Display View에 기술된 수식 또는 메서드의 상태 값을 알기 위해서는 해당 항목을 선택한 수 뷰 툴바의 [Display Result of Evaluating Selected Test] 또는 [Ctrl + Shift + D]를 누르면 값을 보여준다. 잘못된 입력이나 값을 알 수 없는 상황일 경우 에러를 보여준다.

 

[Inspect]는 Display View에서는 결과를 문자열로만 파악할 수 있다. 때문에 객체의 상태를 알기 위해서는 다른 방법을 사용해야 하며 그 중 하나가 Inspect 기능을 이용하는 것이다. Inspect 는 관찰 대상 수식을 선택하고 컨텍스트 메뉴에서 Inspect를 선택 (Ctrl + Shift + I)하는 것이다. 하지만 Inspect는 일시적인 관찰 방법이며 자세한 관찰을 하고 싶을 경우 [Ctrl + Shift + I]를 다시 눌러 Expression View 로 대상을 옮겨 관찰한다.

 

[Watch] 특정 수식을 지속적으로 관찰하고 싶을 경우 inspect 기능이나 Display View를 이용하는 것은 번거로울 수 있다. 이런 때 Watch 기능이 아주 유용할 수 있다. Watch 기능은 Expressions View안에서 작동한다. 위 그림에서 작은 '(X+Y)' 아이콘이 붙은 항목들이 Watch 기능이 적용되고 있는 것들이다. Watch 항목은 Expressions View 내에서 [컨텍스트 메뉴 > Add Watch Expression]을 눌러 나타나는 [Add Watch Expression] 위한 팝업 창에 여러 가지 수식을 입력하여 지속 관찰할 수 있다.

//
프로그래밍/아두이노 2013. 1. 31. 20:33



//
Linux 2013. 1. 29. 11:32

우분투 쪽에는 사용자가 많아서 그런지 백업 방법도 많습니다. 리눅스 자체의 백업도 있고요. 그중에서도 리눅스에서 여러모로 유명한 백업방법인 tar 압축을 이용한 백업을 사용해보겠습니다.

Tar 명령어와 리눅스 백업 ?

시스템 백업도 요즘은 파일 백업과 이미지 백업이 있습니다. 이미지 백업은 파티션 또는 윈도우를 통째로 가상 이미지로 만들어 백업하는 것이고, 파일 백업은 말 그대로 파일로 백업하는 것입니다. 대부분 압축되죠. 왠지 모르게 이미지 백업이 안정성 있어 보이는데, tar는 파일백업이지만 시스템 통째로 백업하니 파일+이미지라고도 할 수 있을지도 모르겠습니다. 요즘은 우분투 프로그램 등으로 나온 게 많은데, 저는 기본 프로그램을 이용하여 백업하는 것을 선호합니다. 복구하기 위해 굳이 프로그램을 깔 일도 적은 경우가 많으니까요. 그런 면에서 tar는 적당합니다.

리눅스에서 tar 명령어는, Tape ARchive의 약자로서 이름에서 보듯이 예전에 자기 테이프(!)에 백업하기 위해 사용되었던 백업 명령어입니다. 무려 자기 테이프 시대에 쓰던 건데, 지금 써봐도 그다지 나쁘진 않습니다. 그래서 많이들 쓰죠. 안드로이드에서 CWM을 통해 백업하는 것도 파일들은 tar로 백업하는 것 같습니다.

tar 백업은 파일을 단위로 하여 백업합니다. 그래서인지 하드 파티션이 날아가서 다시 잡거나, 순서를 바꾸거나, 용량을 늘리거나, 스왑 파티션을 바꾸든가 해도 전혀 문제가 되지 않게, 원하는 파티션에 tar 백업해놓은 것을 복구해도 되더군요. 물론 grub 부트 로더를 재설치 해줘야 합니다. 우분투의 경우, 윈도우와 달리 시스템을 바꿔도 운영체제가 맛가지 않는 걸로 아는데, 여러모로 유용한 편이죠.

자세한 시간이 압축률은 잘 모르겠지만, 현 윈도우 기본 백업보다는 낫습니다. 윈도우는 아예 VHD 이미지를 떠서 백업하는 방식, 압축을 전혀 하지 않는 것이고, tar 명령어는 압축을 합니다. 50% 이상은 압축되더라고요. 명령어에 대한 자세한 정보는 터미널에 man tar를 입력해보세요.

tar 명령어로 우분투(리눅스) 백업

백업하는 건 아무것으로나 어쨌든 터미널 명령어를 입력할 수 있는 환경만 갖춰지면 됩니다. 우분투에서 터미널(Terminal)을 실행하시거나, TUI(콘솔. Ctrl + Alt + F1~F6)모드로 들어가던지, 우분투 리커버리에서 root로 들어가던지 하는 방법입니다. 라이브 시디로 부팅해서 백업하려면 chroot로 백업할 파티션을 설정해주세요. 참고로 우분투 기준입니다.

그 다음, 아래 명령어를 입력합니다. 바로 아래 - 부터는 설명이니 입력하지 마세요.

su -
- 루트 계정으로 변경하여 시스템 파일도 건드릴 수 있도록 합니다. 비밀번호를 입력하라는데 루트 계정을 만들지 않았다면, sudo passwd root 명령어를 입력하여 만들어줍니다.

tar cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/dev --exclude=/sys --exclude=/backup.tgz /
-아래에 설명합니다. 빨간색은 직접 입력해도 되는 부분입니다.

tar cvpzf는 tar를 c: 새로운 저장 파일을 생성, v : 진행 목록을 보여줌, p : 파일 권한 정보를 기억, z :gzip으로 압축(bzip으로도 가능), f : 파일이름설정 이라는 옵션을 주고 실행하는 것입니다. 개인이 조절 가능합니다.

backup.tgz에서 .tgz는 그대로 두고, 파일 이름이나 저장위치를 조절할 수 있습니다. /는 최상위, 그다음 backup.tgz가 있으니 즉 시스템 루트(/)에서 .tgz라는 확장자를 가진 backup이라는 tgz 파일이 생성됩니다. 경로에 공백이 있으면 안 되므로, 공백이 있다면 양옆을 ''로 묶어줍니다./를 잊지 마세요. backup을 다른 이름으로 바꿔줄 수도 있고, /TEST/test.tgz라고 입력하면 최상위 루트에서, TEST라는 폴더에 test.tgz 파일이 생성되겠지요. 뒤에 나오는 backup.tgz도 앞과 똑같이 적어주셔야 합니다. 이유는 아래에 설명합니다.

--exclude=/~~ 등이 여러 개 있는 것은, 해당 폴더를 제외한단 뜻입니다. 임의로 제외하고 싶으신 게 있으시다면, 명령어 뒤에 또 한 칸 띄고 --exclude=해당 파일 또는 폴더 경로 로 입력해주시면 되시겠습니다. /proc은 최상위에서 proc 폴더로, 가상 폴더라고 해서 제외하고, /lost+found도 오류 파일 정보 저장 위치라고 하여 제외, /media는 우분투에서 외장하드등의 기기가 마운트(?)되는 곳, 제외, /mnt도 마운트 하는 곳, /sys는 가상, /dev는 잘 모르겠지만 마운트 되는 곳 같기도 하고… 드라이버가 있다고도 하고… 다른 백업 예제를 보면 대부분 포함하네요. 마지막에 backup.tgz를 또 써주는 것은 백업 파일 자기 자신을 백업해야 백업한 파일이 또 백업 되지 않기 때문이죠.

맨 뒤에 /는, /에서부터 백업한단 뜻입니다. 말그대로 최상위, 전부 백업한다는 겁니다. 하지만 /이하의 폴더들을 백업할 때에는, 이 긴 명령어를 입력하기 전에 해당 백업할 폴더가 있는 경로로 들어가줘야 합니다. cd /경로 를 입력해서 해야 그 전의 폴더들이 백업되지 않습니다. (그리고, 백업할 때 폴더, 파일에 공백이 있다면 경로 양 옆을 ''로 묶습니다.)


exclude 순서가 조금 바뀌었지만, 그다지 상관은 없습니다.


빠른 속도로 백업 되고 있습니다. 중간에 백업하기 싫으신 게 있으시다면 중단하고 명령어에 exclude를 추가해주시면 됩니다.

다 끝나고 나서 에러가 났다고 뜨기도 하는데요, 그냥 무시해주시면 됩니다. 잘만 됩니다.


/에 이렇게 tgz 파일이 생겼습니다.

위의 저 파일은 권한상 건드릴 수 없습니다. 루트 권한으로 다뤄주시면 되는데요, ALT + F2 명령에서 gksu nautilus를 입력해주시거나, 터미널에서 su -나 sudo 등으로 루트권한을 얻고 nautilus를 입력하여 탐색기를 실행하시거나 하시면 됩니다. 그다음 복사 등을 하여서 백업해둬야겠죠.

tar 명령어로 우분투(리눅스) 복구

복구 환경은 생각보다 폭넓습니다. 소개한 부분에 특징을 몇 가지 설명해 놓았습니다.

이것도 명령어를 입력할 수 있는 환경이면 되지만, 아마도 X-window 상에서는 안될 것 같습니다. 따라서 TUI(콘솔. Ctrl + Alt + F1~F6)모드로 들어가던지, 우분투 리커버리에서 root로 들어가던지 하는 방법을 사용하셔야 할 것 같습니다.

su -
- 루트 계정으로 변경하여 시스템 파일도 건드릴 수 있도록 합니다. 비밀번호를 입력하라는데 루트 계정을 만들지 않았다면, sudo passwd root 명령어를 입력하여 만들어줍니다.

cd /
- 압축을 풀 폴더에 진입합니다. 보통 /으로 백업했으면 / 내부 파일이 전체 백업 되었으므로, 풀 때도 /에 들어가야 전체 파일이 풀어지겠죠.

tar xvpzf /backup.tgz
- 아래에 설명합니다. 빨간색은 직접입력

mkdir /proc
mkdir lost+found
mkdir /media
mkdir /mnt
mkdir /dev
mkdir /sys
- 마찬가지로, 아래에 설명합니다.

tar xvpzf는 tar를 x: tar로 압축한 파일을 품, v : 진행 목록을 보여줌, p : 파일 권한 정보를 기억, z :gzip으로 해제 (bzip으로 압축했다면 bzip으로), f : 파일이름이라는 옵션을 주고 실행하는 것입니다. 개인이 조절 가능합니다.

/backup.tgz 부분은 풀 백업 파일의 경로나 파일을 입력해 주는 것입니다. 백업한 파일이 그냥 시스템 최상위에 backup.tgz라고 있으면 위처럼 /backup.tgz라고 입력하시면 됩니다. tgz로 백업했으니 확장자는 .tgz, 외장하드 등에 있다면, 그 파일 경로를 입력해줘야겠죠. /외장하드 마운트 경로/파일 있는 폴더들/파일이름.tgz의 식으로요. 백업할 때와 같이 공백이 있다면, 얖옆에 ''로 묶어줍니다.

참고로, backup.tgz -C /로 하면 -C / 덕분에 경로를 입력하지 않아도 backup.tgz가 압축해제 된다고 하던데, 저는 안되었습니다.

mkdir ~는 백업할 때, --exclude=/폴더 로 제외한 폴더들이 있을 건데요, 이걸 다시 생성해줘야 정상적으로 작동합니다. 안하면 마운트가 안된다든지.. 하는 일이 일어나기도 합니다. mkdir 폴더를 생성, /proc은 말 그대로 /에 proc 폴더를 생성합니다.


입력합니다. 여기서는 X-window 터미널로 예를 들어봤습니다.


빠른 속도로 복구됩니다.

//
Linux 2013. 1. 29. 09:44

서버는 서비스 되고 있다는 가정하에 


mount -t nfs 서버ip:/서버에서 마운트되어 사용되어질 디렉토리 /마운트시킬 디렉토리(마운트포인터)


'Linux' 카테고리의 다른 글

tar를 이용한 백업  (0) 2013.02.12
시스템 백업과 복구  (0) 2013.01.29
잘정리된 iptables 사용법  (0) 2013.01.28
Iptables 포트제한  (0) 2012.12.08
리눅스 프로세스 상태 보기(ps명령)  (0) 2012.11.19
//
Linux 2013. 1. 28. 13:49

잘정리된 iptables 사용법


[출처 : http://seeaster.tistory.com/18 ]


오늘은 Iptables 에 대해 간단히 포스팅 하겠습니다. 그전에 몇가지 팁을 적어볼게요 ^^

옵션 보고 익히는 것보다 아래에 적은 팁이 실무에선 더 중요할 것 같네요.!!

 

Tip 7가지

1.     Iptables 하면서 팁은 위에서부터 아래로 적용 됨

2.     명렁어 치기전엔 3번 생각하자

-쳐놓고 서비스 장애 등 가용성에 문제가 온다면 GG입니다

3.     신뢰 IP Any Any open 해놓고 작업하기

-ssh 등 원격 접속 해 있을 때 실수로 차단되면 콘솔로 붙어서 작업해야함.

-inbound 와 outbound 해야함(ssh 같은경우 inbound open만 해놓을경우 통신 불가)

4.     생각나는데로 룰 만드는 것이 아닌 먼저 정책 분석, 트래픽 분석하고 다 정리한다음 테스트 장비에 테스트 후 적용할 것.

-초기 셋팅이 아닌 서비스 중에 변경할 땐 더욱 신중해야함.

5.     #]man iptables 를 이용할 것

-man 명령어로 명령어 옵션 보는 습관을 들이는 것이 좋습니다. 모든 명령어들어 옵션을 외울 수는 없지요. 물론 자주 쓰는 것은 외워두는 것이 좋습니다.

6.     일괄 적업하지 말 것.

-일괄작업 하면 빠르지만 하나하나씩 넣으면서 확인하는 습관을 길러야 합니다. 모든 보안 시스템은 일괄처리 기능이 제거되어있는데요 기계는 실수를 안하지만 사람은 항상 실수 하기 때문 입니다.

7.     Vi 편집기로 /etc/sysconfig/iptables 편집하는 것이 더 편하다.

-저장하기전에 확인하고 확인할것!!또한 vi 편집기로 작업후 서비스 재시작 해줄 것!(service iptables restart)

*처음 룰 생성해서 저장 하기 전까지는 /etc/sysconfig/iptables 파일이 없습니다.

 

 

 

# iptables 명령어(옵션) 간단한 설명

~]#vi /etc/sysconfig/iptables

~]#iptables -L :리스트보기

~]#iptables -P INPUT DROP : -P 기본정책, INPUT의 기본정책을 DROP으로 하겠다.

 

현재 FORWARD 기본정책은 ACCEPT

 

~]#iptables -A : -A 는 추가할떄

~]#iptables -I INPUT 3 : -I 는 원하는 라인에 추가, 3번쨰 라인에 추가한다는말임.

~]#iptables -A INPUT -p tcp : -p 는 프로토콜 정하기

~]#iptables -A INPUT -p tcp -s : -s 는 src ip

~]#iptables -A INPUT -p tcp -s 192.168.81.63 --dport 80: --dport 는 dst port

~]#iptables -A INPUT -p tcp -d 192.168.81.62: -d 는 dst ip

~]#iptabels -A INPUT -p tcp --sport 80: --sport 는 src port

~]#iptables -A INPUT -p tcp -dport 80 -j ACCEPT : -j 는 대응 방법(ACCEPT, DROP, REJECT 등),

*REJECT는 DOS 공격시 부하가 걸리므로 권장하지 않음

~]#iptables -A INPUT –m : -m은 man 페이지를 참조 하길..옵션이 너무 많아요..

 

#서비스 시작/정지/재시작/저장

*iptables 는 save 명령어를 쳐주지 않으면 시스템 재부팅 후 정책이 초기화 됩니다.

~]#service iptables start

~]#service iptables stop

~]#service iptables restart

~]#service iptables save

 

예제 참조는

http://team.boanin.com/

 

0. 기본정책을 ACCEPT로 설정

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

 

1. 현재 자신의 방화벽 규칙을 볼 수 있는 명령

iptables -L

iptables --list

 

2. 21.23.25.80 포트를 차단하는 정책(각각 하나씩 규칙을 만들것)

iptables -A INPUT -p tcp --dport 21 -j DROP

iptables -A INPUT -p tcp --dport 23 -j DROP

iptables -A INPUT -p tcp --dport 25 -j DROP

iptables -A INPUT -p tcp --dport 80 -j DROP

 

iptables -A INPUT -p tcp -m multiport --destination-port 21,23,25,80 -j DROP

 

3.첫번쨰 정책을 삭제

iptabels -D INPUT 1

 

4. 세번째 정책의 출발지 IP를 192.168.1.0/24로 수정

iptables -R INPUT 3 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP

 

5. 출발지 IP가 A클래스 사설 IP 일 경우 차단하는 정책

iptables -A INPUT -s 10.0.0.0./8 -j DROP

 

6. 출발지 IP 192.168.10.1 부터 192.168.10.100, 그리고 192.168.150.0/24이고 목적지IP 는 192.168.10.170이고 목적지 포트는 3306일 경우 차단하는 정책

 

iptables -A INPUT -p tcp -s 192.168.150.0/24 -d 192.168.10.170 --dport 3306 -j DROP

iptables -A INPUT -p tcp -m iprange --src-range 192.168.10.1-192.168.10.100 -d 192.168.10.170 --dport 3306 -j DROP

 

7. tcp 패킷이 초당 10개가 올경우 차단하는 정책(limit match 이용)

iptables -A INPUT -p tcp -m limit --limit 10/s -j DROP

 

8. 하나의 세션에서 10개의 패킷이 매치된 후 tcp 패킷이 분당 100개가 올 경우 차단하는 정책

iptables -A INPUT -p tcp -m limit --limit 100/m --limit-burst 10 -j DROP

 

9. 옆사람의 윈도우와 리눅스에서 SSH 접속을 차단하도록 설정, 윈도우에서 연결은DROP, 리눅스는 REJECT

iptables -A INPUT -p tcp -s 172.17.24.140 --dport 22 -j DROP

iptables -A INPUT -p tcp -s 172.17.24.170 --dport 22 -j REJECT --reject-with tcp-reset

 

10. ICMP 라는 체인을 생성

 -icmp 패킷이 들어올 경우 ICM 체인으로 전달

 -icmp 체인에 ping에 대한 응답하지 않는 정책 추가

 

iptables -N ICMP

iptables -A INPUT -p icmp -j ICMP

iptables -A ICMP -p icmp --icmp-type 8 -j DROP

 

11. 기본정책을 DROP으로 설정

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

 본인의 윈도우에서 ssh연결이 되도록 설정하고 이미 연결된 상태나 연광성이 있는 연결은 별도의 정책 대신 state 매치를 이용하여 계쏙 사용할수 있도록 설정

iptables -I INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

iptables -A INPUT -p tcp -s 172.17.24.130 --dport 22 -j ACCEPT

 

12. TCP FLAG 중 전체를 보고 그 중 SYN 과 FIN이 있을 경우 차단하는 정책

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

 

13. TCP FLAG 중 전체를 보고 그 중 PSH 과 FIN이 있을 경우 차단하는 정책

iptables -A INPUT -p tcp --tcp-flags ALL FIN,FIN -j DROP


//
데이터베이스 2013. 1. 20. 22:15

//==================== 리눅스에서 sql파일 실행 =======================

] # mysql -h localhost -u root -D mChart -p < create_table.sql

//========================== DB 한글 깨짐 방지 =========================================

db접속후 케릭터 셋을 지정해준다.

<php 예>

$db = new mysqli('localhost','root','1234','myDB');
$db->query('set names euckr');

//=========================== 계정 비밀번호 변경 ==========================================

update mysql.user set password = password('암호') where user = '계정@localhost';
flush privileges;

//============================ 컬럼위치 변경 ==============================================

alter table 테이블명 modify 컬럼명1 타입 after 컬럼명2 // 컬럼1을 컬럼2뒤로 옮김;
예)
alter table myTable modify name varchar(10) aflter id;

//============================ 테이블 생성시 코멘트 달기 ==================================

create table customer_id_list

(

cust_id char(7) not null primary key comment '고객사ID',

cust_name varchar(30) not null comment '고객사명',

reg_date datetime not null comment '등록일'

)type=innodb,character set = utf8, comment = '고객사ID리스트';

//==================== 기본 명령 ====================================

mysql> create database dbName; // db 생성

예) create databases dbName default character set utf8 ;

mysql> drop database dbName; //db 삭제

mysql> create table tableNae(columns); //table 생성

예) create table books ( isbn char(13) not null primary key, //null값을 가질수 없는 기본키

author char(50),

title char(100),

price float(4,2) );

예) create table books ( isbn char(13) not null , //기본키가 여러개일때

author char(50) not null ,

title char(100),

price float(4,2),

primary key(isbn, author ) );

price float(4,2) );

예) create table books ( isbn char(13) not null , //테이블 collation 변경

author char(50) not null ,

title char(100) character set utf8 collate utf8_general_ci not null,

price float(4,2),

primary key(isbn, author ) );

예) create view cust_user_view as

select user.user_id, cust.cust_id, cust.cust_name,user.user_name

from cust,user

where cust.cust_id = user.cust_id ;

mysql> drop table tableName; //table 삭제

mysql> show databases [ like database ]; // 모든 사용할 수 있는 db 보여줌

mysql> show [ open ] tables [ from database ][ like table ]; // 선택된 DB의 모든 table 보여줌

mysql> show grants for user ; // user가 가진 권한을 설정하기위한 grant 문을 보여준다.

mysql> show create table db.table ; //테이블 생성 구조 보기

mysql> describe tableName [column]; //table의 구조를 보여줌

mysql> use dbName; // DB 사용 선택

//====== 사용자 및 권한 부여==================================================================

※ 모든 호스트 'id'@'%'

mysql> grant all //모든권한

-> on * // 모든 DB

-> to fred identified by 'mnb123' // 비밀번호 mnb123으로 접속하는 fred라는 사용자에게

-> with grant option; // 다른사용자에게 권한을 부여할 수도 있게

mysql> grant usage //권한없는

-> on books.* // books DB및 table에 대해서

-> to sally identified by 'mnb123' ; // 비밀번호 'magic123'으로 접속하는 sally라는 사용자에게

mysql> grant select, insert, update, delete, index, alter, create, drop // 해당 명령어 권한 부여

-> on books.* // books DB및 table에 대해서

-> to sally ; // sally라는 사용자에게

mysql> grant select, insert, update, delete // 해당 명령어 권한 부여

-> on books.* // books DB및 table에 대해서

->to sally@localhost identified by 'sally123' ; // sally@localhost 와 비밀번호로 접속하는 사용자에게

mysql> revoke alter, create, drop //해단 권한을 취소

-> on books.* // books DB및 table에 대해서

-> from sally; // sally라는 사용자의

mysql> revoke all // 모든 권한을 뺏어 해당 DB에 접근 하지 못하도록 한다.

-> on books.*

-> from sally;

mysql> use mysql; //계정 삭제

mysql> drop user sally@localhost ;

=======================================================================================================

================== Select 문 ==================

select [ options ] items [ into file_details ]

from tables

[ where conditions ]

[ group by group_type ]

[ having where_definition ]

[ order by order_type ]

[ limit limit_criteria ]

[ procedure proc_name(arguments) ]

[ lock_options ]

;

예) custtomers 테이블에서 city 값이 seoul인 레코드의 name,city 값을 불러온다 5개만

select name, city

from customers

where city='seoul'

limit 5 ;

예) 현재 날자와의 차이 구하기 (D-Day)

select end_date,dateDIFF(end_date, now() ) as dday

from date_count

================== Insert 문 ==================

insert [ into ] tableName [(column1,column2,column3,...)] //table의 필드에 해당 값을 저장

values (value1, value2, value3,...) ;

예) insert customer_user

set customer = 'gmate',

user_name = 'gmate',

user_password = sha1('gmate');

예) insert customer_user values

( 'gmate', 'gmate', sha1('gmate')),

('ccr','user', sha1('gmate')) ;

예) insert 중 중복발생시 업데이트 하기

insert into user (id, name,age) values

('$id', '$name', 'age')

ON DUPLICATE KEY UPDATE

id='$id',

name ='$name',

age='$age';

================== delete 문 ==================

delete [ low_priority ] [ quick ] [ ignore ] from tableName //table의 레코드 삭제

[ where conditions ]

[ order by order_cols ]

[ limit number ]

예) delete from customer_user

where customer = 'gmate' ;

================== update 문 ==================

update [ low_priority ] [ ignore ] tableName //table의 레코드 수정

set column1=expression1, column2=expression2,...

[ where conditions ]

[ order by order_criteria ]

[ limit number ]

예) update customer

set customer_name='성재욱'

where customer_id ='aaa';

================== alter table문 ==================

alter table tableName add fieldName varchar(10) not null ;

예) alter table myTable add name varchar(30) not null;

//-----필드 삭제

alter table tableName drop fieldName ;l

//-----엔진타입 변경

alter table tableName ENGINE = innoDB ;

alter table tableName ENGINE = MYISAM ;

============= 외래키(foreign key) 생성 ====================================================

# 테이블 타입이 innoDB 이어야 적용된다(부모자식 테이블 모두).

create table board_10001 (

postid int(10) unsigned not null auto_increment primary key,

sub_code char(4) not null ,

title varchar(40) not null,

contents text not null,

date timestamp ,

writer char(10) not null ,

foreign key(sub_code) references board_sub_list(sub_code),

foreign key(writer) references user(user_id)

)type=innodb , character set = utf8;

============= 테이블에 외래키 추가수정 ===========================================

alter table board_10002

add constraint foreign key(sub_code) references board_sub_list(sub_code);

=================== 외래키 옵션 ===========================================================

CASCADE
참조되는 측 관계 변수의 행이 삭제 되었을 경우에는 참조하는 측 관계 병수와 대응되는 모든 행들이 삭제 됩니다 . 참조되는 측 관계 변수의 행이 갱신 되었을 경우에는 참조하는 측 관계 변수의 외래 키 값은 같은 값으로 갱신됩니다.
예)

foreign key(id) references customer_info(id) ON DELETE CASCADE ON UPDATE CASCADE

RESTRICT
참조하는 측 관계 변수의 행이 남아 있는 경우에는 참조되는 측의행을 갱신하거나 삭제 할 수 없습니다. 이 경우에는 데이터 변경이 이루어 지지 않습니다.

NO ACTION
참조되는 측 관계변수에 대해 UPDATE, DELETE 가 실행됩니다. DBMS에서 SQL문장의 실행 종료시에 참조 정합성을 만족하는지 검사합니다. RESTRICT와 차이점은 트리거 또는 SQL문장의 시멘틱스 자체가 외래키의 제약을 채울것이라는 데에 있습니다. 이때는 SQL 문장 실행이 성공합니다. 외래 키의 제약이 만족되지 않은 경우에는 SQL문장이 실패한다.

SET NULL
참조되는 측 관계 변수에 대해 행이 갱신 또는 삭제 되었을 경우 , 참조하는 측 관계 변수의 행에 대한 외래키 값은 NULL로 설정이 됩니다. 이 옵션은 참조하는 측 관계 변수의 외래 키에 NULL 을 설정할 수 있는 경우에만 가능합니다. NULL 의 시멘틱스에 의해 참조하는 측 관계 변수에 대해 NULL이 있는 행은 , 참조 되는 측 관계 변수의 행을 필요로 하지 않습니다.

SET DEFAULT
SET NULL 과 비슷하지만 참조되는 측 관계 변수의 행이 갱신 또는 삭제 되었을 경우 참조하는 측 관계 변수의 외래키 값은 속성의 기본값으로 설정됩니다.

위와 같은 5개의 참조 조작이 SQL:2003에 규정되어 있습니다.

MySQL 에서는 InnoDB 에서 지원을 합니다. 지원하는 참조 조작은 RESTRICT, CASCADE, SET NULL, NO ACTION 을 지원합니다

====================== 뷰(view) 테이블 생성 ============================================

create view cust_user_view as

select user.user_id, customer.customer_id, customer.customer_name,user.user_name

from customer,user

where customer.customer_id = user.customer_id ;

'데이터베이스' 카테고리의 다른 글

mysql 패스워드 분실시에  (0) 2014.04.04
오라클 scott 유저 활성화  (0) 2013.11.04
DB index 사용하기  (0) 2013.10.15
mysql 사용자 권한 넣기  (0) 2013.01.02
mysql 컬럼 수정 삭제 추가  (0) 2012.12.09
//
데이터베이스 2013. 1. 2. 01:51

grant all privileges on [데이터베이스명].* to '[사용자계정]'@'[호스트ip]' identified by '[계정패스워드]';

'데이터베이스' 카테고리의 다른 글

mysql 패스워드 분실시에  (0) 2014.04.04
오라클 scott 유저 활성화  (0) 2013.11.04
DB index 사용하기  (0) 2013.10.15
mysql 기본사용  (0) 2013.01.20
mysql 컬럼 수정 삭제 추가  (0) 2012.12.09
//
데이터베이스 2012. 12. 9. 13:54

1. 컬럼명 변경&타입 변경

alter table 테이블명 change 기존컬럼명 변경할컬럼명 컬럼타입;

ex)   alter table tb_test change guide guide_img varchar(500);

 

2. 컬럼 추가

alter table 테이블명 add 추가할컬럼명 컬럼타입 칼럼위치 디폴;  

ex) alter table co_test add tpaper_seq int(11) after seq defalut '0';

 

3. 컬럼 삭제

alter table 테이블명 drop 삭제할컬럼명;

ex) alter table co_test drop grade;

'데이터베이스' 카테고리의 다른 글

mysql 패스워드 분실시에  (0) 2014.04.04
오라클 scott 유저 활성화  (0) 2013.11.04
DB index 사용하기  (0) 2013.10.15
mysql 기본사용  (0) 2013.01.20
mysql 사용자 권한 넣기  (0) 2013.01.02
//
Linux 2012. 12. 8. 22:55

리눅스 port를 열기 위해서는  iptables를 통해서, 포트를 열고 막고를  할 수 있습니다.

아래의 예제 부분만 따라 하시면 해당 port에 대해 모두 열 수 있습니다.
Inbound (외부에서 서버로 들어오는) , Outbound( 서버에서 외부로 나가는 )  모두 port를 열기 위해서는 아래의 iptables로 INPUT, OUPUT 을 해주면 모두 열립니다.
권한은 root에서 해주시기 바랍니다.

iptables -I INPUT 1 -p tcp --dport 5900 -j ACCEPT 
iptables -I OUTPUT 1 -p tcp --dport 5900 -j ACCEPT 


예를 들면 ) FTP port 21번을 열고 싶다.
#iptables -I INPUT 1 -p tcp --dport 21 -j ACCEPT 
#iptables -I OUTPUT 1 -p tcp --dport 21 -j ACCEPT 

#service iptables save
#/etc/init.d/iptables restart


*확인 /etc/sysconfig/iptables (직접 추가해도 가능.)


*iptables 방화벽 켜고 /끄기

Task: Disable / Turn off Linux Firewall (Red hat/CentOS/Fedora Core)

Type the following two commands (you must login as the root user):
# /etc/init.d/iptables save# /etc/init.d/iptables start
# /etc/init.d/iptables stop

//