1 Problemstilling
En lokal socket-proxy kan brukes til å løse følgende problem:
- Maskin A ønsker å kommunisere med maskin B på en spesifikk port
- Denne kommunikasjonen er sperret i firewall
Man kan da sette opp en socket-proxy på en tredje maskin C på en alternativ port, dersom firewall tillater at maskin A kan kommunisere med maskin C på den alternative porten, og at maskin C kan kommunisere med maskin B på den orginale porten.
2 Løsning
2.1 Sette opp proxy
På maskinen som skal være proxy, kalt maskin C i problemstillingen over, opprettes et par filer:
- /etc/systemd/system/<name>.service
Denne filen skal ha innhold:
[Unit] Description=<desc> Requires=network.target After=network.target Requires=<name>.socket After=<name>.socket [Service] ExecStart=/usr/lib/systemd/systemd-socket-proxyd <address>:<port> [Install] WantedBy=multi-user.target
Bytt ut:
- <desc> - en beskrivelse av tjenesten
- <name> - et beskrivende navn på tjenesten
- <address> - adressen til tjenesten man proxyer til
- <port> - porten til tjenesten man proxyer til
- /etc/systemd/system/<name>.socket
Denne filen skal ha samme navn som filen over, men ende på .socket istedenfor .service, og ha innhold:
[Socket] ListenStream=<listen-ip>:<port> # Simple ACL for this forwarding service IPAddressDeny=any IPAddressAllow=localhost # Allow IP addresses or ranges IPAddressAllow=<cidr> IPAddressAllow=<cidr> [Install] WantedBy=sockets.target
Bytt ut:
- <listen-ip> - IP-nummeret som proxyen skal lytte på (normalt IP-adressen til maskinen hvor proxy kjører)
- <port> - Porten hvor proxyen skal lytte
- <cidr> - IP-nummer eller CIDR-adresse som skal tillates å benytte proxy-tjenesten
Husk å åpne i firewall for proxy-tjenesten. Det kan f.eks. gjøres slik:
firewall-cmd --add-port <port> firewall-cmd --add-port <port> --permanent
Sannsynligvis må man også endre SELinux slik at porten kan brukes av systemd-socket-proxyd:
setsebool -P systemd_socket_proxyd_connect_any 1
Da kan tjenesten startes, samt settes til å starte ved boot:
systemctl daemon-reload systemctl enable --now <name>.socket <name>.service
2.2 Teste / bruke proxy
Den nye proxyen kan deretter brukes fra maskin A ved å bruke IP og port for proxyen til å kommunisere med maskin B. Dette kan f.eks. testes slik:
yum -y install telnet telnet <proxy-ip> <proxy-port>