'웹서버'에 해당되는 글 41건

  1. 2010.09.14 Arirang - Powerful Webserver Security Scanner for Network (1)
  2. 2010.09.02 Tomcat Web Server SSL 설정
  3. 2010.06.01 Varnish VCL language 가이드 (1)
2010.09.14 16:07

Arirang - Powerful Webserver Security Scanner for Network

Arirang is powerful webserver security scanner for network.

arirang different most cgi scanners(cgichk, ucgi, whisker, malice, nikto ...)
arirang based on twwwscan. designed to network scanner.

arirang can help network administrators find security vulnerabilities, auditing and patch in their webservers. 

this program was originally written under OpenBSD 2.8 2.9 

tested on OpenBSD 2.8 2.9 ,FreeBSD 4.3,NetBSD 1.5,Linux 2.2.16 2.4.4,Solaris 2.6, Solaris 5.7 Sparc,AIX 4.3

i wrote these tools with honest intentions to audit my own webserver and network.
Please do not abuse this software.


arirang 1.90 released for *BSD, Linux, Other Unix - 2010/09/06

supported SSL -S option
supported CIDR of domain name. -h yourdomain/24 
supported count of scan hosts
fixed connect timeout
applied recv timeout of rule scan. 
fixed gcc warning.
fixed few signal in old code. 
fixed few printing style.



Trackback 1 Comment 1
  1. aa 2011.05.10 00:15 address edit & del reply

    arirang build on linux needed to add -lresolv. if not, error occurred.
    proxy.c:(.text+0x46c): undefined reference to `__b64_ntop'

2010.09.02 18:53

Tomcat Web Server SSL 설정

디지털 커머스의 증가와 중요한 데이터간의 이동이 필요함에 따라서 보안은 모든 어플리케이션에서 중요한 자리를 차자하고 있습니다. 일반적으로 client 와 서버간에 사용자를 확인하기 위한 방법으로 username 과 password 를 체크합니다. 이를 사용하는 보안 처리 기법으로 Secure Sockets Layer (SSL) 과 Java Authentication and Authorization Service (JAAS)를 사용할 수가 있습니다. 먼저 SSL로 보안인증을 거치는 방법을 보고 java 에서 지원하는 다른 사용자 인증서비스인 JAAS을 jsp와 서블릿에서 사용하는 법을 보겠습니다.


1. 톰켓에서 사용자 인증 처리하기

톰켓으로 사용자 인증처리를 하기전에 먼저 username, password, role 을 등록해야 합니다. 등록하는 방법은 아주 쉽습니다. 톰켓이 설치된 폴더에서 /conf 에 보면 tomcat-user.xml 파일이 있습니다. 없으면 에디터 창에서 새로 만들어도 됩니다. 

<?xml version='1.0' encoding='utf-8'?><?xml version='1.0' encoding='utf-8'?> 
<tomcat-users> 
    <role rolename="dbadmin"/> 
    <role rolename="manager"/> 
    <user username="hans" password="hansworld" roles="dbadmin,manager"/> 
    <user username="jojo" password="33dsk3" roles="manager"/> 
</tomcat-users> 

위 소스에서 hans는 dbadmin과 manager의 권한을 갖고 jojo는 manager의 권한을 갖습니다. 

다음으로 톰켓서버에서 SSL을 셋팅해야 합니다. 이는 username이나 password 가 http상에서 이동할 때 암호화 되어 이동하기 때문에 중간에 악의적인 의도로 가로채거나 훔쳐내는 것을 방지해 줍니다. SSL을 셋팅하기 위해선 2가지 절차를 거쳐야 합니다.

1. java sdk에서 지원해주는 keytool로 keystore 파일을 만듭니다. 이 파일은 보안 접속을 하는 서버가 디지털 인증을 암호화 해서 사용하는데 쓰여집니다. 
2. 톰켓의 conf/server.xml 파일에 SSL Connector에 있는 주석을 제거합니다.

keytool은 java가 설치된 in 에서 찾을 수 있습니다. 

%JAVA_HOME%inkeytool -genkey -alias tomcat -keyalg RSA 

위의 명령을 실해하면 keystore 파일이 생성되는데 몇가지 질문을 합니다. 처음으로 패스워드를 물어보는데 톰켓에서 기본적으로 "changeit" 란 패스워드로 셋팅되어 있습니다. 나머지는 원하지 않으면 그냥 엔터키만 치면 됩니다. 

Enter keystore password: changeit 
What is your first and last name? 
[Unknown]: Bruce Perry 
What is the name of your organizational unit? 
[Unknown]: 
What is the name of your organization? 
[Unknown]: 
What is the name of your City or Locality? 
[Unknown]: 
What is the name of your State or Province? 
[Unknown]: 
What is the two-letter country code for this unit? 
[Unknown]: 
Is CN=Bruce Perry, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct? [no]: yes 
Enter key password for <tomcat>
(RETURN if same as keystore password):

다음에 conf/server.xml 에 있는 SSL Connector 요소에 있는 주석을 제거합니다.

<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<connector disableuploadtimeout="true" useurivalidationhack="false" secure="true" scheme="https" debug="0" acceptcount="100" enablelookups="true" maxprocessors="75" minprocessors="5" port="8443" classname="org.apache.coyote.tomcat4.CoyoteConnector">
<factory classname="org.apache.coyote.tomcat4.CoyoteServerSocketFactory" protocol="TLS" clientauth="false" />
</connector>

SSL은 일반 http 가 아닌 https 를 사용합니다. 또한 포트도 웹에서 80, 톰켓에서 8080 처럼 8443의 번호를 사용합니다.

https://localhost:8443/myhome/default.jsp


2. BASIC authentication BASIC Authentication

Basic 인증은 웹자원과 함께 사용되어온 보안 방법이고 거의 모든 브라우져가 이를 지원합니다. 일반적으로 사용자 이름과 비밀번호를 전송할 때 네트워크 상에서 Base64 인코딩 방식을 사용하는데 이는 디코딩하기 아주 쉽기때문에 보안적이라고 할 수 없습니다. 따라서 Basic Authentication 과 SSL 을 사용한 보안 방식을 사용합니다.

1. 먼저 처음에 설명했지만 username, password, role을 conf/tomcat-users.xml 에서 설정합니다.
2. security-constraint element 로 인증에 필요한 자원을 web.xml 파일에 기술합니다.
3. "BASIC"이라고 auth-method요소 사이에 적습니다. 이 auth-method 요소는 login-config요소에 들어갑니다.

<!-- Beginning of web.xml deployment descriptor -->
<security-CONSTRAINT>
<web-RESOURCE-COLLECTION>
<web-RESOURCE-NAME>JSP database component</web-RESOURCE-NAME> 
<url-PATTERN>/myhome.jsp</url-PATTERN> 
<http-METHOD>GET</http-METHOD> 
<http-METHOD>POST</http-METHOD> 
</web-RESOURCE-COLLECTION>
<auth-CONSTRAINT>
<role-NAME>dbadmin</role-NAME> 
</auth-CONSTRAINT>
<user-DATA-CONSTRAINT>
<transport-GUARANTEE>CONFIDENTIAL</transport-GUARANTEE> 
</user-DATA-CONSTRAINT>
</security-CONSTRAINT>
<login-CONFIG>
<auth-METHOD>BASIC</auth-METHOD> 
</login-CONFIG>
<security-ROLE>
<role-NAME>dbadmin</role-NAME> 
</security-ROLE>
<!-- Rest of web.xml deployment descriptor -->

web.xml 을 이렇게 편집한 후에 https://localhost:8443/myhome.jsp 로 들어가보면 아이디와 비밀번호를 입력하라는 창이 뜹니다. 여기서 만일 role 이 dbadmin 이 아니라면 아이디와 비밀번호가 맞아도 인증에 실패하게 됩니다. 반드시 해당 사용자가 인증에 필요한 role을 가지고 있어야 합니다.


3. Form-Based Authentication 의 사용 

서블릿은 일반 BASIC authentication 말고도 사용자 기반 인증인 Form-Based Authentication 제공합니다. 이는 톰켓에서 보여주는 BASIC authentication 의 단순화를 덜어주며 일반적으로 사용하는 form 방식을 사용하기 때문에 이용하기도 편합니다. 이역시 SSL 과 HTTPS를 사용하여 네트워크상에서 이동하는 데이터들을 보호합니다.

먼저 web.xml 셋팅을 보겠습니다. 파일의 맨 처음부분에 보안 관련 element를 기술하게 됩니다. security-constraint 부분은 BASIC authentication 과 같습니다. login-config 셋팅부분이 약간 다르긴 하지만 그렇게 크게 다르지는 않습니다.

<login-CONFIG>
<auth-METHOD>FORM</auth-METHOD>
<form-LOGIN-CONFIG>
<form-LOGIN-PAGE>/login.html</form-LOGIN-PAGE>
<form-ERROR-PAGE>/loginError.jsp</form-ERROR-PAGE>
</form-LOGIN-CONFIG>
</login-CONFIG>

실제 jsp에서 
<form>테그를 사용하여 사용자 정보를 전송하는데 이때 주의할 점은 form 태그의 action 요소의 값을 'j_security_ckeck' 로 하고 사용자 이름과 비밀번호의 이름을 'j_username' 과 'j_password'로 해야합니다. 로그아웃 시에는 HttpSession 객체의 invalidate() 메소드를 호출하면 됩니다.</form>


출처 : http://dreamholic.egloos.com/

Trackback 0 Comment 0
2010.06.01 18:03

Varnish VCL language 가이드

I’ve been working with Varnish 2.0 for the last two weeks, going from complete n00b to someone who knows enough to feel I can improve the terrible lack of documentation for Varnish and VCL. There’s not a lot out there and what’s there is hard to find and sometimes erroneous. I’m hoping this post will help others like me who are struggling with Varnish and VCL.

Basics

VCL is essentially a set of stubs which you can override to provide your own behavior. It is very limited in what it can do, primarily for performance reasons. You don’t have access to the filesystem and the language has no variables or loops.

The two stubs you will most often use:

  • vcl_recv – called at the start of a request. This is primarily used to canonicalize the input URL and headers, determine whether to bypass the cache, etc.
  • vcl_fetch – called when the response has been gathered from the backend before placing it in the cache. You can configure a grace period, enable ESI processing, configure different TTLs, remove user-specific cookies, etc before inserting the response into the cache.

Examples

The Varnish VCL examples are rather sparse; here’s a few more which may fill in some gaps. These work with Varnish 2.0.4.

# If the requested URL starts like "/link/?" then immediately pass it to the given 
# backend and DO NOT cache the result ("pass" basically means "bypass the cache").
if (req.url ~ "^/link/\?") {
  set req.backend = web;
  pass;                                                                                                    
}
if (req.url ~ "/$") { 
  # Handle URLs with a trailing slash by appending index.html
  # (Useful if you are pulling from S3 which does not have default document logic)
  # Note there's no explicit string append operator.
  set req.url = req.url "index.html";
}
# strip port from the Host header
# (useful when testing against a local Varnish instance on port 6081)
set req.http.Host = regsub(req.http.Host, ":[0-9]+", "");
 
# /foo/bar.embed -> /foo/bar/embed.js
set req.url = regsub(req.url, "(.*)\.embed$", "\1/embed.js");
 
# Support feed URLs of the form "/foo/bar.atom" --> "/foo/bar/feed.atom"
if ((req.url ~ "\.(rss|atom)$") && !(req.url ~ "feed\.(atom|rss)$")) {
    set req.url = regsub(req.url, "(.*)\.(.*)$", "\1/feed.\2");
}

The biggest pain in all of this was the very limited logic you can perform on req.url. You don’t have variables in VCL so you need to think in terms of regular expression groups like in the RSS/ATOM regexp above when trying to restructure the URL.

  # use this in vcl_fetch, don't want 404s filling up our cache, so just 
  # immediately return a client error and bypass the cache.
  if (obj.status == 404) {
    error 404 "No such file";
  }

Resources

Here’s the best VCL resources I could find:

Good luck!


출처 : www.mikeperham.com


Trackback 0 Comment 1
  1. anonymous 2012.04.03 16:34 address edit & del reply

    Don't forget to link the original link.
    http://www.mikeperham.com/2009/05/19/a-guide-to-varnish-vcl/