HOWTO

일반 계정으로 tomcat 을 80 포트로 연결하고 443 포트로 SSL 리다이렉션 설정

한크크 2016. 6. 20. 09:08

관리하고 있는 사이트에서는 apache 같은 웹서버를 사용하지 않고 톰캣을 통해 웹을 바로 띄우고 있다. 

연결된 도메인도 있어 도메인에 별도 포트를 붙이는 것은 원치 않아 80 으로 기동하려고 하다보니 

1024 포트 하위는 root user 로만 기동할 수 있다는 제약사항이 있었다. 


(사용중인 OS 는 RHEL 5.11 / TOMCAT 8 버전)


tomcat 을 root 유저로 띄우자니 일부 일반계정으로 액세스 해야 하는 부분에서 권한 문제로 접근이 어려워 

일반 유저로 tomcat 을 띄우되 도메인에서는 80 포트로 연결될 수 있는 방법을 찾아야 했다. 


이런 저런 검색 결과 3가지 정도로 압축되었다. 


1. AUTHBIND 설정 

2. CAP_NET_BIND_SERVICE 설정 

3. IPTABLES 를 통한 포트 포워딩


먼저 1번 authbind 설정이 제일 간단해 보여 찾아봤는데 대부분 ubuntu 에서의 사용 사례만 있고 

rhel 이나 centos 에 설정한 사례를 찾지 못했다. 

selinux 패키지 안에 authbind 설정이 있다는데 알려준대로 해봐도 문제는 지속되어 패스


2번 CAP_NET_BIND_SERVICE 설정을 해보려 했더니 RHEL 4, 5 에서는 지원하지 않는다고 하여 패스 


3번 IPTABLES 를 통한 포트포워딩 방법 적용을 위해서는 server.xml 에 80, 443 으로 설정한 부분을 

8080, 8443 으로 변경해서 일반 유저로 톰캣을 띄워야 했다. 


그런 다음 sysctl.conf 에 ip_forward 설정이 가능하도록 enable 시켜두고 


# sysctl -w net.ipv4.ip_forward=1


IPTABLES 에 라우팅 룰을 설정하였다. 


# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443



iptables 설정은 순서대로 적용되기 때문에 만약에 80 -> 8080 포워딩 룰을 443 -> 8443 이후에 넣게되면 

도메인을 통해 http 로 접속는 되는데 https 로 SSL 리다이렉션은 되지 않으니 꼭 순서대로 입력해야 한다. 



반응형