[Linux] 외부접속허용하기

Server 2014. 4. 3. 16:40 Posted by ditus


외부로부터의 접근 허용 설정

Q. telnet, ssh, ftp 등의 설정을 마친 뒤 외부로부터 접속을 시도하면, 접속이 되지 않습니다. 다른 리눅스에서는 같은 방식으로 설정하면 접속이 되었었는데 한소프트 리눅스에서는 접속이 되지 않습니다.

A. 한소프트 리눅스는 보안 강화에 중점을 두고 개발한 리눅스 운영체제입니다.
그렇기에 강력한 보안 설정이 되어 있으며 외부로부터의 접속을 허용하기 위해서는 별도의 설정을 진행해야 합니다.

한소프트 리눅스 2005 워크스테이션 제품은 개인용 및 업무용 운영체제로 외부로부터의 접근은 모두 차단되는 것이 바람직합니다.
그러나 별도의 네트워크 서비스를 구축하여 운영하고자 하는 경우에는 아래와 같이 몇 가지 사항을 수정하여 사용하시면 되겠습니다.

1. 호스트 접근 차단 (deny)
/etc/hosts.deny 파일에서 기본적인 접근을 모두 차단하고 있습니다.
그러므로, 해당 파일을 열어 아래와 같이 주석처리 하면, 외부로부터의 접근이 모두 허용되는 상태(다른 리눅스 OS의 초기상태와 동일)가 됩니다.
이 상태로는 외부로 부터의 모든 접근을 허용하는 상태가 되므로, 이 후 각각의 서비스 별로 접속 관련 설정을 따로 하셔야 합니다.
(한소프트 리눅스에서는 보안상 권장하지는 않는 방식입니다.)
모든 외부 접근을 차단 (hosts.deny)
[root@localhost ~]# vi /etc/hosts.deny
#
# 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!
ALL: ALL
위 예제의 “ALL: ALL" 앞 부분을 주석처리(#)하여 모든 접근을 허용할 수 있습니다.

2. 호스트 접근 허용 (allow)
hosts.deny에서 모든 접근을 차단하도록 설정되어 있는 상태에서 원하는 호스트로부터의 접근만 허용하는 방법이 있습니다.
/etc/hosts.allow 파일에서 특정 호스트의 접속을 허용하는 것으로 아래와 같은 방식으로 설정할 수 있습니다.
필요한 외부 접근을 허용 (hosts.allow)
[root@localhost ~]# vi /etc/hosts.allow
#
# 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.
#
ALL: 192.168.179.
ALL: 211.233.211.233
ALL: 192.168.111. EXCEPT 192.168.111.203
ALL: .haansoft.com EXCEPT hacking.haansoft.com
위에서는 4가지의 사용방법에 대한 예제이며, 각 예제에 대한 설명은 아래와 같습니다.
ALL: 192.168.179.
==> 192.168.179.xx IP 대역으로 부터의 접근을 허용합니다. (256개 IP)
ALL: 211.233.211.233
==> 211.233.211.233 IP로부터의 접근을 허용합니다. (1개 IP)
ALL: 192.168.111. EXCEPT 192.168.111.203
==> 192.168.111.xx IP대역으로 부터의 접근을 허용하지만,
192.168.111.203 IP는 여기서 제외 됩니다.
ALL: .haansoft.com EXCEPT hacking.haansoft.com
==> xxx.haansoft.com 대역 호스트로 부터의 접근을 허용하지만,
hacking.haansoft.com 호스트는 여기서 제외 됩니다.

위와 같이 호스트의 접근 설정을 변경한 후에는 반드시 아래와 같은 명령으로 관련 서비스를 재시작 해야 합니다.
# service network restart
# /etc/init.d/xinetd restart


3. ssh 서비스의 root 접근 허용
ssh는 암호화된 telnet 서비스를 제공해주는 프로그램으로 현재 매우 사용률이 높은 원격접속 프로그램입니다.
원격 서버에 접속하여 작업하는 모든 내용을 암호화하여 전달하기 때문에 보안성이 높다고 할 수 있겠으나, 시스템의 모든 권한을 가지고 있는 root 관리자로의 접속은 권장하는 방식이 아닙니다. 그러므로 보통 일반계정으로 접속을 한 이후에 root 계정으로 변경하여 사용하는 방식을 사용하게 되지만, 꼭 root 접속을 해야 하는 경우에는 아래와 같이 /etc/ssh/sshd_config 파일의 설정을 변경하여 사용할 수 있습니다.

# vi /etc/ssh/sshd_config
....
# Logging
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
....
"PermitRootLogin" 부분이 "no"로 되어 있다면, 위와 같이 “yes"로 변경합니다.
그리고 관련 서비스를 재시작 합니다.
# /etc/init.d/sshd restart


[ Apache ] 아파치 백업 및 삭제

Server 2011. 7. 27. 16:40 Posted by ditus

윈도우 아파치 로그삭제

*************************************
* Apache Log Rotate (Window/Linux) *
*************************************

-아파치로그가 너무 많이 쌓여 있는 경우에는 시스템이 많은 부하를 받게 되므로
-아파치로그가 일정이상 쌓이면 자동으로 로그를 잘라서 따로 저장할 수 있도록 하는 방법이다.

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

1. Windows용 apache log rotate
--------------------------------------------------------------------------------------

버전이 2.0이상인 윈도우용 아파치에서는 로그 순환이 가능하다.

아파치가 설치된 폴더의 bin 폴더안에 rotatelogs.exe 파일이 있는지 확인해본다.
(있다면 log rotate 가능)

아래의 구문을 httpd.conf의 access.log 설정 부분 근처에 추가해 준다.

TransferLog "|C:/apache2group/apache2/bin/rotatelogs.exe c:/apache2group/apache2/logs/access.log 10M"

*주의: 윈도우에서는 경로 지정시 \를 사용하더라도 httpd.conf에서는 /를 사용해야 한다.

|C:/apache2group/apache2/bin/rotatelogs.exe는 rotatelogs.exe의 경로를 지정해준 것이며,

c:/apache2group/apache2/logs/access.log 10M는 분석할 로그파일이 c:/apache2group/apache2/logs/access.log이며,

로그파일의 크기가 10M이상이 되면 rotate가 되도록 설정하는 것이다.
==============================================================

 

==============================================================
2. Linux용 apache log rotate
--------------------------------------------------------------------------------------

먼저 apache/bin/rotatelogs 이 존재하는지 확인한다.

아래의 구문을 httpd.conf의 access.log 설정 부분 근처에 추가해 준다.

CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common

윈도우용 아파치와는 달리 파일사이즈가 아닌 시간을 기준으로 설정한다.(초단위)
============================================================== 
 

[ Linux ] SCP 사용법

Server 2011. 7. 12. 16:17 Posted by ditus
scp는 원격에서 로컬로 로컬에서 원격으로 파일을 복사 할때 유용합니다. scp는 ssh를 이용 안전한게 파일을 주고 받는다.

scp - secure copy (remote file copy program)

로컬로 파일 다운받을때
원격서버(192.168.1.100)의 /tmp/test.txt파일을 root계정을 이용해서 다운 받습니다.
포트가 22가 아닐경우 -P 22 포트번호를 변경하세요
$ scp -P 22 root@192.168.1.100:/tmp/test.txt ./

업로드 할경우 반대로
$ scp -P 22 ./test.txt root@192.168.1.100:/tmp

윈도우에서 사용할경우 winscp를 이용하세요.

비밀번호를 일일이 입력하기 싫타면 이곳을 참고하세요

.htaccess의 예

php_flag register_globals on
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^(www)\.domain\.co\.kr$ [NC]
RewriteRule (.*) http://www.domain.co.kr/$1 [R=301,L]
ErrorDocument 401 http://www.domain.co.kr/401error.html


간단하게 요정도?
난 RewriteCond와 RewriteRule에 대해서만 언급해보려한다.
RewriteEngine On은 Rewrite모듈의 사용을 위해 기본적으로 On으로 설정해두는것이 좋다.
RewriteBase는 기본적으로 .htaccess가 위치안 물리적 경로로 설정하지만 Rewrite의 쓰임이 너무 광범위하기에 다르게 쓰이는 경우도 많다.
그 외에 RewriteOptions, RewriteLog, RewriteLogLevel, RewriteLock, RewriteMap등은 심화과정이므로 취급하지 않습니다 ^^;;

이 글은 완벽하지 않다. 잘쓴 글도 아니고 잘 되어있는 글도 아니다.
하지만 당신이 컴퓨터에 대한 열정이 있고 그만큼의 노력이 있었으며 독학에 재능이 있다면 이정도의 글로도 만족할것이라 믿는다. (쓸데없는 잡담이 너무 많은거 뺴고... ㅡㅡ;;)

이제 본론으로 고고-


Rewrite모듈은 URL Rewrite 엔진일까?

RewriteCond와 RewriteRule의 기본 형태
RewriteCond와 RewriteRule의 기본 형태는 이렇다.
RewriteCond     TestString     CondPattern
RewriteRule     Pattern     Substitution

RewriteCond는 RewriteRule을 위해 존재하기도 하지만 RewriteRule은 RewriteCond를 위해 존재하기도 한다.
하지만 순서는 거의 대부분 Cond후에 Rule이 온다.
Cond는 생략하고 Rule만 있는경우도 많다.
기본형태는 이러하지만 RewriteCond만 있을수도 있고 RewriteRule만 있을수도 있으며 둘다 여러개일수도 있고 둘중 하나만 여러개일수도 있다. 순서도 맘대로라서 엄청나게 다양한 수법이 가능하다 ㅋ

처리 경로(흐름)
제일 먼저 Rule의 Pattern에 어긋나지 않는다면 Cond의 TestString으로 가서 조건검사를 시작한다. 그후 CondPattern을 지나 Substitution으로 처리되어 조건에 만족하게 된다.

다음을 보자

...
RewriteRule     Pattern     Substitution

RewriteCond     TestString     CondPattern
RewriteRule     Pattern     Substitution

RewriteRule     Pattern     Substitution
...

위의 경우 Cond와 Rule이 막 써있다 ㅋ 두개 이상의 Rule이 있을경우 위  Rule이 처리, 적용된 결과가 다시 두번째 Rule에 적용된다. 또 아래 Rule이 있다면 그 결과가 다시 검사될것이다.
혹은. 위의 조건에 맞지 않는 값이라면 다음 Rule로 넘긴다.


이하부터는 패턴, 대용(대체), 조건패턴등의 한글화를 섞어 쓰겠다.
Cond는 조건의 약자이고 Rule은 그대로 규칙, 법이다.

특수 문자
프 로그래밍을 하면서 그 프로그램 내부 코드나 명령어로 쓰이고 있어서 쓰지 못하는 문자가 많다. 여기서도 마찬가지이다. 하지만 어디서나 존재하는 Escape문자 있으니 여기서는 "\"(역슬래쉬(원))표시가 쓰인다. 보통 .이 잘못쓰일것을 대비하여 \.로 쓰는게 보통이다.
예 : domain.co.kr   ==>   domain\.co\.kr
주로 점.이나 대괄호[], 괄호()등에 쓰인다.

RewriteCond
RewriteCond의 기본 구문은 이미 위에서도 나왔다.
그곳 Test스트링부분에 $N이나 %N이 쓰인다면 역참조 기능을 제공하게된다.
여기서 N은 (1<=N<=9)이다.
$N의 경우 현재 처리되고있는 Rule에서 가르키고 있는 패턴이 그룹으로 묶여 제공된다.
$N을 하나의 변수처럼 사용할수 있게되는것이다.
아래도 나와있지만 괄호로 그룹을 묶은 부분이 변수로 사용된다.

RewriteCond   %{HTTP_HOST}             ^[^.]+\.domain\.co\.kr$
RewriteRule   ^(.+)                     %{HTTP_HOST}$1 [C]
RewriteRule   ^([^.]+)\.domain\.co\.kr(.*)   /home/$1/htdocs$2

위 예제의 경우 도메인 앞의 URI를 $1로 그 뒤 경로를 $2로 지정하여 특정 디렉토리의 내용을 읽도록 하는 내용이다.
이것을 짧게 한줄로 고쳐보자면

RewriteRule ^([^.]+)\.domain\.co\.kr(.*) /home/$1/htdocs$2

요정도?

%N은 현재 처리중인 Cond에서 가르키고있는 조건과 일치한 패턴이 그룹으로 묶여 제공된다.
이건 잘 안쓰이는것같아서 정말 잘쓰이는 다음으로 패쓰~

%{Name}의 경우 해당 서버의 변수를 가지고 올수있다.
변수의 개수는 정말 엄청나게 많다. 하지만 자주 쓰이는 변수들은 아래를 통해서 한번 확인해보세요 ^^

Server Name : domain.com
Protocol : HTTP/1.1
Server Port : 80
Method : GET
Servlet Path : /index.php
Remote Host : 192.168.0.4
Remote Port : -1
Remote Address : 192.168.0.4
Content Length : 0
Header_Accept : text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Header_User-Agent : Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
Header_Referer : null
Local Name : domain.com
Local Port : 80
Locale : ko_KR
Scheme : http
Request URI : /index.php

Request URL : http://domain.com/index.php


CondPattern
CondPattern에서 쓰이는 내부 명령어? 특수명령어?등을 알아보도록하자

-d     =>     디렉토리를 뜻한다.
결론적으로 Test스트링이 디렉토리를 가리키거나 포함하고 있을때 처리된다.
-f     =>     파일을 뜻한다.
Test스트링이 파일을 가리키거나 포함하고 있을때 처리된다.
-l     =>     심볼릭링크를 뜻한다.
Test스트링이 심볼릭링크를 가리키거나 포함하고 있을때 처리된다.
심볼릭 링크가 뭐냐고 물으신다면 리눅스나 유닉스를 공부해보세요 ^^ 라고 답하고 싶다^^

그리고 느낌표(!)는 부정을 뜻한다.

 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://test.domain.co.kr/$1

위의 예제는 Request내용이 디렉토리나 파일을 가르키고 있지 않을경우 저쪽 사이트로 돌리라는 뜻. ^^
$1로 하위주소는 유지하려하고 있습니다 ^^

[Flag]
라인마다 Flag라 불리우는 깃발을 달수가 있습니다. 일종의 옵션으로 작용합니다 ^^

F     =>     403에러 Forbidden페이지로 된다.
L     =>     Last라는 뜻입니다. 위의 Cond들은 여기까지만 적용된다
아래부터는 새로 시작 되겠지용~
N     =>     새로운 Rule이 시작된다는 깃발.
QSA     =>     Cond의 대용을 지난 결과에 덧붙인다.
NE     =>     Out될 값에 특수문자가 HexCode로 되어 포함되어있는경우
R     =>     리다이렉션. 무조건 넘긴다. 뒤 주소로 넘긴다는 뜻이지요 ^^
NC     =>     대소문자 구별없다는 뜻.
OR     =>     프로그래밍의 or와 비슷하다.


아래를 참고하시죠 ^^

RewriteCond %{REMOTE_HOST}  ^domain.*  [OR]
RewriteCond %{REMOTE_HOST}  ^DOMAIN.*  [OR]
RewriteCond %{REMOTE_HOST}  ^DOMAIN2.* [NC]
RewriteRule ^(.*)$ http://www.domain.co.kr/$1 [R,L]

domain나 DOMAIN나 DOMAIN2나 domain2로부터 접속한 접속에 대하여 리다이렉트한다. http://www.domain.co.kr/로 접속하게된다. 보통 IP주소를 적게되겠다.

RewriteRule
여기부터는 아주 간단간단하게... ㅡㅡ;

텍스트

.     =>     ?과 같습니다. 무엇이든 하나의 문자를 뜻합니다. A가 될수도 있고 Z가 될수 있다. 반드시 한글자.
[A]     =>     역시 하나의 문자가 올수 있다는 뜻. ex) a[eo]t => aot 혹은 aet
[^A]     =>     문자는 올수 없다는 뜻~ A부터 Z까지~



 

?     =>     0개 또는 1개의 텍스트.
*     =>     0개 또는 1개 이상의 텍스트.
+     =>     1개 이상의 텍스트. 0은 될수 없다.



그룹

(텍스트)     =>     위의 텍스트에 속한 세가지를 조합하여 쓸수 있다
예로 (..)는 두글자라는 거지요 ^^
몇번째 그룹이냐에 따라서 위에 설명한 $N의 변수로 불러 쓸수있니다.



Anchors

^     =>     줄의 시작을 나타낸다 ex) ^a => a로 시작
$     =>     줄의 끝을 말한다. ㄷㅌ) a$ => a로 끝



윈도우 xampp 설치 및 가상 호스트 사용!

Server 2010. 12. 1. 11:24 Posted by ditus
우리나라의 APM처럼 apache + php + mysql + 관리툴 을 모아둔 셋업프프로그램이다.
easyEclipse에서는 깔고 연결시켜서 사용할수 있었지만 Eclipse PDT에서는 지원이 안되나 보다.
서버등의 설정을 Eclipse 내에서 할수 없어서 많이 불편하다.
하지만 기본으로 관리툴이 있으니 그냥 그런대로 쓰도록 하자.

설치법은 간단하다. 그냥 다운받아서 깔지만 하면 된다.
설치후 security에서 보안관련 사항들 체크후 처리할것은 처리해두자.


* xampp에 xdebug설치하는법은 아래 퍼나놓은 글을 참고하시라.
최근 Eclipse PDT에는 기본으로 xdebug가 깔려있지만 zend debug로 기본 설정되어있으니 xdebug를 사용하려면
Preferencese 설정에서 디버그 모드를 변경해줘야 한다. 아직 어떻게 사용하는지.. 뭐가 좋은지도 잘 모른다. ㅎㅎ
다만 apache에서 xdebug모드를 사용하면 뭐 좀 자세하게 나올듯 하여 블로그 글을 퍼다 놓았다.

xampp를 설치하고 나서 일반적으로 apm툴을 깔고서 하나의 개발사이트만 localhost에 띄워서 사용들을 한다.
하지만 여러 사이트를 관리하고 개발에 참여하다보면 매번 http.conf파일의 설정값을 변경해서 사용하기 귀찮다.
물론 서버딴에서 작업을 하면 편하지만.. 노트북을 들고다니며 로컬딴에서 작업을 해야 할 경우가 있어서
방법을 강구해 보았다.

1.121.0.0.1 을 localhost라는 주소로 alise해주는 파일을 찾아보자.
C:\WINDOWS\system32\drivers\etc\hosts 라는 파일이다.
메모장등을 이용하여 열고서
121.0.0.1 사이트명 형식으로 한줄 추가해주자.
127.0.0.1       localhost
127.0.0.1       devporiter

http://사이트명 치면 로컬아이피를 참고하게 된다.

2.xampp\apache\conf\httpd.conf 파일 추가
//public_html폴더로 끝나는 폴더의 접근권한을 설정해준다.
<Directory "D:/work/*/public_html">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

3.xampp\apache\conf\extra\httpd-vhosts.conf 파일에서
//주석을 풀어준다
NameVirtualHost *:80


//가상호스들을 추가해준다.
<VirtualHost *:80>
    DocumentRoot "D:/xampp/htdocs"
    ServerName localhost
    ServerAlias localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "D:/work/devporiter/public_html"
    ServerName devporiter
    ServerAlias devporiter
</VirtualHost>

4. http://localhost 시에 xampp의 로컬페이지가 뜨는지 확인해보자

5. http://사이트명 시에 페이지가 정상적으로 뜨는지 확인해보자

출처 : http://www.welog.net/gbbs/bbs/board.php?bo_table=php&wr_id=111