반응형

 

  • DHCP 란?

DHCP는 동적으로 IP,NETMASK,GATEWAY,DNS와 같은 네트워크 정보를 할당해주는 프로토콜 입니다. DHCP 서버는 이에 대한 네트워크 정보를 가지고 있다가, 클라이언트로부터 요청이 오면 자신이 가지고 있는 정보를 전달해줍니다.

사실 DHCP를 사용하지 않고 정적(static)으로 설정해주어도 큰 차이가 없지만, 여러개의 클라이언트를 관리해야할 경우 유저들이 IP를 변경하거나 하면 IP 충돌 등 관리가 힘들기 때문에 좀 더 편리하도록 DHCP서버를 이용하여 동적으로 제공하고 서버에서 관리 하도록 합니다.

IT를 공부하지 않더라도 아래 이미지는 한번씩 보았을겁니다. 아래 이미지가 윈도우에서 DHCP 설정하는 예시 입니다.

 

  • DHCP의 통신 흐름

DHCP는 크게 4가지의 통신 흐름을 갖습니다. 이 4가지의 통신 흐름을 각 패킷의 앞글자만 따서 DORA 과정이라고도 합니다.

  • Discover(Client) : 클라이언트가 DHCP 서버를 찾기 위한 패킷이며 브로드캐스트로 전송하여 LAN상에 DHCP가 있는지 찾습니다.
  • Offer(Server) : 서버가 Discover 패킷을 받았으면 자신이 임대해줄 수 있는 네트워크 정보와 함께 자신의 IP를 전달 합니다.
  • Request(Client) : 클라이언트가 전달받은 네트워크 정보를 사용하겠다고 DHCP에 전달하는 패킷 입니다. Offer에서 DHCP 서버의 IP를 전달 받았으니 이번엔 브로드캐스트가 아닌, DHCP서버 에게만 패킷을 전달 합니다.
  • Ack(Server) : Request를 전달받은 DHCP가 최종적으로 승인을 내리고 네트워크 정보를 임대해줍니다.

간단히 그림으로 보자면 아래와 같으며, DHCP를 통해 어떤식으로 IP를 받아오는가에 대해 알면 됩니다. 패킷까지 까서 구경할겸 한번 들여다보고 "이런식으로 통신이 되는구나" 정도만 알면 되고, 굳이 DHCP 패킷의 구조까지 외울 필요는 없다고 생각 합니다.

 

  • 임대(Lease), 갱신(Renewal), 반환(Release)

  • 임대(Lease)

임대 과정은 위에서 말한 DORA를 통해 IP를 받는 과정 입니다. iptime의 경우 기본적으로 7200초(2시간)이 설정되어 있다고 합니다.

만약 유동 인구가 많은 카페같은곳에 임대 시간을 10시간, 20시간으로 설정해버리면 더이상 제공할 주소가 없어져버릴 수 있기 때문에 임대 시간을 적절히 설정해야 합니다.

흔히 보는 윈도우의 ipconfig /renew 가 임대 과정을 거칩니다.

 

  • 갱신(Renewal)

갱신은 말 그대로 IP 임대 시간을 갱신한다는 의미 입니다. 만약 2시간으로 설정 되어 있는데, IP를 임대받은 클라이언트가 계속 사용중이여서 2시간마다 계속 DORA 과정을 거치게 되면 불필요한 트래픽이 발생할 것 입니다.

이런 이유로 임대 시간이 모두 차기 전, 약 두번의 시도를 통해 갱신을 시도 합니다.

  1. 임대 시간의 50%가 지낫을 때 갱신을 시도 합니다. 갱신에 성공하면 설정 되어있던 임대 시간(2시간)만큼 추가적으로 할당되며, 실패 시 갱신을 보류 합니다.
  2. 임대시간의 87.5%가 지낫을 때 두번째 갱신을 시도 합니다. 갱신에 성공하면 설정 되어있던 임대 시간(2시간)만큼 추가적으로 할당되며, 실패 시 갱신이 종료 됩니다.

갱신 과정은 이미 DORA 과정에서 DHCP의 IP를 알아왔기 때문에 유니캐스트 통신을 시도하며 위에서처럼 갱신이 2번 모두 실패할 경우 아래의 반환 과정을 거칩니다.

 

  • 반환(Release)

갱신 과정에 모두 실패하여 임대 시간이 모두 지낫거나, IP 주소를 더이상 사용할 필요가 없을 때 DHCP에게 할당받았던 IP를 반환 합니다.

만약, 임대 시간이 모두 지낫는데 클라이언트와 DHCP 서버끼리 통신이 되지 않을 경우 DHCP는 그냥 반환 받은것으로 처리해버립니다.

흔히 하는 윈도우의 ipconfig /release 명령어가 반환 과정을 거칩니다.

 

반응형

'APP & Server > DHCP' 카테고리의 다른 글

[DHCP] CentOS 7.7 DHCP 서버 구축  (0) 2020.02.16
반응형

 

  • 구성 환경

이 글은 2020년 02월 11일에 릴리즈된 8.5.51 버전 및 9.0.36 버전을 대상으로 합니다. 그 이전 버전의 경우 설정 내용이 다르니 버전이 해당하시는 분들만 참고 해주세요.

  • OS : CentOS 7.7 1908
  • APP : apache-2.4.6 / tomcat-9.0.36 또는 8.5.51 / openJDK-1.8.0.242.b08-0.el7_7.x86_64 / modjk tomcat-connectors-1.2.48
  • 구성 내용 : apache 서버, tomcat 서버 물리적 망분리 후 mod_jk 연동 (SSL 사용 X)

 

  • selinux 및 firewalld 중지

이 글에선 테스트용으로 운영하기 때문에 firewalld와 selinux를 모두 중지 합니다. 실서버로 운영하실때엔 중지하지 마시고 직접 포트를 설정 해주세요. (apache 서버와 tomcat 서버 모두 중지 해주세요)

# firewalld 중지
systemctl stop firewalld
systemctl disable firewalld

# selinux 중지
setenforce 0

vi /etc/sysconfig/selinux
SELINUX=disabled

 

  • apache 서버 설치 및 설정

httpd 설치 내용

yum install httpd httpd-devel gcc gcc-c++

# tomcat-connector 설치
wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
tar zxvf tomcat-connectors-1.2.48-src.tar.gz
cd tomcat-connectors-1.2.48-src/native/
./configure --with-apxs=/bin/apxs
make
make install


## /usr/lib64/httpd/modules/mod_jk.so 파일이 존재하지 않을 경우 아래 내용 실행
cp -p mod_jk.so /usr/lib64/httpd/modules/mod_jk.so
chmod 755 /usr/lib64/httpd/modules/mod_jk.so

 

httpd.conf 파일 설정 내용

vi /etc/httpd/conf/httpd.conf

# 대충 58번 라인 근처에 아래 내용 작성
LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so

# jsp 파일에 대해서만 tomcat에 요청하도록 합니다.
# 더 필요한 내용이 있을 경우 문법에 맞춰 작성 해주세요.
<IfModule jk_module>
	JkWorkersFile /etc/httpd/conf/workers.properties
	JkLogFile /var/log/httpd/mod_jk.log
	JkLogLevel info
	JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
	JkMount /*.jsp worker1
</IfModule>

 

workers.properties 설정 내용 (worker1은 위의 IfModule 안에 JkMount 에서 설정한 이름과 같게 설정 해주세요)

 vi /etc/httpd/conf/workers.properties

worker.list=worker1

worker.worker1.type=ajp13
worker.worker1.host=[톰캣 서버의 IP]
worker.worker1.port=8009

 

완료 후 systemctl restart httpd

 

  • tomcat 서버 설치 및 설정

JDK 설치 내용

# JDK 설치
yum -y update
yum install java-1.8.0-openjdk-devel.x86_64

# JDK 환경 변수 설정
vi /etc/profile

# 맨 아래에 내용 작성
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
:wq

# 설정 내용 적용
source /etc/profile


# 1.8.0 으로 재대로 출력 되는지 확인
java -version

 

tomcat 설치 내용

# tomcat 9.0.36 설치
wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz
tar zxvf apache-tomcat-9.0.36.tar.gz
mv apache-tomcat-9.0.36 /usr/local/tomcat9


## 8.5.51 버전 설치하실분들은 아래 명령어 입력
wget http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51.tar.gz
tar zxvf apache-tomcat-8.5.51.tar.gz
mv apache-tomcat-8.5.51 /usr/local/tomcat8

 

이후 vi /usr/local/tomcat9/conf/server.xml 들어가서 아래 116~121 라인의 주석을 해제 합니다. (tomcat8 까신분들은 /usr/local/tomcat8/conf/server.xml)

 

주석을 풀었으면 아래와 같이 설정을 진행 합니다.

  • address : AJP 커넥터를 이용할 네트워크 IP 대역 허용 (0.0.0.0은 모든 IP 허용)
  • secretRequired : SSL 설정 안함

 

완료 후 /usr/local/tomcat9/bin/start.sh 입력하여 톰캣 실행 후 잘 되는지 테스트 합니다. apache 설정할 때 jsp 파일을 tomcat 서버로 지정하였다면 https://[웹서버 IP]/index.jsp 입력 후 톰캣 화면이 뜨면 재대로 연동 된 것입니다.

 

반응형
반응형

 

해당 내용은 Ghostcat(CVE-2020-1938) 취약점 패치에 의한 영향인것으로 보입니다.

Tomcat Ghostcat(CVE-2020-1938) 취약점 : https://nirsa.tistory.com/150

 

  • 구성 환경

  • OS : CentOS 7.7 1908
  • APP : apache-2.4.6 / tomcat-9.0.31 or 8.5.51 or 7.0.100 / openJDK-1.8.0.242.b08-0.el7_7.x86_64 / mod_jk tomcat-connectors-1.2.46
  • 구성 내용 : apache 서버, tomcat 서버 물리적 분리 후 mod_jk 연동 (SSL 연동 X)

 

  • 발생 원인

아래에 작성된 내용들은 apache 설정 및 selinux, F/W 등에 문제가 없을 경우에 해당 합니다.

2020년 02월 11일 톰캣에서 8.5.51 버전과 9.0.31 버전을 릴리즈하며 tomcat-apache 연동 설정을 기존대로 구성 시 연동 실패(무한로딩, 403에러 발생)가 발생 하며 AJP 기본값이 루프백 주소를 수신하도록 변경되어 수정해주지 않을 시 503 에러가 발생 합니다.

apache-tomcat 연동 시 변경된 주요 내용은 아래와 같습니다.

  • AJP Connector 기본 값 비활성화
  • AJP Connector 속성 address 추가 (기본값:루프백)
  • AJP Connector 속성 secretRequired 추가 (requiredSecret 에서 변경된걸로 보입니다)
  • AJP Connector 속성 allowedRequestAttributesPrattern 추가

 

  • 관련 자료

tomcat의 공식 커뮤니티 사이트 문서이며 원본 확인은 tomcat 공식 커뮤니티 사이트(https://tomcat.apache.org/index.html) 에서 확인 해주세요.

8.5.51 버전과 9.0.31 버전의 릴리즈 내용은 같으므로 8.5.51만 스크린샷 첨부 하겠으며, 속성에 대한 설명은 아래 링크를 참고 해주세요.

apache 8.5.51 : https://tomcat.apache.org/tomcat-8.5-doc/config/ajp.html

apache 9.0.31 : https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html

 

 

 

  • 1) 무한 로딩 해결 방법

이번에 릴리즈되면서 기본값으로 SSL을 사용하도록 설정되어있기 때문에 SSL을 사용하지 않는 환경에서는 무한 로딩이 발생 합니다.

${catalina-home}/conf/server.xml 파일의 AJP Connector 필드에 secretRequired="false" 를 입력 해주세요.

 

  • 2) 403 에러 해결 방법

secretRequired="false" 가 아닌 requiredSecret="false"를 입력했을 경우 발생할 수 있습니다. 2020년 02월 11일에 릴리즈된 8.5.51 버전과 9.0.31 버전은 secretRequired 속성으로 사용하여야 합니다.

 

  • 3) 503 에러 해결 방법

이번에 릴리즈되며 AJP가 기본값으로 루프백 주소를 사용하도록 되었습니다. address="0.0.0.0" 와 같이 네트워크 대역을 확인 후 추가 해주어야 합니다.

 

  • 최종 설정

저는 위의 1~3번을 모두 설정하여 최종적으로 무한 로딩, 403과 503 에러를 해결하고 정상적인 서비스를 확인할 수 있었습니다.

#  최종 설정 내용
    <Connector protocol="AJP/1.3"
               address="0.0.0.0"
               secretRequired="false"
               port="8009"
               redirectPort="8443" />

 

반응형
반응형

 

  • DNS Master & Salve 개념

사실 사용하는대에 있어서 깊은 이해를 필요하는 부분이 아니기 때문에 단순히 Master와 Slave는 주-보조 관계이며 DNS 서버를 이중화 시킨다고만 알고 계셔도 됩니다. (Slave를 여러대 사용할수도 있습니다)

Master-Slave는 동기화 과정을 통해 zone 파일을 관리하게 되는데, zone 파일의 SOA 필드에 있는 serial을 확인하여 이 파일이 업데이트가 되었는지 판단 합니다. serial이 증가 했을 경우 파일이 업데이트된것으로 판단하고 동기화 과정을 통해 Slave 서버로 zone 파일이 전송 됩니다.

이러한 동기화 과정을 zone transfer 라고 하는데 포트 TCP 53번이 바로 여기서 사용 됩니다. (일반 반복 쿼리 시 UDP 53번 사용)

만약, Master 서버에 장애가 발생할 경우 Slave 서버에서 서비스를 중단 없이 지속적으로 제공 합니다.

 

  • Master 서버 설정

  • 1. DNS 서버 구성을 위한 bind 패키지 설치
yum -y install bind*

 

  • 2. vi /etc/named.conf

클라이언트에서 접근할 수 있도록 설정을 진행 합니다. 

 

* /etc/named.conf 파일에 대한 내용은 아래 URL을 참고 해주세요.

[DNS] 리눅스 DNS 서버 구축 (1) : https://nirsa.tistory.com/104?category=872350

 

  • 3. vi /etc/named.rfc1912.zones

서비스할 zone 파일을 등록 합니다. 기존 등록 방식과 같으며 allow-update { [slave서버 IP]; }; 를 입력 합니다.

 

  • 4. vi /var/named/nirsa.com

서비스할 zone 파일을 생성 합니다.

cp -p named.localhost nirsa.com

 

ns1은 Master 서버로, ns2는 Slave 서버로 설정할 것 이기 때문에 각각 알맞게 IP를 넣어주세요. (ns1:Master IP  ,  ns2:Slave IP)

 

이후 DNS 서버를 시작해주시면 되고 만약 에러 발생 시 오타가 없는지 확인 해주세요.

systemctl restart named

 

*/etc/named.rfc1912.zones 와 /var/named.~ 파일에 대한 내용은 아래 URL을 참고 해주세요.

[DNS] 리눅스 DNS 서버 구축 (2) : https://nirsa.tistory.com/108?category=872350

 

  • Slave 서버 설정

Slave 서버를 설정할 때 Master 서버와 별 다를점이 없습니다. 우선 Master 서버 1~2번 항목을 그대로 따라 해주신 후 아래 내용을 따라 해주세요.

vi 편집기로 /etc/named.rfc1912.zones 를 키시고 아래와 같이 작성 해줍니다. 도메인은 똑같이 작성하되 타입은 slave로, allow-update 를 지우고 masters로 작성하여 master 서버 IP를 작성 해주세요.

systemctl restart named

DNS 서버를 실행 후 재대로 작동 하는지 ls -lh /var/named/slaves/ 를 입력하여 재대로 zone 파일을 가져 왔는지 확인 해보시면 됩니다.

 

master 서버의 /var/log/mesagges 에서도 확인하실 수 있습니다.

 

또한 정상적으로 작동하는것을 확인 하였다면 Master 서버 zone 파일의 시리얼 번호를 변경(값이 더 높도록 +1 이상) 후 named 서비스를 재기동하고 Slave 서버로 잘 넘어갔는지 다시 확인 해보시면 됩니다.

 

반응형

+ Recent posts