Java programlama dili ile geliştirilen web uygulamalarını çalıştırmak için kullanabileceğiniz Apache Tomcat sunucusunu Centos 7’ye kurmak oldukça kolay. Bu makalemizde manual olarak Apache Tomcat sunucunu kurarak nasıl 80’inci porttan çalıştıracağınızı anlatacağız.
Bu makale yazıldığında yum paket yöneticisi varsayılan olarak Tomcat 7 ve Java 1.8 versiyonlarını kurmaktadır.
Sunucuda update gerektiren paketleri güncellemek için kurulumdan önce aşağıdaki update komutunu çalıştırmanızı öneririz.
yum -y update
Apache Tomcat’i kurmak için aşağıdaki komutu çalıştırın.
yum -y install tomcat
Opsiyonel olarak Apache Tomcat’in yönetimsel araçlarını kurmak isterseniz aşağıdaki komutu çalıştırın.
yum -y install tomcat-webapps tomcat-admin-webapps
Kurulum tamamlandıktan sonra Tomcat’in Java çalıştırırken hangi sınırlamalar ile çalıştıracağını belirten direktifimizi eklememiz gerekiyor. Aşağıdaki tomcat.conf dosaysını herhang bir text editor ile açın.
vi /usr/share/tomcat/conf/tomcat.conf
JAVA_OPTS satırını bulup aşağıdaki şekilde güncelleyin.
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"
Tomcat’in admin kullanıcısının parolasını belirlemek için tomcat-users.xml dosyasını açın
vi /usr/share/tomcat/conf/tomcat-users.xml
user düğümünü aşağıdaki şekilde ayarlayın.
<tomcat-users> <user username="admin" password="çokGüçlüBirParola" roles="manager-gui,admin-gui"/> </tomcat-users>
Apache Tomcat’in shutdown özelliğin için güçlü bir anahtar belirlememiz güvenlik için önemli. Aşağıdaki server.xml dosyasını açarak gerekli tanımlamaları yapın.
vi /usr/share/tomcat/conf/server.xml
Varsayılan olarak gelen shutdown anahtarını
<Server port="8005" shutdown="SHUTDOWN">
güçlü bir anahtar ile değiştirin.
<Server port="8005" shutdown="kCTA4D@#EJI5xG4VQSJ@I">
Apache Tomcat sunucusunun versiyonunu da gizlememiz ayrı bir güvenlik önlemidir. Yine server.xml dosyası içinde aşağıdaki satırı bulun.
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
ve aşağıdaki şekilde değiştirin.
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" server="Apache" />
Konfigürasyon ile yapacaklarımız bu şekilde daha fazla bilgi için https://www.owasp.org/index.php/Securing_tomcat
Tomcat’in sistem yeniden başlatıldığında çalışması için aşağıdaki komutu çalıştırın.
systemctl enable tomcat
Tomcat’e 8080 portundan herkesin erişmesi için firewall’a aşağıdaki kuralı girin.
firewall-cmd --zone=public --permanent --add-port=8080/tcp firewall-cmd --reload
Authbind
Apache Tomcat herhangi bir web server olmadan tek başına çalışacak şekilde yapılandırılabilir lakin Tomcat, direkt root kullanıcısı ile çalışmadığından SELinux’ün bazı kurallarına takılarak 80 portta çalışması doğal yollarla mümkün olmuyor. Bunun için authbind aracını kullanmamız gerekiyor.
Tomcat’i 80 porttan çalıştırmanın bir kaç yolu daha var Apache web sunucu için mod_jk, Nginx ile standart bir reverse-proxy şeklinde veya ipstables kullanarak port redirect yöntemi ile 80 portuna gelen anonim isteği 8080 portuna göndermek gibi yollar da geçerlidir. Biz burada herhangi başka bir sunucu olmadan veya sisteme en az yükü getirecek şekilde bir tasarım yapalım istedik.
https://github.com/tootedom/authbind-centos-rpm adresinden authbind’in Centos 7 paketini indirebilirsiniz. İndirme işlemi bittikten sonra RPM’i aşağıdaki komut ile sisteme kurun
rpm -Uvh authbind-2.1.1-0.1.x86_64.rpm
Kurulum tamamlandıkta sonra aşağıdaki konfigürasyon niteliğindeki komutları çalıştırın.
sudo touch /etc/authbind/byport/80 sudo chmod 500 /etc/authbind/byport/80 sudo chown tomcat /etc/authbind/byport/80 sudo touch /etc/authbind/byport/443 sudo chmod 500 /etc/authbind/byport/443 sudo chown tomcat /etc/authbind/byport/443
Bu aşamadan sonra server.xml’deki 8080 portunda çalışan Connector’ü 80 portuna alabiliriz.
vi /usr/share/tomcat/conf/server.xml
dosyasını açın ve aşağıdaki düzenlemeyi yapın.
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" server="Apache" />
Ardından tomcat’in servis direktif dosyasındaki ExecStart değerini authbind’de çalışacak şekilde yapılandırmamız gerkeiyor. Aşağıcaki komut ile tomcat.service dosyasını açın.
vi /etc/systemd/system/multi-user.target.wants/tomcat.service
ExecStart satırını bulup # ile yorum satırı haline getirin.
#ExecStart=/usr/libexec/tomcat/server start
ve arından aşağıdaki satırı ekleyin.
ExecStart=/usr/bin/authbind -–deep "/usr/libexec/tomcat/server" start
artık Tomcat çalıştığında authbind 80 portundan aktif edecektir.
Servis dosyasında değişiklik yaptığımız için reload yapmamız gerekiyor. Aşağıdaki komutu çalıştırarak bunu gerçekleştirebilirsiniz.
systemctl daemon-reload
ve değişikliklerin aktif olması içişn Tomcat servisini restart edelim.
systemctl restart tomcat
Dışarıdan 80 portuna erişmek için ise yine firewall kuralımızı girip aktif edelim.
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload
Bu ayarladan sonra Tomcat 80 portu üzerinden çalışacaktır.
Vhosts
Tomcat üzerinde birden fazla domain host edebilirsiniz. Bunun için server.xml dosyasına ufak bir XML düğümü girmeniz yeterli.
vi /usr/share/tomcat/conf/server.xml
dosyasını açtıktan sonra <Engine/> düğümünün en altına <Host/> düğümünü ekleyin.
<Host name="domain.com" appBase="domain.com" unpackWARs="true" autoDeploy="true"> <Alias>www.domain.com</Alias> </Host>
Bu işlem artından ayarların aktif olması için aşağıdaki komut ile servisi yeniden başlatmanız yeterli.
systemctl restart tomcat