어쩌라구..?? ㅡㅡa..

Posted
Filed under Linux/system
설치하면서 별도로 다운로드 받아 사용했던 패키지들을 첨부하였다.
libstdc++은 firefox실행시에 필요하고, kde는 메뉴 한글화 하는데 필요하다.

root id사용법 :
우분투에서는 sudo 명령을 사용하여 root 권한으로 프로그램을 실행하는데
번거롭기도 하고 root 권한이 필요한 경우가 있다. 그러나 root의 기본 패스워드는 모른다.
그럴때는 sudo passwd root 를 실행하여 패스워드를 설정한다.
그러나 root 패스워드를 바꾸면 시스템 설정 툴이 모두 동작 안하게 된다.
잠시 루트쉘이 필요하면 sudo -s -H 명령으로 루트쉘을 쓸수 있다.

보안상 좋지는 않지만, /etc/sudoers 파일을 수정하면 sudo 명령을 사용할때
패스워드 없이 실행하게도 할 수 있다.
root ALL=(ALL)ALL
이 라인을
root ALL=(ALL) NOPASSWD: ALL
이렇게 바꾼다.
수장하고나면 sudo 를 이용할때 패스워드 없이 실행된다.

sudoers 파일을 수정할때는 반드시 visudo를 이용하여 수정한다.
만약 파일이 잘못되면 그때부터 sudo명령을 전혀 사용할수 없게 된다.
따라서 sudoers 파일을 다시 수정하는것도 불가능해진다. 주의할것.

인터넷 연결 설정 :
/etc/networks/interfaces
에 설정이 저장되어 있다.

rpm을 데비안 패키지로 바꾸기 :
alien 툴을 이용하여 바꾸는데 기본으로 설치되어 있지 않으므로 apt-get으로 설치하여
사용한다.
sudo alien -d kde-i18n-Korean-3.3.0-5hs.noarch.rpm
이렇게 쓰면 된다.

한글 설정 관련 문서 :
첫화면에서 apt관련 설정 추가로 해주고 nabi를 받으면 깔린다.
그후 nabi 설정을 해 주는데 .xmodmap으로 만들면 뻗는 경우가 있었다.
http://www.ubuntu.or.kr/wiki.php/FrontPage
http://www.ubuntu.or.kr/wiki.php/SettingInKubuntu
기본으로 한영키가 인식되지 않으므로 한영키를 인식시켜야 하는데
setkeycodes 71 122
setkeycodes 72 123
을 root권한으로 실행하고
xmodmap -e "keycode 209=Hangul_Hanja"
xmodmap -e "keycode 210=Hangul"
를 실행하거나 적절한 설정을 해 주어야 한다. 키코드 값은 시스템에
따라 다를수 있으니 xev를 이용하여 확인해보도록 할것.
setkeycodes는 /etc/init.d/bootmisc.sh 안에 기록하면 부팅할때
자동으로 실행된다고 한다.
x윈도 키코드 설정은 ~/.Xmodmap에 기록해도 된다고 한다.

개발 환경 설치 :
우분투에는 개발 관련 프로그램들이 아무것도 설치되어있지 않기 때문에
apt를 이용하여 설치해주어야 한다. 개발에 필요한 패키지는 build-essential
패키지이다.
커널에 관련한 개발에서 필요한 커널 헤더의 패키지는 linux-headrs-386
이다. (본인의 경우)
2006/04/13 04:52 2006/04/13 04:52
Posted
Filed under Linux/recommend
에러메세지나 경고음등을 재생하는 명령어인 play를 제공하는 패키지이다.

사용법도 간단하고 쓰기도 쉬운데다 대부분의 플랫폼과 배포판에서 동작한다.
음악을 재생하는 용도로 쓸수도 있고, 스크립트에서 간단하게 소리를 내는 용도로도 쓸 수 있고, 나의 경우는 오래 걸리는 작업을 스크립트로 돌릴때 스크립트 마지막에 써서 작업이 끝났음을 알리거나 gaim에서 소리로 알리는 옵션에서 사용한다.

사용법은 다음과 같다.
play -v 0.5 filetoplay
-v옵션은 재생할 볼륨을 지정하는 옵션인데 안주고 실행하면 대개 소리가 매우 크다. 1이 기본값이고 1보다 작게 주고 실행하곤 한다.

다운로드 받을때는 SourceForge로 가서 받기 바라고,
apt-get으로 받을때는 sox패키지를 다운로드 받으면 된다.
2006/04/09 16:36 2006/04/09 16:36
Posted
Filed under Linux/utility
Subversion을 다운로드 받아 설치하였다.
yum install subversion

설치 자체에 시간을 많이 들일수 없었다. 그래서 최신버전은 아닐지라도 트러블 없이 동작할수 있는 yum install을 이용하였다.
우분투/데비안에서는 apt-get install subversion으로 설치할수 있다.
두 명령 모두 서버와 클라이언트 프로그램을 전부 설치한다.

svn 명령이 실행되는것을 확인하고 서버로 이용하기 위한 설정을 시작하였다.

다음은 일반 데몬처럼 시작/중지 할 수 있도록 만든 subversion 실행 스크립트이다. 서버는 fedora core 4가 설치되어 있으며 스크립트도 이 환경에서 동작한다.
#! /bin/bash
#
# Subversion control script

. /etc/init.d/functions

# See how we were called.
case "$1" in
start)
action $"Starting Subversion service: " svnserve -d -r /home/svn
;;
stop)
action $"Shutting down Subversion service: " killproc svnserve
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload}"
exit 1
esac

exit 0
이 스크립트를 /etc/init.d/subversion 파일에 저장한다. 부팅할때 사용될것이다.
저장소 위치를 바꾸려면 -r옵션 뒤의 경로를 바꾸어 주면 되고, 서버를 root권한이 아닌 다른 사용자 권한으로 실행하려면 sudo -u xxx 명령을 앞에 붙여서 저장하면 된다.

시스템 시작시 사용할수 있도록 링크를 걸어준다.
cd /etc/rc3.d
ln -s ../init.d/subversion S57subversion
숫자(57)는 내가 정한 임의의 숫자이고 S로 시작하는 스크립트들이 번호 순서에 따라 부팅시 실행될것이다.

방화벽이 실행중인경우 subversion이 사용할 포트를 열어주어야 한다. svnserve를 포트옵션을 주지 않고 실행하였기 때문에 subversion의 기본 포트인 3690번 포트를 사용할것이다. iptable에서 3690번 tcp포트를 열어주어야 서버로 연결이 가능해진다.
포트를 열어주는법은 다른 post를 보거나 다른데서 찾아보라. redhat 계열 리눅스에서라면 쉘에서 setup 프로그램을 실행하여 설정할수도 있다.

기본적인 데몬의 설치는 끝났다. 이제 부팅할때마다 실행될것이고 화면에도 데몬 실행/중지가 표시될것이다. 데몬을 재시작하는것도 쉬워졌다.

저장소로 지정한 /home/svn으로 이동하여 프로젝트를 만들었다.
subversion은 하나의 서버에서 여러개의 프로젝트를 관리할수 있기 때문에 저장소 아래에 프로젝트 디렉토리를 만들어야 한다.
cd /home/svn
svnadmin create dknand
이제 svn아래에 dknand라는 디렉토리가 생성되었으며 그 안에는 subversion이 생성한 파일들이 들어 있을것이다. 생성된 디렉토리 안의 파일들은 함부로 수정해서는 안된다. 자칫하면 프로젝트 전체를 손상시키거나 파괴할수도 있기 때문이다. 파일을 수정할때는 무엇을 하고 있는지 확실하게 알고 해야 한다.

subversion이 만든 파일중 프로젝트를 관리할 설정파일들을 수정하였다.
cd dknand/conf
vi svnserve.conf passwd

svnserve.conf는 이 프로젝트에 액세스할 정책을 설정하는 파일이고 passwd는 사용자의 id와 패스워드를 설정하는 파일이다.
두 파일 모두 기본 내용이 들어있으니 파일을 열어 주석을 삭제하고 필요한 설정을 하면 된다.
나는, svnserve.conf에서는 anonymous 액세스를 막아주었고 passwd에서는 내 아이디와 비밀번호를 설정하였다.
passwd파일에 저장하는 아이디와 비밀번호는 암호화가 되어있지 않으니 아이디와 비밀번호를 선택할때 조심해야 한다.

이제 데몬을 실행시키고 클라이언트에서 svn 명령으로 프로젝트를 체크아웃 받아보았는데 설정한 id와 비밀번호를 이용하여 정상적으로 체크아웃되었다. 아직 아무것도 들어있지 않았으나 나중에 기본 디렉토리 구조를 생성하고 파일을 생성할것이다.


다음은 subversion을 설정하면서 참고한 사이트들이다.
KLDPwiki: dasomoli - 기본 설치후 설정에 대해 괜찮은 글.
Version Control with Subversion - on-line book
subversion kldp wiki
2006/04/07 02:44 2006/04/07 02:44
두두두

잘 읽어보고 갑니다. 스크립트가 다른 데몬에도 사용할 수 있을 것 같네요. 그런데 이 스크립트로 start는 되는데 stop이 안되네요. 그런데 어느학교 다니세요?

StevenCVAL

무척 오래 뒤에 답을 드리는군요.. ㅜㅜ.
제가 제 블로그에도 그닥 잘 들어오질 않는터라..

저 스크립트 자체도 다른 스크립트 수정해서 뚝딱뚝딱 만들어낸겁니다.
그런데 저거 왠지 안될것 같지는 않은데요...
혹시 우분투에서 sudo 안 쓰고 돌리시진 않으셨겠죠..?
농담입니다.. ^^;;;

한번 점검 해 보겠습니다.
수정하고 나면 다시 댓글 달아놓을게요. ^^;;;

그리고 전 단국대학교 다닙니다. ㅡㅡ/

Posted
Filed under Linux/system
iptable의 간단한 사용


1 장 : IP 주소 막기

이번시간에는 Iptables사용법과 기본적인 firewall구성법에 대해서 알아보도록 하겠다.

Iptables 를 사용하기 위한 기본적인 설정에 대해서 알아보자. Iptables는 Kernel 2.4.x 기반의 리눅스 설치시에 기본으로 설치되어있고 /sbin 디렉토리 아래에 있다. 그리고 iptables와 ipchains는 동시에 사용할 수 없으므로 우선 ipchains의 모듈을 내려줘야 한다.



이제 Iptables에 대해서 본격적으로 알아보도록 하자.


기 본적으로 Iptables에는 세가지 chain이 있고 모든 패킷은 이 세가지 chain중 하나를 통과하게 된다. 이 세가지 chain은 INPUT, OUTPUT, FORWARD chain인데 우선 여러분의 컴퓨터로 들어가는 모든 패킷은 INPUT chain을 통과한다. 그리고 여러분의 컴퓨터에서 나가는 모든 패킷은 OUTPUT chain을 통과한다. 그리고 하나의 네트워크에서 다른 곳으로 보내는 모든 패킷은 FORWARD chain을 통과한다.




Iptables가 작동하는 방식은 이들 각각의 INPUT, OUTPUT, FORWARD chain에 당신이 어떠한 rule을 세우는 지에 따라 달라진다.

예를 들어 당신이 HTML 페이지를 요청하기 위해 www.yahoo.com에 패킷을 보낸다면 이 패킷은 우선 당신 컴퓨터의 OUTPUT chain을 통과하게 된다.

그러면 kernel에서 OUTPUT chain의 rule을 확인하고 rule과 match가 되는지 확인을 하게된다. rule중에서 최초로 match되는 것에 의해 당신이 보낸 패킷의 운명이 결정되는 것이다.

만 약 어떤 rule과도 match되지 않는다면 전체 chain의 정책이 ACCEPT냐 DROP이냐에 따라 패킷의 운명이 결정될 것이다. 그러고 나서 Yahoo! 에서 응답하는 패킷은 당신의 INPUT chain을 통과하게 될 것이다.


IP 주소 막기


이제 기초적인 개념에 대해서 알아봤으니 실제로 사용해 보도록 하겠다.


Iptable 을 사용할 때에는 기억해야 할 많은 옵션들이 있으므로 man 페이지(man iptables)를 잘 활용하는 것이 중요하다. 이제 특정 IP를 조종하는 법에 대해서 알아보자. 우선 당신이 200.200.200.1 이라는 IP로부터 오는 모든 패킷을 막고 싶어한다고 가정하자. 우선 -s 옵션이 사용되는데 여기에서 source IP나 DNS name을 지칭할 수 있다. 그러므로 다음과 같이 함으로써 이 IP를 지칭할 수 있다.


./iptables -s 200.200.200.1



하 지만 위처럼만 명령을 내리면 kernel은 위의 주소에서 오는 패킷을 어떻게 처리해야 할 지를 알 수가 없다. 그러므로 -j 옵션으로 그 패킷을 어떻게 처리해야 하는지 결정해야 한다. 일반적으로 3가지 옵션이 있는데 ACCEPT, DENY, DROP이다.


ACCEPT 는 대충 예상할 수 있듯이 패킷을 허용하는 옵션이다. DENY 옵션은 컴퓨터가 연결을 허용하지 않는다고 메시지를 돌려 보내는 옵션이다. 그리고 DROP 옵션은 패킷을 완전히 무시해 버린다. 만약 우리가 이 IP에 대해 확실히 의심이 간다면 우리는 DENY 대신에 DROP을 사용해야 할 것이다.

그러므로 결과적으론 다음과같이 옵션을 주면 된다.


./iptables -s 200.200.200.1 -j DROP



하지만 이 명령만으로는 아직 컴퓨터가 명령을 이해할 수가 없다. 우리는 한가지를 더 추가해야 되는데 바로 어떤 chain의 rule로 적용시킬지 결정해야 하는 것이다.

여 러분은 -A 옵션을 사용해서 이를 결정할 수 있다. 즉 아까 위에서 본 INPUT, OUTPUT, FORWARD 옵션 중에서 하나를 선택해야 하는 것이다. 이 옵션을 줌으로써 당신이 선택한 chain의 맨 아래부분에 새로운 rule이 추가될 것이다.

따라서 우리는 우리에게 들어오는 패킷을 차단하고 싶으므로 INPUT 옵션을 주면 되는 것이다. 그러므로 전체 명령은 다음과 같다.


./iptables -A INPUT -s 200.200.200.1 -j DROP



이 한 줄의 명령으로 200.200.200.1로부터 오는 모든 패킷을 무시할 수 있다. 옵션의 순서는 바뀌어도 상관이 없다. 즉 -j DROP이 -s 200.200.200.1 보다 앞에 가도 상관이 없다. 만약 그 반대로 200.200.200.1로 패킷이 못가도록 하려면 INPUT 대신에 OUTPUT을, -s 대신에 -d(destination) 옵션을 주면된다.



2 장 : Service 차단하기


만 약 우리가 해당 컴퓨터로부터 telnet 요청만 무시하고싶다면 어떻게 해야 하는가? 이것도 그다지 어렵지 않다. 일단 큰 범주로 나누어 봤을 때 적어도 3가지의 프로토콜 - TCP, UDP, ICMP - 가 있다. 다른 대부분의 서비스와 마찬가지로 telnet은 TCP 프로토콜로 작동한다. -p 옵션으로 우리는 프로토콜을 결정할 수 있다. 하지만 TCP라고만 옵션을 줘서는 컴퓨터가 인식하지를 못한다. telnet은 TCP프로토콜로 작동하는 특정 서비스에 불과하기 때문이다. 우선 우리가 프로토콜을 TCP로 설정한 다음에는 --destination-port 옵션으로 해당하는 port를 설정해 줘야한다.

우선 telnet의 포트번호는 23번이다. 포트번호 대신에 telnet이라 써도 상관없다.

여 기서 source port 와 destination port를 혼동하면 안된다. 즉 클라이언트는 어떤 포트로도 작동할 수 있는 반면에 서버는 23번 포트로 작동하기 때문이다. 즉 특정 서비스를 차단하기 위해서는 -destination-port를 이용하면 되고, 그 반대는 -source-port를 이용하면 된다. 이제 이들 옵션을 합쳐서 아래와 같이 명령을 주면 된다.

./iptables -A INPUT -s 200.200.200.1 -p tcp --destination-port telnet -j DROP



그리고 IP의 영역을 선택하고 싶다면 200.200.200.0/24 와 같이 설정하면 된다. 이것은 200.200.200.* 에 해당하는 모든 IP를 선택하는 것과 같다.


선택적인 차단


이 제 좀더 심화된 내용에 대해서 알아보자. 우선 여러분의 컴퓨터가 local area network(LAN)에 있고, Internet에 접속 가능하다고 가정한다. 알다시피 LAN은 eth0으로 Internet 연결은 ppp0으로 구분할 수 있다. 이제 다시 다음과 같이 가정해 보자. 우리는 telnet 서비스를 LAN상의 컴퓨터에게는 서비스하고 보안상 Internet상에서는 접근하지 못하도록 하고 싶다. 이것 역시 쉽게 구성할 수 있다. 우리는 input interface에 대해서는 -i 옵션을 output interface에 대해서는 -o 옵션을 사용할 수 있다. 즉 다음처럼 명령을 주면 된다.

./iptables -A INPUT -p tcp --destination-port telnet -i ppp0 -j DROP



이렇게 함으로써 우리는 LAN상의 사용자는 telnet을 사용하고 그밖에 Internet상의 사용자는 telnet 을 사용하지 못하도록 할 수 있다.


Rule 순서에 관하여


이제 다음 단계로 들어가기에 앞서서 rule을 조종하는 다른 방법에 대해서 간단히 알아보자.

Iptables 의 chain에서는 먼저 등록 된 rule이 효력을 발생하기때문에 등록을 하는 순서가 중요하다. 모든 것을 거부하는 설정이 먼저오게 되면 그 이후에 포트를 열어주는 설정이 와도 효과가 없다. 그러므로 허용하는 정책이 먼저오고 나서 거부하는 정책이 와야한다.


-A 옵션을 줌으로써 우리는 새로운 규칙을 chain의 맨 아래에 추가하게 된다. 즉 chain상의 상위 rule이 먼저 작동하기 때문에, 만일 새로 추가하는 rule을 먼저 작동시키기 위해서는 -I 옵션을 줌으로써 새로운 rule을 원하는 위치에 놓을 수 있다. 예를 들어 INPUT chain의 가장 위에 어떤 rule을 놓고 싶다면 "-I INPUT 1" 이라 명령하면 된다. 그리고 다른 위치로 놓고 싶다면 1을 다른 숫자로 바꿔주면 된다.


그 리고 이미 위치된 rule을 다른 위치로 바꾸고 싶다면 -R 옵션을 주면 된다. -I 옵션을 주는 것과 마찬가지로 사용할 수 있는데 다만 -I옵션을 사용해서 1의 위치에 놓으면 다른 rule들이 밑으로 한칸씩 내려가는 반면 -R옵션을 사용해서 1의 위치에 놓으면 그 위치의 rule은 삭제된다.


그 리고 끝으로 rule을 삭제하고 싶다면 -D옵션과 숫자를 사용하면 되고, -L 옵션을 사용하면 작성된 모든 rule의 목록을 보여주고, -F 옵션을 주면 해당 chain의 모든 rule을 삭제한다. 그리고 만약 chain을 명시하지 않았다면 모든 것을 flush할 것이다.

3 장 : SYN Packets


좀더 심화된 내용에 대해서 알아보자. 우선 패킷들은 특정 프로토콜을 사용한다. 그리고 프로토콜이 TCP라면 역시 특정 port를 사용한다. 그러므로 여러분 컴퓨터의 모든 포트를 막음으로써 보안을 할 수 있을 것이다.

하 지만 당신이 다른 컴퓨터에 패킷을 보내면 그 컴퓨터는 당신에게 다시 응답을 해야한다. 그러므로 만약 당신에게 들어오는 모든 포트를 막아버린다면 당신에게 응답하는 패킷도 결국 못 들어오므로 connection을 하는 의미가 없을 것이다.


하지만 다른 방법이 있다. 두 컴퓨터가 TCP connection으로 패킷을 주고 받는다면 그 connection은 우선 초기화가 되어야 한다.


이 것은 바로 SYN packet이 담당한다. SYN packet은 단순히 다른 컴퓨터에게 주고 받을 준비가 되었다는 것만 알려주는 초기화 기능만을 한다. 이제 서비스를 요청하는 컴퓨터는 우선적으로 SYN packet을 보낸다는 것을 알게 되었다. 그러므로 들어오는 SYN packet만 막기만 하면 다른 컴퓨터가 당신 컴퓨터의 서비스를 이용하지 못하게 할 수 있고, 하지만 당신은 그들과 통신할 수 있는 것이다.


즉 이와 같이 하면 당신이 먼저 패킷을 보내서 요청이 들어오는 것이 아니면 모두 무시해 버리게 된다.

이 옵션을 사용하기 위해서는 선택한 프로토콜 뒤에 --syn이라고 명령을 넣으면 된다. 이제 인터넷으로부터 오는 모든 연결을 막기위해서는 다음과 같이 rule을 정하면 된다.

./iptables -A INPUT -i ppp0 -p tcp --syn -j DROP



당신이 만약 웹 서비스를 운영하는 것이 아니라면 이것은 유용한 rule이 될 것이다.


만약 당신이 웹서비스를 위해 하나의 포트(예를들어 80번-HTTP)만 열어두고 싶다면 역시 한가지 방법이 있다.

바로 "!" 마크를 사용하면 되는데 많은 프로그래밍 언어에서처럼 "!"은 "not"을 의미한다.


예를들어 80번 포트만 제외하고 모든 SYN packet들을 막고싶다면 다음과 같이 하면 된다.


./iptables -A INPUT -i ppp0 -p tcp --syn --destination-port ! 80 -j DROP



다소 복잡한듯해도 간단한 rule이다.


Chain 정책


마지막으로 한가지 남은 것이 있다. 이것은 chain의 정책을 바꾸는 것으로 INPUT과 OUTPUT chain은 디폴트로 ACCEPT로 정해져 있고, FORWARD chain은 DENY로 정해져 있다.

만약 당신의 컴퓨터를 라우터로 사용하려면 당신은 FORWARD chain의 정책을 ACCEPT로 설정하고 싶을 것이다.


이럴때 어떻게 해야하는가? 이것은 매우 간단하다. -P 옵션을 사용하면 된다. 즉 FORWARD chain을 ACCEPT로 정하기 위해선 다음과 같이 명령을 내리면 된다.


./iptables -P FORWARD ACCEPT


<활용 예제>


1. 운영중인 리눅스 서버 IP address


- IP Address : 168.131.161.49



2. IPtables의 설정파일과 그에 대한 설명파일(5점)


< /etc/sysconfig/iptables >


# 우선 모든 Rule을 정리한다.

/sbin/iptables -F


# 다음으로 각각에 대한 정책을 세운다.

/sbin/iptables -P INPUT DROP

/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -P FORWARD DROP


# localhost에서의 traffic을 받아들인다.

/sbin/iptables -A INPUT -i lo -j ACCEPT


# 확립된 연결에 대한 Packet을 받아들인다.

/sbin/iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT


# DNS 응답을 받아들인다.

/sbin/iptables -A INPUT -i eth0 -p tcp --source-port 53 -j ACCEPT

/sbin/iptables -A INPUT -i eth0 -p udp --source-port 53 -j ACCEPT


# 인증 연결을 거부한다(그렇지 않을 경우 메일서버가 오랫동안 타임아웃 상태가 될 것이다.)

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 113 -j REJECT


# echo나 목적지에 도착 못하거나 시간 초과된 icmp packet들을 받아들인다.

/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j ACCEPT

/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 3 -j ACCEPT

/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 11 -j ACCEPT


# ssh 열기

/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT


# httpd 열기

/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT


# ftpd 열기

/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT


# ftp-data 열기

/sbin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT


# 전부 거절하기

/sbin/iptables -A INPUT -p tcp --dport 1:30000 -j DROP

/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j DROP




4 장 : iptables, 스크립트로 만들어 사용하기


이번에는 iptable 명령어를 편리하게 스크립트로 만들어서 사용해 보자

일단 iptables라는 파일을 다음처럼 작성해 보자. 파일의 위치는 /etc/sysconfig/ 아래에 두도록 하겠다.



--begin script--

#!/bin/sh


# 우선 모든 Rule을 정리한다.


/sbin/iptables -F


# 다음으로 각각에 대한 정책을 세운다.


/sbin/iptables -P INPUT DROP

/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -P FORWARD DROP


# localhost에서의 traffic을 받아들인다.


/sbin/iptables -A INPUT -i lo -j ACCEPT


# 확립된 연결에 대한 Packet을 받아들인다.


/sbin/iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT


# DNS 응답을 받아들인다.


/sbin/iptables -A INPUT -i eth0 -p tcp --source-port 53 -j ACCEPT

/sbin/iptables -A INPUT -i eth0 -p udp --source-port 53 -j ACCEPT


# 인증 연결을 거부한다(그렇지 않을 경우 메일서버가 오랫동안 타임아웃 상태가 될 것이다.)

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 113 -j REJECT


# echo나 목적지에 도착 못하거나 시간 초과된 icmp packet들을 받아들인다.


/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j ACCEPT

/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 3 -j ACCEPT

/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 11 -j ACCEPT


--end script-



위의 스크립트는 하나의 예에 불과하고 기타 ssh나 ftp, samba등을 이용하기 위한 설정사항을 직접 작성해야 한다.

파일 작성이 끝났으면 파일에 실행권한을 줘야한다. 보안상 root만 실행할 수 있도록 권한을 변경한 후 위의 스크립트를 실행하면 된다.


확인을 하려면 /sbin/iptables -L 이라고 하면 방금 실행시킨 스크립트가 나올 것이다.


그리고 부팅시마다 실행을 시키려면 /etc/rc.d/rc.local 파일 맨 아래 부분에 다음처럼 넣으면 된다.


if [ -f /etc/sysconfig/iptables ]; then

/etc/sysconfig/iptables

fi


이 번 시간에는 Iptables의 기초만을 알아보았다. 여기 있는 정보를 통해서 당신은 기본적인 firewall을 설정할 수 있을 것이다. 하지만 아직 많은 것들이 남아있다. 더 많은 옵션에 대해서 알아보기 위해서 man 페이지를 활용하기 바라고 Iptables에 관련된 심화된 문서들을 참고하기 바란다.
2006/04/06 23:09 2006/04/06 23:09
Posted
Filed under Linux/tip
텍스트 인코딩 명령어기
iconv -f=<원문인코딩> -t=<출력인코딩> inputName -o=outputName


파일 인코딩 변경 스크립트
#!/bin/sh
mkdir out
for FILE in *.php
do
iconv -f=EUC-KR -t=utf8 $FILE > "./out/$FILE"
done

파일의 인코딩을 변경할때 주의할점이 있는데,
리다이렉션이나 -o 옵션을 써서 변경된 내용을 저장하고자 할때
원본 파일이름을 그대로 쓰면 절대로 안된다. 파일 내용이 날아가버리기 때문이다.

반드시 다른 파일로 저장한 후 원본 파일을 삭제하거나 하고
변경된 파일을 원래 파일로 돌려주어야 한다.

입력 파일과 촐력파일을 같은 파일로 지정했을경우
파일이 사라지지는 않지만 용량이 0으로 변해버리는걸 보게 될것이다. ㅠㅠ..
2006/03/30 12:45 2006/03/30 12:45