불현듯 메일 한통 도착.
다짜고짜 소프트웨어 기술자 기술등급 폐지라고 한다.

이건 대체 뭔가? 그간 돈 받아가며, 시간 들여가며 기껏 등록하라고 해놓고는 이젠 폐지라고?

내용은 좀 다르다. 요약 하자면,
신고와 발급등은 유효하며 신고서류들과 절차들의 간소화, 축소된 절차들로 인한 비용 인하, 미확인된 경력도 표기하여 발주자가 판단토록 함. 등등..

예전부터 느끼지만 유명무실한 제도가 아닌가 싶다.
인정 해주는 자격증이라곤 국내 자격증밖에 없으며, 프로젝트에 대한 인정을 받기도 굉장히 까다롭다.
이전에 다니던 회사들이 폐사한 경우는 참으로 난감한 일이다. 경력을 인정받기도.. 프로젝트에 대한 확인도 어렵다.

단순히 경력증명서를 떼기 위해서는 상당히 많은 발품을 팔아야만 했던 사람들이 많았던 것도.
과연 이 제도의 등급으로 기술자들의 경력을 기업 인사담당자가 판단할 것이라고 생각했던 것일까?
아니면 단순히 세금을 조금 더 걷어보자 했던 것일까?

이처럼 헛점 투성이가 아닌 제대로 개편되어 많은 개발자, 기술자들과 기업에 보탬이 되는 그런 제도로 개편 되었으면 좋겠다..

apache는 참 심플한데, tomcat은 까다롭다..

설정하는 것도, 튜닝하는 것도 여러가지 손 봐줘야할 것들이 참 많다.

 

java와 php를 함께 사용 하기 위해서는 apache + tomcat 연동해서 사용 하는 방법이 가장 많이 사용 되며, 일반적인 방법이다.

또 한가지 방법은 php-java-bridge를 설치해서 연동 해주는 방법이 존재한다.

(헌데 이 방법은 시도 해보다가 실패하여 시간이 없는 관계로 다음 포스팅에 대체 하도록 할 예정.)

 

하고자 했던 작업은 이렇다 단독톰캣 사용 하다가 php를 사용해야 했고,

몇몇개의 서브도메인이 존재하며, port base의 가상호스트 설정도 필요.

(php-java-bridge 설치를 하고자 했으나 실패. 그래서 apache 연동 설정으로 변경.)

 

 

apache 설치과정 생략.

tomcat path : /usr/local/tomcat

apache path : /usr/local/apache2

php path : /usr/local/php

 

– tomcat 단독 구성 되어 있었기 때문에 80 port 사용 => 8080 port 변경

vi /usr/local/tomcat/conf/server.xml

#=== 중략 ====

<Connector port=”8080” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<!– A “Connector” using the shared thread pool–>
<!–
<Connector executor=”tomcatThreadPool”
port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />

 

* 반대로 위 커넥터 부분의 port를 Default 상태인 8080 => 80으로 변경하여 단독 톰켓 구성이 가능하다.

 

apache workers.properties 설정

– 80 외에 8009, 9099 port 와 같이 두개의 포트 추가 사용을 위해 세개의 worker.list 추가

vi /usr/local/apache2/conf/workers.properties

 

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java/
ps=/
worker.list=rubi1,rubi2,rubi3

worker.rubi1.port=8009
worker.rubi1.host=localhost
worker.rubi1.type=ajp13
worker.rubi1.lbfactor=1

worker.rubi2.port=8010
worker.rubi2.host=localhost
worker.rubi2.type=ajp13
worker.rubi2.lbfactor=1

worker.rubi3.port=8011
worker.rubi3.host=localhost
worker.rubi3.type=ajp13
worker.rubi3.lbfactor=1

 

apache 가상호스트 설정 (아파치 기본 설정 생략)

– vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

 

NameVirtualHost *:80

NameVirtualHost *:8001
NameVirtualHost *:9099

 

<VirtualHost *:80>
ServerAdmin admin@rubi.kr
DocumentRoot “/home/rubi/public_html
ServerName rubi.kr
ServerAlias www.rubi.kr
ErrorLog “logs/www.rubi.kr-error_log”
CustomLog “logs/www.rubi.kr-access_log” common
JkMount /*.jsp rubi1
JkMount /*.do rubi1

JkMount /servlet/* rubi1
</VirtualHost>

<VirtualHost *:8001>
ServerAdmin admin@rubi.kr

DocumentRoot “/home/rubi/www2
ServerName rubi.kr
ServerAlias www.rubi.kr
ErrorLog “logs/8001-error_log”
CustomLog “logs/8001-access_log” common
JkMount /*.jsp rubi2
JkMount /*.do rubi2
JkMount /servlet/* rubi2
</VirtualHost>

<VirtualHost *:9099>
ServerAdmin admin@rubi.kr
DocumentRoot “/home/rubi/www3
ServerName rubi.kr
ServerAlias www.rubi.kr
ErrorLog “logs/9099-error_log”
CustomLog “logs/9099-access_log” common
JkMount /*.jsp rubi3
JkMount /*.do rubi3
JkMount /servlet/* rubi3
</VirtualHost>

 

 

– tomcat 가상호스트 설정

가상호스트 추가 진행, 기본 localhost path 변경

 

vi /usr/local/tomcat/conf/server.xml

 

<Host name=”rubi.kr” appBase=”/home/rubi/public_html”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
<Alias>www.rubi.kr</Alias>

 

<!– 80port로 2차 호스트인 test.rubi.kr 가상호스트 추가 –>

<Host name=”test.rubi.kr” appBase=”/home/test/www”

unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
</Host>

 

</Engine>
</Service>

 

<!– port 변경에 따른

<Service name=”Catalina2″>
<Connector port=”8002” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8010″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina2” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”rubi.kr” appBase=“/home/rubi/www2”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
</Host>
</Engine>
</Service>
<Service name=”Catalina3“>
<Connector port=”9100” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8011″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina3” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”rubi.kr” appBase=“/home/rubi/www3”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
</Host>
</Engine>
</Service>

 

 

tomcat 가상 호스트 설정시 아래 부분을 추가 해줌으로써 appbase= 지정경로 밑에 ROOT를 홈디렉토리로 인식하는 부분을 해결 할 수 있다.

<Context path=”” docBase=”” reloadable=”true”/>

 

여기까지가 설정 모두 종료.

 

http://www.rubi.kr/ 연결시 /home/rubi/public_html/ 내용 출력

http://www.rubi.kr:8001 연결시 /home/rubi/www2 출력

http://www.rubi.kr:9099 연결시 /home/rubi/www3 출력

http://test.rubi.kr 연결시 /home/test/www 출력

 

Iptables에는 다양한 모듈이 존재하는데 그 중 DDoS 공격에 효과적으로 사용 가능한 모듈들 중  hashashlimit 과 connlimit에 대한 설명입니다.

대략적인 설명이며 나중에 추가 포스팅 진행해 보고자 한다.

 

  1. 1.     Hashlimit module

–       접속하는 모든 패킷의 Source IP를 hash Code로 기억하여 리스트 생성 =>

–       접속자 IP 매칭하여 접속률 제한

  1. 2.     Connlimit module

–       Connection에 대한 제한을 IP 혹은 IP 대역별로 제한할 수 있는 기능 탑재.

 

외부 => 내부

Hashlimit .

타운 내 비즈스프링과 같이 카운터가 많다거나 특정 아이피와 세션이 많아 범위 설정 어려움. 특정 source IP로 지정하지만, 클라우드 타운의 경우 VM의 사설 아이피가 소스 IP로 되어지는 경우가 있어 적정 limit count 수치를 유추하기 어려움.

-A http_filter -m recent –update –seconds 60 –name TOO_MANY_REQUESTS -j DROP

-A http_filter -m hashlimit –hashlimit 20/s –hashlimit-burst 40 –hashlimit-mode srcip –hashlimit-name HTTP_REQ_LIMIT -j ACCEPT

-A http_filter -m recent –set –name TOO_MANY_REQUESTS -j DROP

 

 

 

 

Connlimit

–       동시 접속 개수 제한이 가능 하지만, hashlimit의 경우와 같이 다양한 서비스 형태로 서비스가 이루어지기 떄문에 NAT iptables rule에 적용하기엔 적용 범위가 다소 넓어질 것으로 생각 됩니다.  Tapacross의 경우는 평일 평균 6000개의 세션 존재

–       NAT => LB 세션 10000개 이상

아이피당 최대 n개의 동시 연결 개수 허용. 포트 지정 가능

iptables -I FORWARD -p tcp –syn –dport 80 -m connlimit –connlimit-above 5 -j DROP

 

 

내부 => 외부 트래픽 발생 (취약점으로 인한 악성 프로세스 구동)

–       내부 트래픽을 NAT에서 감지 하기 어려운 부분들이 존재

–       Linux VM 다운로드와 업로드 속도를 제한

n  Tc 명령 사용해 각 device 별 속도 제한 설정

http://www.topwebhosts.org/tools/traffic-control.php