리눅스... SW 개발자들에게 수많은 기회를 열어줬던...
차 례
제 1 장 학내전산망 표준 구성안 1
제 2 장 Linux Server Network 설정 16
제 3 장 Linux Server 보호하기 22
제 4 장 기타 시스템 파악하기 28
제 1 장 학내전산망 표준 구성안
제1장을 통해서 학내 전산망 표준 구성도를 이해하고 전체적인 시스템 구성을 이해한다
|
1. System 표준 구성도
-. Server에 랜카드3장 장착으로 학내망을 3개의 네트웍으로 분리
-. 학생용 HUB와 선생님 HUB를 물리적으로 분리하여 상호간의 공유 방지
-. 학생용 PC / 선생님 PC에 사설IP를 사용하여 외부에 대한 침입을 방지
-. 교무행정 Server를 선생님 사용 HUB에 연결함으로 선생님만 접근가능
-. Proxy Software를 사용하여 인터넷속도증가 및 음란사이트 차단 가능
제 2 장 Linux Server Network설정
제2장을 통해서 Linux Server Network 설정 세부 과정을 이해하고 Server System관리 방법을 이해한다.
1. Linux 기본명령어
2. Network 설정
3. File 관리
4. 시스템 시작 및 종료
5. Password 변경
6. 계정관리
|
1. Linux 기본명령어
리눅스의 기본 명령어를 이해하고 활용한다.
|
• cd
'Change Directory' 작업 디렉토리를 이동할 때 사용하는 명령어이다
• pwd
현재 작업중인 대렉토리의 경로를 출력해준다.
[root@server /]# cd /home/test01
[root@server test01]# pwd
/home/test01
|
• ls
디렉토리 파일이나 디렉토리들의 리스트를 출력해주는 명령어이다
-a : 디렉토리의 모든 파일과 디렉토리 리스트를 출력한다.
-l : 파일의 권한, 소유자, 그룹, 크기, 날짜 등과 함께 출력한다.
[root@server test01]# pwd
/home/test01
[root@server test01]# ls -a
./ .bash_logout .bashrc .kde/ .screenrc
../ .bash_profile .emacs* .kderc Desktop/
[root@server test01]# cd Desktop
[root@server Desktop]#
|
[root@server Desktop]# ls -l
합계 36
drwxr-xr-x 2 test01 test01 4096 7월 7 10:15 Autostart/
-rw-r--r-- 1 test01 test01 278 7월 7 10:15 Printer.kdelnk
-rw-r--r-- 1 test01 test01 182 7월 7 10:15 Red Hat Errata.kdelnk
-rw-r--r-- 1 test01 test01 174 7월 7 10:15 Red Hat Support.kdelnk
drwxr-xr-x 2 test01 test01 4096 7월 7 10:15 Templates/
drwxr-xr-x 2 test01 test01 4096 7월 7 10:15 Trash/
-rw-r--r-- 1 test01 test01 433 7월 7 10:15 cdrom.kdelnk
-rw-r--r-- 1 test01 test01 447 7월 7 10:15 floppy.kdelnk
-rw-r--r-- 1 test01 test01 144 7월 7 10:15 www.redhat.com.kdelnk
[root@server Desktop]#
|
• cp
파일 복사를 위한 명령어 이다
다음은 test01 디렉토리 안에있는 파일 test를 testtest로 복사한 내용이다.
[root@server test01]# ls -a
./ ../ test
[root@server test01]# cp test testtest
[root@server test01]# ls -l
합계 8
-rw-r--r-- 1 root root 82 7월 7 11:48 test
-rw-r--r-- 1 root root 82 7월 7 11:49 testtest
|
• mv
파일이나 디렉토리를 이동시키거나 이름을 변경할 때 사용하는 명령어이다.
[root@server test01]# mv test test01
[root@server test01]# ls
test01 testtest
[root@server test01]# mv test01 ../test02/test02
[root@server test01]# cd ../test02
[root@server test02]# ls
test02
|
• rm
파일을 삭제하는 명령어이다.
-r : 디렉토리의 내용을 재귀적으로 삭제한다.
-f : 삭제 물음없이 파일을 삭제한다.
[root@server test02]# rm test02
rm: `test02'를 지울까요? y
[root@server test02]# ls
[root@server test02]#
|
• mkdir
디렉토리를 생성하는 명령어이다.
[root@server test01]# ls
testtest
[root@server test01]# mkdir temp
[root@server test01]# ls
temp/ testtest
|
• rmdir
디렉토리를 삭제하는 명령어이다 단, rmdir은 디렉토리가 비어있을 경우에만 삭제한다.
디렉토리에 파일이 있다면 rm -rf 명령어를 사용한다
[root@server /home]# ls
http/ net21/ test01/ test02/ test03/
[root@server /home]# rmdir test02
rmdir: test02: 디렉토리가 비어있지 않음
[root@server /home]# rm -rf test02
[root@server /home]# ls
http/ net21/ test01/ test03/
|
• cat
파일의 내용을 출력해 주는 명령어 이다.
[root@server test01]# cat testtest
good-bye
[root@server test01]#
|
•리눅스 디렉토리구조
리눅스의 디렉토리 구조는 전체적으로 역tree구조를 하고 하고 있으며, 리눅스의 디렉토리 구조는 FSSTND(Linux File System Standard)라는 파일시스템의 표준에 따르며 거의 모든 리눅스에서는 이 표준을 따라서 디렉토리를 구성하고 있다.
[root@ciss9 /]# ls -l
total 136
drwxr-xr-x 2 root root 4096 Aug 12 05:44 bin
drwxr-xr-x 2 root root 4096 Aug 12 05:48 boot
drwxr-xr-x 6 root root 36864 Oct 10 04:02 dev
drwxr-xr-x 37 root root 4096 Oct 11 14:28 etc
drwxr-xr-x 14 root root 4096 Oct 1 11:41 home
drwxr-xr-x 4 root root 4096 Aug 12 05:42 lib
drwxr-xr-x 4 root root 4096 Aug 12 05:36 mnt
dr-xr-xr-x 89 root root 0 Sep 6 23:49 proc
drwxr-x--- 17 root root 4096 Oct 12 07:01 root
drwxr-xr-x 3 root root 4096 Aug 12 05:44 sbin
drwxrwxrwt 7 root root 4096 Oct 12 04:02 tmp
drwxr-xr-x 22 root root 4096 Aug 12 05:41 usr
drwxr-xr-x 20 root root 4096 Aug 12 05:44 var
|
/ : 최상의 디렉토리인 루트디렉토리.
/bin : 중요하고 꼭 필요한 명령어가 있는 디렉토리.
/boot : 커널(vmlinux등) 시스템 부팅에 관련된 파일을 저장하고 있는 디렉토리.
/dev : 시스템 디바이스(device)파일을 저장하고 있는 디렉토리.
/etc : 패스워드파일등 시스템의 전체 환경설정파일을 저장하고 있는 디렉토리.
/home : 사용자의 홈디렉토리, ID와 동일한 이름으로 디렉토리를 가짐.
/lib : 프로그램(C, C++등)에 필요한 각종 라이브러리를 저장.
/mnt : 플로피, CD-ROM등 마운트를 위한 디렉토리.
/proc : 실행중인 프로세스나 현재 시스템의 정보를 파일형태로 보여주는 가상디렉토리.
/root : root의 홈디렉토리.
/sbin : 시스템 관리자용 명령어를 저장하고 있는 디렉토리.
/tmp : 일시적인 저장을 위한 디렉토리.(정기적으로 삭제됨)
/usr : 각종 어플리케이션등이 설치되어 있는 디렉토리.
/usr/X11R6 : X 윈도우 시스템의 루트 디렉토리.
/usr/include : C 프로그램에 필요한 헤드파일(*.h) 디렉토리.
/usr/lib : /lib에 들어가지 않은 라이브러리 디렉토리.
/usr/man : 명령어들의 도움말을 주는 매뉴얼(manual)페이지 디렉토리.
/usr/sbin : /bin에 제외된 명령어와 네트웍관련 명령어가 들어있는 디렉토리.
/usr/src : 프로그램 소스(주로 커널소스)가 저장되는 디렉토리.
/usr/local : 아파치같은 추가 소프트웨어가 설치되는 장소.
/var : 시스템운용중에 생성되었다가 삭제되는 데이터를 저장하는 디렉토리.
/var/log : 각종 로그파일이 저장되는 디렉토리.
/var/spool/mail : 메일이 일시적으로 저장되는 디렉토리.
/var/spool/lpd : 프린트를 하기 위한 임시 디렉토리(스풀링 디렉토리).
2. Network 설정
목적 : 리눅스 서버의 네트웍 설정 방법을 이해한다.
조건 : 리눅스 서버에 3개의 랜카드를 장착하여 3개의 네트웍을 구성하며 NAT기능을 이용 한다.
Eth0 = 공인IP , Eth1 = 사설1group, Eth2 = 사설2group
|
root@server /etc]# vi modules.conf
alias eth0 eepro100 --- intel lancard
alias eth1 rtl8139too --- 대만산 realtek lancard
alias eth2 3c59x --- 3com lancard
alias parport_lowlevel parport_pc
|
2) /etc/hosts 파일을 열어 공인 IP주소와 도메인을 설정해준다.
[root@server /etc]# vi hosts
127.0.0.1 localhost localhost.localdomain
211.51.117.254 server.hinet21.com server
|
3) /etc/sysconfig/network 파일을 열어 설정해준다.
[root@server sysconfig]# vi network
NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=server.hntis.co.kr
GATEWAY=211.51.117.253
GATEWAYDEV=eth0
|
4) /etc/sysconfig/network-scripts/vi ifcfg-eth0 파일을 열어 환경을 설정해 준다.
[root@server network-scripts]# vi ifcfg-eth0
DEVICE=eth0
IPADDR=211.51.117.254
NETMASK=255.255.255.0
NETWORK=211.51.117.0
BROADCAST=211.51.117.255
ONBOOT=yes
|
5) 네트워크 카드가 세 개일 때는 ifcfg-eth1과 ifcfg-eth2 파일을 다음과 같이 생성한다.
# cp ifcfg-eth0 ifcfg-eth1
# cp ifcfg-eth0 ifcfg-eth2
|
6) /etc/sysconfig/network-scrits/vi ifcfg-eth1 파일의 내용을 다음과 같이 수정한다.
DEVICE=eth1
IPADDR=172.31.0.1 (사용하고자 하는 사설IP 대역)
NETMASK=255.255.0.0
NETWORK=172.31.0.0 (사용하고자 하는 사설IP대역의 시작 번호)
BROADCAST=172.31.255.255 (사용하고자 하는 사설IP대역의 마지막 번호)
ONBOOT=yes
|
7) /etc/sysconfig/network-scrits/vi ifcfg-eth2 파일의 내용을 다음과 같이 고친다.
DEVICE=eth2
IPADDR=172.32.0.1
NETMASK=255.255.0.0
NETWORK=172.32.0.0
BROADCAST=172.32.255.255
ONBOOT=yes
|
8) Network에 관한 데몬을 실행해본다.
[root@server network-scripts]# cd /etc/rc.d/init.d
[root@server init.d]# ./network restart
Shutting down interface eth0 [ OK ]
Shutting down interface eth1 [ OK ]
Shutting down interface eth2 [ OK ]
Disabling IPv4 packet forwarding [ OK ]
Bringing up interface lo [ OK ]
Bringing up interface eth0 [ OK ]
Bringing up interface eth1 [ OK ]
Bringing up interface eth2 [ OK ]
[root@server init.d]#
|
9) 랜카드가 정확히 인식되었는지 확인해본다.
[root@server /etc]# ifconfig | more
eth0 링크 방법:이더네트 하드웨어주소00:10:5A:73:A4:1B
inet 주소:211.51.117.254브로드캐스트:210.126.3.191 매스크:255.255.255
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX 패킷:2418736 에러:96 손실:0 오버런:0 프레임:97
TX 패킷:256193 에러:0 손실:0 오버런:0 캐리어:2
충돌:18510 TX대기선:100
인터럽트:10 기본주소:0xe400
eth1 링크 방법:이더네트 하드웨어주소00:90:27:42:CB:15
inet 주소:172.31.0.1 브로드캐스트:172.31.255.255 매스크:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX 패킷:0 에러:0 손실:0 오버런:0 프레임:0
TX 패킷:0 에러:0 손실:0 오버런:0 캐리어:0
충돌:0 TX대기선:100
인터럽트:5 기본주소:0xe800
eth2 링크 방법:이더네트 하드웨어주소00:00:37:92:CO:11
inet 주소:172.32.0.1 브로드캐스트:172.32.255.255 매스크:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX 패킷:0 에러:0 손실:0 오버런:0 프레임:0
TX 패킷:0 에러:0 손실:0 오버런:0 캐리어:0
충돌:0 TX대기선:100
인터럽트:7 기본주소:0xe900
lo 링크 방법:로컬 루프백
inet 주소:127.0.0.1 매스크:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX 패킷:3604 에러:0 손실:0 오버런:0 프레임:0
TX 패킷:3604 에러:0 손실:0 오버런:0 캐리어:0
충돌:0 TX대기선:0
|
위의 예에서는 eth0, eth1, eth2 세개의 랜카드가 인식되었음을 보여 준다.
다음으로 정상적으로 랜카드간에 패킷이 송수신 되는지 ping을 통하여 확인한다.
• ping 211.51.117.254 ---- eth0
• ping 172.31.0.1 ---- eth1
• ping 172.32.0.1 ---- eth2
[root@server /home]# ping 211.51.117.254
PING 211.51.117.254 (211.51.117.254) from 211.51.117.254 : 56(84) bytes of data.
64 bytes from server (211.51.117.254): icmp_seq=0 ttl=255 time=0.5 ms
64 bytes from server (211.51.117.254): icmp_seq=1 ttl=255 time=0.3 ms
[root@server /home]# ping 172.31.0.1
64 bytes from server (172.31.0.1): icmp_seq=0 ttl=255 time=0.5 ms
64 bytes from server (172.31.0.1): icmp_seq=1 ttl=255 time=0.3 ms
[root@server /home]# ping 172.32.0.1
64 bytes from server (172.32.0.1): icmp_seq=0 ttl=255 time=0.5 ms
64 bytes from server (172.32.0.1): icmp_seq=1 ttl=255 time=0.3 ms
|
서버내에서는 패킷이 송수신 됨을 확인할수 있다.
10) 다음은 사설ip영역을 공인ip로 forwarding 시킨다.
/etc/rc.d/rc.local 파일 맨마지막 라인에 다음과 같이 추가한다.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
첫라인은 사설ip 영역에서도 telnet 서비스가 가능하도록 설정해 준 것이며 두 번째는 사설ip를
외부로 패킷이 나갈수 있도록 설정을 해준 것이다.
3. FILE 관리
리눅스나 유닉스에서는 도스나 윈도우즈95/98과 다르게 파일마다 권한과 소유권이라는 것이 있습니다. 이것은 멀티유저 시스템인 경우에 매우 중요한 것으로서 자신이 가진 파일을 다른 사람이 건드릴 수 있는가 없는가에 대한 권한을 설성하게 합니다.
[root@server /etc]# ls -l
합계 1732
drwxr-xr-x 3 root root 4096 6월 9 16:17 CORBA/
-rw-r--r-- 1 root root 2434 7월 12 2000 DIR_COLORS
-rw-r--r-- 1 root root 21 7월 7 08:39 HOSTNAME
-rw-r--r-- 1 root root 5475 7월 12 2000 Muttrc
-rw-r--r-- 1 root root 45212 2월 4 2000 TextConfig
drwxr-xr-x 12 root root 4096 6월 29 21:29 X11/
-rw-r--r-- 1 root root 42 6월 30 08:44 adjtime
|
위에서보면 디렉토리가 2개있고 파일이 5개가 있습니다.
-rw-r--r--
|
1
|
root
|
root
|
42
|
6월30 08:44
|
adjtime
|
권한관련
|
링크수
|
파일소유자
|
파일소유그룹
|
용량
|
최종갱신시간
|
파일명
|
위의표는 adjtime 파일에대한 의미를 살펴본 것 입니다.
권한 관련에서 자세하게 알아야 될 것은 소유자,소유그룹입니다.
권한을 바꿀려면 파일의 소유자만이 가능합니다. 물론 root계정은 이것과 무관하게 모든 파일을 바꿀수 있습니다. 권한은 자세하게 분류하면 총9개의 문자는 3가지 종류로 다시 분류됩니다. 각각은 3개씩의 문자로 구성되며 소유자에 대한 권한, 소유지 그룹에 대한 권한, public(모든 유저에 대한)에 대한 권한으로 구분됩니다. 여기에서 r은 읽기권한, w는 쓰기권한, x는 실행권한입니다.
r
|
w
|
x
|
r
|
w
|
x
|
r
|
w
|
x
| |
소유자
| |||||||||
소유그룹
| |||||||||
Public
|
• 소유권 변경 명령 chown, chgrp ex) chown - R nobody.nobody Mail
chown명령은 파일에 대한 소유권과 소유그룹을 바꾸는 명령이며 chgrp명령은 그룹의 소유권을 바꾸는 명령이다
-R 디렉토리 아래에 있는 모든 파일을 변경하고자 할때 쓰는 옵셥
• 허가권 변경 명령 chmod ex) chmod 777 ezboard.cgi
파일의 허가권을 변경한는 명령으로 파일의 소유자와 루트관리자만이 할 수 있다
4. 시스템 시작 및 종료
• 시스템 시작
Welcome to WOW Linux
Red Hat Linux release 7.1 (Palan)
Kernel 2.4.2-3 on an i386
login: com01
Password:
Last login: Sat Jul 7 18:46:42 from 192.168.0.111
[net21@server net21]$ su
Password:
[root@server net21]#
|
콘솔상태에서 시스템에 접속할려면 login에 root 한후 root password를 입력하면 된다.
만일 일반계정에서 root 계정으로 접속할려면 su 명령어를 통해서 root의 권한을 획득한다.
• 시스템 종료
[root@server net21]# shutdown -h now <선택 사항> <시간>
|
-h - 종료가 완료되면 시스템을 정지시킨다.
-r - 종료가 완료되면 시스템을 다시 부팅시킨다.
5. Password 변경
[root@server net21]# passwd root
Changing password for user root
New UNIX password: xxxxxxx
Retype new UNIX password: xxxxxxx
passwd: all authentication tokens updated successfully
|
password를 관리하는 파일은 /etc/group, /etc/passwd, /etc/shadow 이다. 이 파일을 매우 중요한 파일 이기 때문에 root만의 쓸수 있게 설정을 해주어야 한다.
예) chmod 644 passwd : -rw-r--r--
6. 계정 관리
• adduser
계정을 추가하는 명령어이다.
[root@bigdog /root]# adduser com01
[root@bigdog /root]#
[root@bigdog /root]# passwd com01
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully
[root@bigdog /root]#
|
adduser 다음에 원하는 계정을 입력한다. 그리고 passwd를 입력후 새로만든 계정을 입력한다.
password를 입력하면 된다. 새로 만든 계정은 /home/com01 이라는 디렉토리가 생기며 이 디렉토리의 소유자와 소유그룹은 계정이름과 똑같음을 확인할 수 있다. 참고로 계정은 root 만이 만들 수 있다.
[root@server /home]# ls -l
drwx------ 4 com01 com01 4096 7월 7 16:18 com01/
drwx------ 4 http http 4096 7월 7 10:14 http/
drwx------ 3 test01 test01 4096 7월 7 12:22 test01/
drwx------ 4 test03 test03 4096 7월 7 10:15 test03/
|
• deluser
계정을 삭제하는 명령어이다.
[root@server /home]# ls
com01/ http/ net21/ test01/ test03/
[root@server /home]# userdel com01
[root@server /home]# ls -a
./ ../ com01/ http/ net21/ test01/ test03/
[root@server /home]#
|
내용을 확인하면 userdel 명령어를 통하여 com01을 계정을 지워도 com01의 디렉토리는 삭제 되지않는다. userdel 명령어로 계정을 지우고 rm 명령어를 통하여 지운계정의 디렉토리를 삭제하면 된다. 계정을 만들면 /etc/passwd, /etc/shadow, /etc/group 안에 자동적으로 비밀번호등과 같은 암호코드가 생성되며 계정을 지우면 암호코드만 삭제되고 계정디렉토리는 삭제되지 않는다.
단, userdel -r 명령어를 통하면 계정 디렉토리까지 삭제된다.
제 3 장 Linux Server 보호하기
이번장은 Linux Server를 보호하기 위한 여러 가지 방법을 알아본다.
1. iptables를 통한 Server 보호
2. TCP Wrapper를 통한 Server 보호
3. log 파일 분석하기
|
기본개념 : 인터넷에서 제공되는 대표적인 서비스들은 각각 자신들의 고유한 port 번호들을 가지고 있는데, 예를 들어, telnet 접속은 23번, ftp 접속은 21번, 가장 대표적인 web의 경우 80번 port를 사용하여 서비스를 한다. 이처럼 서비스별로 port 번호가 다르기때문에, 하나의 ip주소만 가지고도, 여러가지 인터넷서비스들을 동시에 운영할 수 있게된다.
일단 서버측에서 열어놓은 port들은 특별한 제한이 없는이상, 외부의 어떠한 요청에도 응답을 하며, 접속을 허락한다.
클라이언트에서 서버로 오는 모든 요청들은 출발지(클라이언트)의 IP주소와 port번호, 그리고 목적지(서버)의 IP주소와 port번호에 대한 정보를 가지고있다. 이 정보를 사용하면, 특정주소로 부터 오는 요청이나, 특정 서비스로 향하는 요청들을 구별할 수 있어, 해당 요청을 허락 또는, 거부할수 있다. 이런 역활을 해주는 것이 방화벽(Firewall)이다.
1. iptables
iptables -A INPUT -p tcp --dport 23 -j DROP
|
이 예는 외부에서 들어오는 모든 텔넷접속을 거부한다는 의미이며, 이 명령이 실행됨으로서 하나의 ruleset이 만들어지는 것이다.
-A(add) : INPUT, OUTPUT, FORWARD 등의 사슬(chain)을 을 사용할 수 있으며, 들어오거나 나가는 트래픽중 어느것을 필터링(filtering)할 것인가를 지정한다.
-p(protocol) : 어떤종류의 protocol에 대해 검사할것인가를 결정. 대표적으로 tcp,udp 등을 사용한다.
-sport(source port) : source port 를 나타낸다
-dport(destination port) : destination port 로 트래픽이 향하는곳의 주소이다.
-j : jump 앞에서 기술한 규칙에 걸려든 트래픽에 대해서 어떻게 조치를 할지 결정한다. '-j'다음에 올수있는 명령들은 DROP, REJECT, ACCEPT등이 있
iptables는 커널 2.4로 올라가면서 새롭게 나타난 것이다. 이 것은 기존의 ipchains를 교체 한 것이다. 여기에서는 간단히 외부에서 들어오는 것을 필터링 하는 것으로 설정하는 방법을 모색한다.
iptables는 테이블 형식으로 관리를 한다. 그리고 먼저 등록 된것이 효력을 발생하기때문에 등록을 하는 순서가 중요하다. 모든 것을 거부하는 설정이 먼저오게 되면 드 이후에 포트를 열어주는 설정이 와도 효과가 없다. 그러므로 허용하는 정책이 먼저오고 나서 거부하는 정책이 와야한다.
예) iptables -A INPUT -p tcp --dport 22:30 -j DROP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
이 경우에는 먼저 22번부터 30번까지의 포트를 목적지로 하는 패킷이 들어오면 무시하라는 줄이 먼저 들어 있다. 그리고 다음에 25번 포트를 열라는 명령이 있다. 그러나 이 명령은 먼저온 거부 메시지때문에 패킷이 이미 거부된 상태이어서 효력이 없다. 따라서 이 경우는 잘못 설정한 것으로 볼 수가 있다. 그러므로 제대로 설정을 하려면 이렇게 바꾸어야한다.
예) iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 22:30 -j DROP
이렇게 하면 먼저 25번 포트로 들어오는 것을 허용하고 난후에 다른 것을 막아내기 때문에 제대로 된 설정이 된다.
(예시)
# ssh 열기
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# httpd 열기
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# pop3 열기
iptables -A INPUT -p tcp --dport 109 -j ACCEPT
# pop2 열기
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# mysqld 열기
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# ftpd 열기
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# ftp-data 열기
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# 전부 거절하기
iptables -A INPUT -p tcp --dport 1:30000 -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
이 것은 허용하는 서비스가 한정적이다. 우선 ssh, http, pop3, pop2, imap, mysql, ftp,를 위해서 서비스를 요청하는 패킷은 허용하고 나머지는 전부 거부하는 설정이다. 이 설정을 자세히 보면 tcp와 icmp를 대상으로 하였다. icmp는 그 중에서 ping을 막은 것이다. 특히 echo-request만을 막아서 핑 요청은 거부하지만 서버에서의 핑테스트는 가능하다. 또한 거절하는 줄인
iptables -A INPUT -p tcp --dport 1:30000 -j DROP
이 라인에서 --dport 다음에 1:30000으로 지정되어 있다. 이 부분은 서버를 경유하여서 다른 곳으로 가고자하는 경우에 클라이언트 프로그램이 사용할 포트를 남겨주기 위함이다. 1번포트에서 30000번 포트까지는 완전히 tcp에 대헤서 막는 것이다. 알려진 포트는 1024이나 해킹 프로그램붕에서 그이후를 사용하여서 소켓을 여는 경우를 방지하기 위함이다. 만약에 서버에서 나갈 이유가 없으면 전부 막으면 된다. 1:65535로 설정하면 전체 포트가 막힌다.
2. TCP Wrapper
TCP접속은 인터넷에 있어 기본이다. 이 기본적인 connection은 인터넷상의 어느 누가 접속요청을 하건 무조건 그 접속을 받아들인다. 그래서 많이 알려진 TCP접속에 대해 Wrap을 씌워서 리눅스박스로 접근하는 불청객들의 접속요청을 거부하게 하는것이 TCP Wrapper가 하는일이다.
Tcp Wrapper는 ip address로 접속제한을 하는 방식이다. 허가된 ip address로부터 오는 요청은 받아들이고, 허가되지 않은 ip address로부터의 접속요청은 거부한다.
리눅스상에 데몬(Daemon)(항시 메모리에 상주해있는 프로세스)으로 올라오지 않는 서비스들은 inet 에 의해서 외부에서 접속요청이 있을때만, 메모리에 올라가게 되어있는데, xinet 데몬에 의해 메모리에 해당서비스가 올라가기전에, tcp wrapper가 해당 접속을 받아들일것인지, 미리 설정된 리스트를 참조해 판단하게 된다.
/etc/xinetd.d/ 화일의 일부이다. (linux 7.x)
[root@server xinetd.d]# pwd
/etc/xinetd.d
[root@server xinetd.d]# ls -a
. chargen daytime echo finger rexec rsh talk time
.. chargen-udp daytime-udp echo-udp ntalk rlogin rsync telnet time-udp
|
/etc/xinetd.d 디렉토리에는 위와 같은 파일들이 존재 한다.
위의 존재하는 파일을 편집기로 열어보면 다음과 같다.
[root@server xinetd.d]# cat telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
|
위의 내용은 telnet service가 disable = no로 설정되어있다. 즉 telnet service를 허용한다는 의미임
1. /etc/hosts.deny
이 화일에 적힌 ip는 모두 접속이 거부된다.
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
in.telnetd: ALL -- telnet으로 들어오는 모든 요청을 거부.
in.ftpd: ALL -- ftp로 들어오는 모든 요청을 거부
ALL: 203.235.27.98 -- 모든 서비스에 대해 203.235.27.98만 거부
ALL: ALL -- 모든 서비스에 대해 모든 ip 거부
|
제한이 필요한 inet 서비스명 : ip address 또는 ALL
허가(allow), 거부(deny)에 대한 정책은 일반적으로, All Deny & allow 정책을 사용하면 된다.
즉, 위의 내용과같이, 특별한 경우가 아니면, hosts.deny화일엔 ' 서비스명:ALL' 형식으로 적어주어, 일단 모든 접속을 거부한뒤, hosts.allow 화일에서 허가할 ip 주소를 명시해 주면 된다.
2. /etc/hosts.allow
hosts.deny와 같은 형식으로 접속을 허가할 ip address들을 적어준다.
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
in.telnetd : 210.110.35.10
in.ftpd: 210.110.35.11
ALL: 210.110.35.12 \
172.31.0 \
172.32.0 \
:rfc931: ALLOW
|
hosts.deny 화일과 연결해서 해석해보면, '기본적으로 telnet접속에 대해선 모든 접속을 거부(deny)하고, 210.110.35.10 에 대해서만 허가한다.' 라는 의미가 된다.
마지막 라인은 '210.110.35.12 에 대해서는 모든 서비스에 대한 접속을 허가한다.' 라는 의미이다.
3. log File
로그란 운영체제나 애플리케이션이 발생하는 이벤트를 나중에 조사하기 위한 기록으로서 아래와 같은 내용들을 알 수 있다. 잘못된 행동을 기록하여 범죄가 일어났음을 확인 할 수 있는 유일한 증거가 된다.
로그 파일은 /var/log 디렉토리에 생성되며 주기적으로 logrotate 라는 명령에 의해 자동으로 보관된다.
• secure
각종 서비스의 접속, 해제 등이 저장된다.
/var/log/vi secure
May 29 00:56:13 server in.ftpd[14137]: refused connect from 193.251.75.171
May 29 03:20:26 server in.ftpd[14334]: refused connect from 211.204.58.183
May 30 03:59:35 server in.ftpd[16380]: refused connect from 61.170.136.172
May 31 21:32:36 server in.telnetd[19942]: refused connect from 192.168.1.16
Jul 6 19:09:53 server in.ftpd[3852]: connect from 192.168.0.111
Jul 7 10:08:47 server in.telnetd[787]: connect from 192.168.0.111
|
TCP Wrapper, ipchains의 설정에 의해 차단된 ip와 Server에 접속한 내부 ip를 볼수있다.
• boot.log
부팅할 때 커널 메시지 등이 저장된다.
• cron
작업, 일정 관리 데몬이 cron에 에러 메시지, 작업 행동 등을 저장한다.
• dmesg
dmesg 명령에 의해 보여질 내용이다. 부팅할 때 내용의 일부분과 에러 및 경고사항이 들어간다.
• maillog
메일과 관계된 로그이다. SMTP인 sendmail이 이용한다.
• messages
시스템 에러, 하드웨어 에러 등 시스템 관련 로그.
수상한 사용자의 su 시도 흔적이나, syslogd나 named 등 주요 서버들의 reboot 흔적들이 남는다.
• spooler
프린터 등의 스풀, 해제 등이 저장된다.
• utmp
현재 유저의 현황 등이 저장된다. 바이너리 형태로 저장되어 있다.
로그의 저장 위치 - /var/run/utmp( RedHat )
• Wtmp
로그인(login)이나 reboot와 관련된 정보를 담고 있다. 바이너리 형태로 저장되어 있다.
로그의 저장 위치 - /var/log/wtmplast 명령에 의해 볼 수 있음.
• Xferlog
ftp 파일 전송에 관련된 로그 기록
로그 저장 위치 - /var/log/xferlog
Sat Jul 7 18:50:53 2001 1 192.168.0.111 9427 /home/com01/brndlog.txt b _ i r com01 ftp 0 * c
|
위의 내용은 192.168.0.111의 ip를 통해서 com01이라는 계정으로 ftp로 접속하여 brndlog.txt 파일을 전송했다는 내용이다. 전송안 날짜는 7월7일 6시50이다.
각종 로그파일은 불법적인 접속은 없는지 파악할 수 있는 근거가 된다.
제 4 장 기타 시스템 파악하기
• CPU : arch 명령을 써서 CPU 타입을 알 수 있다.
# arch
i686
|
• 메모리 : 메모리의 양, 사용중인 양, 여분, 용도 등은 free 명령을 통해서 알 수 있다
free
total used free shared buffers cached
Mem: 30612 28892 1720 12220 11136 9652
-/+ buffers/cache: 8104 22508
Swap: 84636 2924 81712
|
• 디스크 여유분
# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda5 1981000 434831 1443757 23% /
/dev/hda1 23300 2565 19532 12% /boot
|
• 시스템 정보
간단히 시스템에 대한 정보를 알고 싶으면 'uname'이라는 명령어를 사용하면 된다. uname 이 출력할 수 있는 모든 정보를 보기 위해서는 ‘-a'옵션을 사용하면 된다.
# uname -a
Linux grifin.linuxkorea.co.kr 2.2.5-15 #1 Mon Apr 19 22:21:09 EDT 1999 i686 unknown
|
• 하드웨어 사양 정보
CPU에 대한 정보를 가지고 있는 화일이다.
# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
model name : Pentium III (Coppermine)
cpu MHz : 933.391
cache size : 256 KB
|
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.