본문 바로가기
FullStack/41. WEB.WAS

Tomcat으로 80 포트 서비스하기

by nakanara 2023. 5. 10.
반응형

원인

Tomcat의 경우 80 포트로 서비스를 실행할 수 없습니다. 1024 이하 포트는 ROOT 권한으로 실행되어야 합니다.
Apache Web Services의 경우 httpd 파일의 소유권을 ROOT 계정으로 변경하면 가능하지만, Tomcat의 경우 Java로 개발되었기 때문에 Java(JDK)를 ROOT 소유로 변경이 필요합니다.
하지만 Java를 ROOT 소유로 변경하였을 때 웹 서비스 자체가 ROOT 권한을 가지기 때문에 서버 취약점에 문제가 발생합니다.

<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-80"]
java.net.BindException: Permission denied (Bind failed) <null>:80

해결

1. 방화벽을 이용 redirect

여러 가지 해결 방법이 있겠지만, 방화벽 기능을 이용하여 리다이렉트 하는 간단한 방법이 있습니다.

  • iptables
$ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 
$ service iptables save 
$ service iptables reload
  • firewall
$ firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent 
$ firewall-cmd --reload

2. authbind 기능

authbind는 1024 이하 포트를 ROOT가 아닌 계정에게 열어주는 유틸을 설치하여, 80 포트 접근 허용 설정 후, Tomcat이 해당 포트를 사용하게 할 수 있습니다. Tomcat 6.x 이상부터 사용 가능합니다.

  • authbind 설치
$ sudo apt-get install authbind
  • 80 포트 접근 설정
$ sudo touch /etc/authbind/byport/80  
$ sudo chmod 500 /etc/authbind/byport/80  
$ sudo chown /etc/authbind/byport/80
  • 실행을 위해 /bin/startup.sh 수정
# 기존
exec "$PRGDIR"/"$EXECUTABLE" start "$@"

# 수정
exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
  • IPv6를 지원하지 않는 이전 authbind(2.0.0 미만 버전)를 사용하는 경우 IPv4를 기본값으로 설정이 필요합니다. /bin/setenv.sh 파일을 만들고 수정
# IP4 설정
export CATALINA\_OPTS="$CATALINA\_OPTS -Djava.net.preferIPv4Stack=true"

참고

반응형

'FullStack > 41. WEB.WAS' 카테고리의 다른 글

Tomcat 리소스 압축 gzip 전송  (0) 2023.06.26
Tomcat 정적 문서 캐시(Cache-Control)  (0) 2023.06.19
Tomcat - privileged 속성  (0) 2023.05.08
Lighttpd - 경량 웹 서버  (0) 2023.04.22
thttpd - 경량 웹 서버  (0) 2023.04.22