(1) Java installieren
dnf install java-17-openjdk -y
(2) tomcat Benutzer anlegen
mkdir /opt/tomcat
groupadd tomcat
useradd -g tomcat -c „Tomcat User“ –d /opt/tomcat -s /sbin/nologin tomcat
(3) Tomcat herunterladen und entpacken
wget https://downloads.apache.org/tomcat/tomcat-10/v10.0.16/bin/apache-tomcat-10.0.16.tar.gz
tar xzf apache-tomcat-10.0.16.tar.gz -C /opt/tomcat –strip-components=1
chown -R tomcat: /opt/tomcat/
(4) Tomcat Admin Benutzerrolle definieren
nano /opt/tomcat/conf/tomcat-users.xml
.... <role rolename="manager-gui"/> <user username="admin" password="password" roles="manager-gui,admin-gui"/> </tomcat-users>
(5) Tomcat für den remote Zugriff konfigurieren
nano /opt/tomcat/webapps/manager/META-INF/context.xml
remove :
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
nano /opt/tomcat/webapps/host-manager/META-INF/context.xml
remove:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
(6) Eine Steuerdatei (Unit File) für systemd anlegen für Apache Tomcat
Ermitteln des JAVA-Pfad mit sudo alternatives –list | grep ^java und Verwendung in der Unit-Datei als JAVA_HOME Umgebungsvariable
nano /etc/systemd/system/tomcat.service
[Unit] Description=Apache Tomcat Server After=syslog.target network.target [Service] Type=forking User=tomcat Group=tomcat Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64 Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat ExecStart=/opt/tomcat/bin/catalina.sh start ExecStop=/opt/tomcat/bin/catalina.sh stop RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
systemctl daemon-reload
systemctl start tomcat
systemctl enable tomcat
systemctl status tomcat
● tomcat.service - Apache Tomcat Server 10 Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2022-02-07 17:16:13 CET; 36s ago Main PID: 49244 (java) Tasks: 30 (limit: 4770) Memory: 105.7M CGroup: /system.slice/tomcat.service └─49244 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org> Feb 07 17:16:13 Rocky8 systemd[1]: Starting Apache Tomcat Server 10... Feb 07 17:16:13 Rocky8 systemd[1]: Started Apache Tomcat Server 10.
(7) Firewall freischalten für den Port 8080
Standardmäßig wird die öffentliche Zone (public) verwendet. Andernfalls mit dem Parameter –zone=internal wie hier die interne Zone spezifizieren.
sudo firewall-cmd --add-port=8080/tcp --permanent success sudo firewall-cmd --reload Success sudo firewall-cmd --info-zone=public public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ssh ports: 8080/tcp protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Jetzt ist unser Tomcat über explizite Angabe des Ports 8080 erreichbar. Das kann man so machen. muss man aber nicht. Schöner ist es, die Kommunikation auf Port 80 umzulegen.
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080 sudo iptables-save
Anzeige der definierten iptables Einträge:
sudo iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8080 Chain INPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8080
Abspeichern/Backup der iptables-Konfiguration:
sudo iptables-save sudo iptables-save -c > /etc/iptables.rules
für ein späteres Restore mit folgendem Aufruf:
sudo iptables-restore < /etc/iptables.rules
Weiter oben haben wir in der firewall den Port 8080 freigegeben. Das ist nun nicht mehr notwendig; entfernen des Ports aus der Firewall:
sudo firewall-cmd --remove-port=8080/tcp --permanent success sudo firewall-cmd --reload success