Can I lock down access to a TCP port in Linux











up vote
0
down vote

favorite












I'm trying to secure a single-node Elasticsearch machine. Basically, I want to put Elasticsearch behind a reverse proxy (nginx) and make sure that the only way any user or process can communicate with Elasticsearch is through the proxy.



If Elaticsearch supported listening on a unix socket, this would be trivial. I could just set appropriate permissions on the socket file and be done. But, since it doesn't, I'm left with listening on a TCP port.



I have read a bit about network namespaces and it seems like they could possible work, but I have zero experience with them.



Is there an easy and secure way to make sure that the only process/user on the machine that can communicate with Elasticsearch is nginx?










share|improve this question
























  • I'm not an expert in this area, so just a thought. With the reverse proxy in place, the Elasticsearch server should only see requests from the Nginx server. In that case, the firewall on the Elasticsearch server could be configured to only allow requests from the Nginx server's IP address to the Elasticsearch port.
    – Haxiel
    Nov 8 at 6:28










  • Thanks for your comment. For requests coming from outside the server, you are right. But, as I understand it, local users on the Elasticsearch server may still be able to sniff traffic on the TCP port or send requests directly to Elasticsearch. Does that make sense?
    – Dominic P
    Nov 8 at 6:34










  • I believe there is a premium component in the Elastic Stack that can implement security features including TLS encryption. If you're worried about packet sniffing, maybe that is the way to go. For the local access part, I'm not quite sure if the loopback address will be treated differently by the firewall.
    – Haxiel
    Nov 8 at 6:46










  • What is the scenario you are protecting against? Some local non-root user on the node accessing elasticsearch without nginx? Some external host doing that? For the latter, the simplest way maybe is to run both elasticsearch and nginx in docker containers (google). Docker containers use network namespaces, and the standard setup is automatized to a large degree, so it's not difficult to setup without experience.
    – dirkt
    Nov 8 at 7:00










  • Thanks for the comment @dirkt. Yeah, I'm trying to achieve some defense in depth and prevent a local non-root user from going around the proxy. I have considered Docker, but the server is already a KVM virtual machine, and I feel like adding Docker gives me kind of a Russian Doll situation. Also, I don't know Docker at all, and I would rather not put the effort in to learn it if there's an easier way.
    – Dominic P
    Nov 8 at 7:21















up vote
0
down vote

favorite












I'm trying to secure a single-node Elasticsearch machine. Basically, I want to put Elasticsearch behind a reverse proxy (nginx) and make sure that the only way any user or process can communicate with Elasticsearch is through the proxy.



If Elaticsearch supported listening on a unix socket, this would be trivial. I could just set appropriate permissions on the socket file and be done. But, since it doesn't, I'm left with listening on a TCP port.



I have read a bit about network namespaces and it seems like they could possible work, but I have zero experience with them.



Is there an easy and secure way to make sure that the only process/user on the machine that can communicate with Elasticsearch is nginx?










share|improve this question
























  • I'm not an expert in this area, so just a thought. With the reverse proxy in place, the Elasticsearch server should only see requests from the Nginx server. In that case, the firewall on the Elasticsearch server could be configured to only allow requests from the Nginx server's IP address to the Elasticsearch port.
    – Haxiel
    Nov 8 at 6:28










  • Thanks for your comment. For requests coming from outside the server, you are right. But, as I understand it, local users on the Elasticsearch server may still be able to sniff traffic on the TCP port or send requests directly to Elasticsearch. Does that make sense?
    – Dominic P
    Nov 8 at 6:34










  • I believe there is a premium component in the Elastic Stack that can implement security features including TLS encryption. If you're worried about packet sniffing, maybe that is the way to go. For the local access part, I'm not quite sure if the loopback address will be treated differently by the firewall.
    – Haxiel
    Nov 8 at 6:46










  • What is the scenario you are protecting against? Some local non-root user on the node accessing elasticsearch without nginx? Some external host doing that? For the latter, the simplest way maybe is to run both elasticsearch and nginx in docker containers (google). Docker containers use network namespaces, and the standard setup is automatized to a large degree, so it's not difficult to setup without experience.
    – dirkt
    Nov 8 at 7:00










  • Thanks for the comment @dirkt. Yeah, I'm trying to achieve some defense in depth and prevent a local non-root user from going around the proxy. I have considered Docker, but the server is already a KVM virtual machine, and I feel like adding Docker gives me kind of a Russian Doll situation. Also, I don't know Docker at all, and I would rather not put the effort in to learn it if there's an easier way.
    – Dominic P
    Nov 8 at 7:21













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I'm trying to secure a single-node Elasticsearch machine. Basically, I want to put Elasticsearch behind a reverse proxy (nginx) and make sure that the only way any user or process can communicate with Elasticsearch is through the proxy.



If Elaticsearch supported listening on a unix socket, this would be trivial. I could just set appropriate permissions on the socket file and be done. But, since it doesn't, I'm left with listening on a TCP port.



I have read a bit about network namespaces and it seems like they could possible work, but I have zero experience with them.



Is there an easy and secure way to make sure that the only process/user on the machine that can communicate with Elasticsearch is nginx?










share|improve this question















I'm trying to secure a single-node Elasticsearch machine. Basically, I want to put Elasticsearch behind a reverse proxy (nginx) and make sure that the only way any user or process can communicate with Elasticsearch is through the proxy.



If Elaticsearch supported listening on a unix socket, this would be trivial. I could just set appropriate permissions on the socket file and be done. But, since it doesn't, I'm left with listening on a TCP port.



I have read a bit about network namespaces and it seems like they could possible work, but I have zero experience with them.



Is there an easy and secure way to make sure that the only process/user on the machine that can communicate with Elasticsearch is nginx?







security network-namespaces elasticsearch






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 10 hours ago









Rui F Ribeiro

38.2k1475125




38.2k1475125










asked Nov 8 at 5:01









Dominic P

1054




1054












  • I'm not an expert in this area, so just a thought. With the reverse proxy in place, the Elasticsearch server should only see requests from the Nginx server. In that case, the firewall on the Elasticsearch server could be configured to only allow requests from the Nginx server's IP address to the Elasticsearch port.
    – Haxiel
    Nov 8 at 6:28










  • Thanks for your comment. For requests coming from outside the server, you are right. But, as I understand it, local users on the Elasticsearch server may still be able to sniff traffic on the TCP port or send requests directly to Elasticsearch. Does that make sense?
    – Dominic P
    Nov 8 at 6:34










  • I believe there is a premium component in the Elastic Stack that can implement security features including TLS encryption. If you're worried about packet sniffing, maybe that is the way to go. For the local access part, I'm not quite sure if the loopback address will be treated differently by the firewall.
    – Haxiel
    Nov 8 at 6:46










  • What is the scenario you are protecting against? Some local non-root user on the node accessing elasticsearch without nginx? Some external host doing that? For the latter, the simplest way maybe is to run both elasticsearch and nginx in docker containers (google). Docker containers use network namespaces, and the standard setup is automatized to a large degree, so it's not difficult to setup without experience.
    – dirkt
    Nov 8 at 7:00










  • Thanks for the comment @dirkt. Yeah, I'm trying to achieve some defense in depth and prevent a local non-root user from going around the proxy. I have considered Docker, but the server is already a KVM virtual machine, and I feel like adding Docker gives me kind of a Russian Doll situation. Also, I don't know Docker at all, and I would rather not put the effort in to learn it if there's an easier way.
    – Dominic P
    Nov 8 at 7:21


















  • I'm not an expert in this area, so just a thought. With the reverse proxy in place, the Elasticsearch server should only see requests from the Nginx server. In that case, the firewall on the Elasticsearch server could be configured to only allow requests from the Nginx server's IP address to the Elasticsearch port.
    – Haxiel
    Nov 8 at 6:28










  • Thanks for your comment. For requests coming from outside the server, you are right. But, as I understand it, local users on the Elasticsearch server may still be able to sniff traffic on the TCP port or send requests directly to Elasticsearch. Does that make sense?
    – Dominic P
    Nov 8 at 6:34










  • I believe there is a premium component in the Elastic Stack that can implement security features including TLS encryption. If you're worried about packet sniffing, maybe that is the way to go. For the local access part, I'm not quite sure if the loopback address will be treated differently by the firewall.
    – Haxiel
    Nov 8 at 6:46










  • What is the scenario you are protecting against? Some local non-root user on the node accessing elasticsearch without nginx? Some external host doing that? For the latter, the simplest way maybe is to run both elasticsearch and nginx in docker containers (google). Docker containers use network namespaces, and the standard setup is automatized to a large degree, so it's not difficult to setup without experience.
    – dirkt
    Nov 8 at 7:00










  • Thanks for the comment @dirkt. Yeah, I'm trying to achieve some defense in depth and prevent a local non-root user from going around the proxy. I have considered Docker, but the server is already a KVM virtual machine, and I feel like adding Docker gives me kind of a Russian Doll situation. Also, I don't know Docker at all, and I would rather not put the effort in to learn it if there's an easier way.
    – Dominic P
    Nov 8 at 7:21
















I'm not an expert in this area, so just a thought. With the reverse proxy in place, the Elasticsearch server should only see requests from the Nginx server. In that case, the firewall on the Elasticsearch server could be configured to only allow requests from the Nginx server's IP address to the Elasticsearch port.
– Haxiel
Nov 8 at 6:28




I'm not an expert in this area, so just a thought. With the reverse proxy in place, the Elasticsearch server should only see requests from the Nginx server. In that case, the firewall on the Elasticsearch server could be configured to only allow requests from the Nginx server's IP address to the Elasticsearch port.
– Haxiel
Nov 8 at 6:28












Thanks for your comment. For requests coming from outside the server, you are right. But, as I understand it, local users on the Elasticsearch server may still be able to sniff traffic on the TCP port or send requests directly to Elasticsearch. Does that make sense?
– Dominic P
Nov 8 at 6:34




Thanks for your comment. For requests coming from outside the server, you are right. But, as I understand it, local users on the Elasticsearch server may still be able to sniff traffic on the TCP port or send requests directly to Elasticsearch. Does that make sense?
– Dominic P
Nov 8 at 6:34












I believe there is a premium component in the Elastic Stack that can implement security features including TLS encryption. If you're worried about packet sniffing, maybe that is the way to go. For the local access part, I'm not quite sure if the loopback address will be treated differently by the firewall.
– Haxiel
Nov 8 at 6:46




I believe there is a premium component in the Elastic Stack that can implement security features including TLS encryption. If you're worried about packet sniffing, maybe that is the way to go. For the local access part, I'm not quite sure if the loopback address will be treated differently by the firewall.
– Haxiel
Nov 8 at 6:46












What is the scenario you are protecting against? Some local non-root user on the node accessing elasticsearch without nginx? Some external host doing that? For the latter, the simplest way maybe is to run both elasticsearch and nginx in docker containers (google). Docker containers use network namespaces, and the standard setup is automatized to a large degree, so it's not difficult to setup without experience.
– dirkt
Nov 8 at 7:00




What is the scenario you are protecting against? Some local non-root user on the node accessing elasticsearch without nginx? Some external host doing that? For the latter, the simplest way maybe is to run both elasticsearch and nginx in docker containers (google). Docker containers use network namespaces, and the standard setup is automatized to a large degree, so it's not difficult to setup without experience.
– dirkt
Nov 8 at 7:00












Thanks for the comment @dirkt. Yeah, I'm trying to achieve some defense in depth and prevent a local non-root user from going around the proxy. I have considered Docker, but the server is already a KVM virtual machine, and I feel like adding Docker gives me kind of a Russian Doll situation. Also, I don't know Docker at all, and I would rather not put the effort in to learn it if there's an easier way.
– Dominic P
Nov 8 at 7:21




Thanks for the comment @dirkt. Yeah, I'm trying to achieve some defense in depth and prevent a local non-root user from going around the proxy. I have considered Docker, but the server is already a KVM virtual machine, and I feel like adding Docker gives me kind of a Russian Doll situation. Also, I don't know Docker at all, and I would rather not put the effort in to learn it if there's an easier way.
– Dominic P
Nov 8 at 7:21










1 Answer
1






active

oldest

votes

















up vote
2
down vote



accepted










To protect against a local non-root user, I'd indeed use network namespaces.



It's probably the simplest solution, because in general networking stuff is decoupled from user/group management, and while mixing both can be done with iptables, it adds overhead.



Network namespaces just rely on the fact that only root can move process to and from namespaces.



So you need a setup similar to (ns = namespace)



main ns ---- nginx ns ---- elasticsearch ns


where the connections are implemented by virtual ethernet (veth) pairs with their own LAN segment. This will mean every process in the main namespace can only ever access the nginx namespace, and the elasticsearch namespace can't be accessed directly (unless you are able to start processes in this namespace).



You need to know basics about networking (LAN segments, netmask, routes vs. default routes). ip netns ... is the command line tool to create and manage netspaces, and start processes in a namespace. ip link ... is the command line tool to create veth-pairs.



I recommend to start an xterm in each namespace, so you can see and modify the network configuration. Once everything works, just script it.



You'll need to play around with it a bit, but it's not really difficult. I can't think of an easier way to do it.



Edit



To get started with namespaces, try out the script in this answer, or look at this question.



I'm not sure where you are stuck wrt. network namespaces. Think of each namespace as a networked virtual computer of its own, which happens to share the filesystem and other stuff with the rest of the physical computer. So dealing with namespaces is the same as connecting up computers in a LAN. One important tool is a virtual ethernet pair, which you can think of as a virtual LAN cable that connects two network namespaces.






share|improve this answer























  • Thanks so much for the detailed answer. I neglected to mention that Elasticsearch is setup to run via systemd. Given that, I'm not sure how to make it run in a network namespace (see this and this). Do you think something like this would work? Or, am I over complicating things. I can't seem to find a good, simple tutorial on network namespaces.
    – Dominic P
    Nov 9 at 6:15










  • I'm sure it can somehow be made to work using systemd, but I've never tried to do that. For starters, I'd try to set up everything manually, so you see and understand the parts. See edit for namespace stuff.
    – dirkt
    Nov 9 at 6:42










  • Thanks for sticking with me. The extra links were really helpful. I was able to get communication setup between the elastic and the nginx namespaces. Now I'm struggling to be able to ping the nginx namespace from the main namespace. I want nginx to be able to listen on port 80/443 of the default namespace. It seems like I need a bridge to make that happen. But, I can't seem to get the bridge to work. I'll keep tinkering with it. My main issue at this point isn't with namespaces but with gaps in my understanding of basic networking. I might post a separate question about that.
    – Dominic P
    Nov 10 at 7:10










  • You can use a bridge, but then both the main namespace and the nginx namespace will appear with two different external IPs, and that may not be what you want. The alternative is port forwarding via iptables (google). That's also what docker sets up for you by default. And yes, that looks like a new question. :-)
    – dirkt
    Nov 10 at 9:05











Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














 

draft saved


draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f480497%2fcan-i-lock-down-access-to-a-tcp-port-in-linux%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
2
down vote



accepted










To protect against a local non-root user, I'd indeed use network namespaces.



It's probably the simplest solution, because in general networking stuff is decoupled from user/group management, and while mixing both can be done with iptables, it adds overhead.



Network namespaces just rely on the fact that only root can move process to and from namespaces.



So you need a setup similar to (ns = namespace)



main ns ---- nginx ns ---- elasticsearch ns


where the connections are implemented by virtual ethernet (veth) pairs with their own LAN segment. This will mean every process in the main namespace can only ever access the nginx namespace, and the elasticsearch namespace can't be accessed directly (unless you are able to start processes in this namespace).



You need to know basics about networking (LAN segments, netmask, routes vs. default routes). ip netns ... is the command line tool to create and manage netspaces, and start processes in a namespace. ip link ... is the command line tool to create veth-pairs.



I recommend to start an xterm in each namespace, so you can see and modify the network configuration. Once everything works, just script it.



You'll need to play around with it a bit, but it's not really difficult. I can't think of an easier way to do it.



Edit



To get started with namespaces, try out the script in this answer, or look at this question.



I'm not sure where you are stuck wrt. network namespaces. Think of each namespace as a networked virtual computer of its own, which happens to share the filesystem and other stuff with the rest of the physical computer. So dealing with namespaces is the same as connecting up computers in a LAN. One important tool is a virtual ethernet pair, which you can think of as a virtual LAN cable that connects two network namespaces.






share|improve this answer























  • Thanks so much for the detailed answer. I neglected to mention that Elasticsearch is setup to run via systemd. Given that, I'm not sure how to make it run in a network namespace (see this and this). Do you think something like this would work? Or, am I over complicating things. I can't seem to find a good, simple tutorial on network namespaces.
    – Dominic P
    Nov 9 at 6:15










  • I'm sure it can somehow be made to work using systemd, but I've never tried to do that. For starters, I'd try to set up everything manually, so you see and understand the parts. See edit for namespace stuff.
    – dirkt
    Nov 9 at 6:42










  • Thanks for sticking with me. The extra links were really helpful. I was able to get communication setup between the elastic and the nginx namespaces. Now I'm struggling to be able to ping the nginx namespace from the main namespace. I want nginx to be able to listen on port 80/443 of the default namespace. It seems like I need a bridge to make that happen. But, I can't seem to get the bridge to work. I'll keep tinkering with it. My main issue at this point isn't with namespaces but with gaps in my understanding of basic networking. I might post a separate question about that.
    – Dominic P
    Nov 10 at 7:10










  • You can use a bridge, but then both the main namespace and the nginx namespace will appear with two different external IPs, and that may not be what you want. The alternative is port forwarding via iptables (google). That's also what docker sets up for you by default. And yes, that looks like a new question. :-)
    – dirkt
    Nov 10 at 9:05















up vote
2
down vote



accepted










To protect against a local non-root user, I'd indeed use network namespaces.



It's probably the simplest solution, because in general networking stuff is decoupled from user/group management, and while mixing both can be done with iptables, it adds overhead.



Network namespaces just rely on the fact that only root can move process to and from namespaces.



So you need a setup similar to (ns = namespace)



main ns ---- nginx ns ---- elasticsearch ns


where the connections are implemented by virtual ethernet (veth) pairs with their own LAN segment. This will mean every process in the main namespace can only ever access the nginx namespace, and the elasticsearch namespace can't be accessed directly (unless you are able to start processes in this namespace).



You need to know basics about networking (LAN segments, netmask, routes vs. default routes). ip netns ... is the command line tool to create and manage netspaces, and start processes in a namespace. ip link ... is the command line tool to create veth-pairs.



I recommend to start an xterm in each namespace, so you can see and modify the network configuration. Once everything works, just script it.



You'll need to play around with it a bit, but it's not really difficult. I can't think of an easier way to do it.



Edit



To get started with namespaces, try out the script in this answer, or look at this question.



I'm not sure where you are stuck wrt. network namespaces. Think of each namespace as a networked virtual computer of its own, which happens to share the filesystem and other stuff with the rest of the physical computer. So dealing with namespaces is the same as connecting up computers in a LAN. One important tool is a virtual ethernet pair, which you can think of as a virtual LAN cable that connects two network namespaces.






share|improve this answer























  • Thanks so much for the detailed answer. I neglected to mention that Elasticsearch is setup to run via systemd. Given that, I'm not sure how to make it run in a network namespace (see this and this). Do you think something like this would work? Or, am I over complicating things. I can't seem to find a good, simple tutorial on network namespaces.
    – Dominic P
    Nov 9 at 6:15










  • I'm sure it can somehow be made to work using systemd, but I've never tried to do that. For starters, I'd try to set up everything manually, so you see and understand the parts. See edit for namespace stuff.
    – dirkt
    Nov 9 at 6:42










  • Thanks for sticking with me. The extra links were really helpful. I was able to get communication setup between the elastic and the nginx namespaces. Now I'm struggling to be able to ping the nginx namespace from the main namespace. I want nginx to be able to listen on port 80/443 of the default namespace. It seems like I need a bridge to make that happen. But, I can't seem to get the bridge to work. I'll keep tinkering with it. My main issue at this point isn't with namespaces but with gaps in my understanding of basic networking. I might post a separate question about that.
    – Dominic P
    Nov 10 at 7:10










  • You can use a bridge, but then both the main namespace and the nginx namespace will appear with two different external IPs, and that may not be what you want. The alternative is port forwarding via iptables (google). That's also what docker sets up for you by default. And yes, that looks like a new question. :-)
    – dirkt
    Nov 10 at 9:05













up vote
2
down vote



accepted







up vote
2
down vote



accepted






To protect against a local non-root user, I'd indeed use network namespaces.



It's probably the simplest solution, because in general networking stuff is decoupled from user/group management, and while mixing both can be done with iptables, it adds overhead.



Network namespaces just rely on the fact that only root can move process to and from namespaces.



So you need a setup similar to (ns = namespace)



main ns ---- nginx ns ---- elasticsearch ns


where the connections are implemented by virtual ethernet (veth) pairs with their own LAN segment. This will mean every process in the main namespace can only ever access the nginx namespace, and the elasticsearch namespace can't be accessed directly (unless you are able to start processes in this namespace).



You need to know basics about networking (LAN segments, netmask, routes vs. default routes). ip netns ... is the command line tool to create and manage netspaces, and start processes in a namespace. ip link ... is the command line tool to create veth-pairs.



I recommend to start an xterm in each namespace, so you can see and modify the network configuration. Once everything works, just script it.



You'll need to play around with it a bit, but it's not really difficult. I can't think of an easier way to do it.



Edit



To get started with namespaces, try out the script in this answer, or look at this question.



I'm not sure where you are stuck wrt. network namespaces. Think of each namespace as a networked virtual computer of its own, which happens to share the filesystem and other stuff with the rest of the physical computer. So dealing with namespaces is the same as connecting up computers in a LAN. One important tool is a virtual ethernet pair, which you can think of as a virtual LAN cable that connects two network namespaces.






share|improve this answer














To protect against a local non-root user, I'd indeed use network namespaces.



It's probably the simplest solution, because in general networking stuff is decoupled from user/group management, and while mixing both can be done with iptables, it adds overhead.



Network namespaces just rely on the fact that only root can move process to and from namespaces.



So you need a setup similar to (ns = namespace)



main ns ---- nginx ns ---- elasticsearch ns


where the connections are implemented by virtual ethernet (veth) pairs with their own LAN segment. This will mean every process in the main namespace can only ever access the nginx namespace, and the elasticsearch namespace can't be accessed directly (unless you are able to start processes in this namespace).



You need to know basics about networking (LAN segments, netmask, routes vs. default routes). ip netns ... is the command line tool to create and manage netspaces, and start processes in a namespace. ip link ... is the command line tool to create veth-pairs.



I recommend to start an xterm in each namespace, so you can see and modify the network configuration. Once everything works, just script it.



You'll need to play around with it a bit, but it's not really difficult. I can't think of an easier way to do it.



Edit



To get started with namespaces, try out the script in this answer, or look at this question.



I'm not sure where you are stuck wrt. network namespaces. Think of each namespace as a networked virtual computer of its own, which happens to share the filesystem and other stuff with the rest of the physical computer. So dealing with namespaces is the same as connecting up computers in a LAN. One important tool is a virtual ethernet pair, which you can think of as a virtual LAN cable that connects two network namespaces.







share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 9 at 6:45

























answered Nov 8 at 8:04









dirkt

16.1k21234




16.1k21234












  • Thanks so much for the detailed answer. I neglected to mention that Elasticsearch is setup to run via systemd. Given that, I'm not sure how to make it run in a network namespace (see this and this). Do you think something like this would work? Or, am I over complicating things. I can't seem to find a good, simple tutorial on network namespaces.
    – Dominic P
    Nov 9 at 6:15










  • I'm sure it can somehow be made to work using systemd, but I've never tried to do that. For starters, I'd try to set up everything manually, so you see and understand the parts. See edit for namespace stuff.
    – dirkt
    Nov 9 at 6:42










  • Thanks for sticking with me. The extra links were really helpful. I was able to get communication setup between the elastic and the nginx namespaces. Now I'm struggling to be able to ping the nginx namespace from the main namespace. I want nginx to be able to listen on port 80/443 of the default namespace. It seems like I need a bridge to make that happen. But, I can't seem to get the bridge to work. I'll keep tinkering with it. My main issue at this point isn't with namespaces but with gaps in my understanding of basic networking. I might post a separate question about that.
    – Dominic P
    Nov 10 at 7:10










  • You can use a bridge, but then both the main namespace and the nginx namespace will appear with two different external IPs, and that may not be what you want. The alternative is port forwarding via iptables (google). That's also what docker sets up for you by default. And yes, that looks like a new question. :-)
    – dirkt
    Nov 10 at 9:05


















  • Thanks so much for the detailed answer. I neglected to mention that Elasticsearch is setup to run via systemd. Given that, I'm not sure how to make it run in a network namespace (see this and this). Do you think something like this would work? Or, am I over complicating things. I can't seem to find a good, simple tutorial on network namespaces.
    – Dominic P
    Nov 9 at 6:15










  • I'm sure it can somehow be made to work using systemd, but I've never tried to do that. For starters, I'd try to set up everything manually, so you see and understand the parts. See edit for namespace stuff.
    – dirkt
    Nov 9 at 6:42










  • Thanks for sticking with me. The extra links were really helpful. I was able to get communication setup between the elastic and the nginx namespaces. Now I'm struggling to be able to ping the nginx namespace from the main namespace. I want nginx to be able to listen on port 80/443 of the default namespace. It seems like I need a bridge to make that happen. But, I can't seem to get the bridge to work. I'll keep tinkering with it. My main issue at this point isn't with namespaces but with gaps in my understanding of basic networking. I might post a separate question about that.
    – Dominic P
    Nov 10 at 7:10










  • You can use a bridge, but then both the main namespace and the nginx namespace will appear with two different external IPs, and that may not be what you want. The alternative is port forwarding via iptables (google). That's also what docker sets up for you by default. And yes, that looks like a new question. :-)
    – dirkt
    Nov 10 at 9:05
















Thanks so much for the detailed answer. I neglected to mention that Elasticsearch is setup to run via systemd. Given that, I'm not sure how to make it run in a network namespace (see this and this). Do you think something like this would work? Or, am I over complicating things. I can't seem to find a good, simple tutorial on network namespaces.
– Dominic P
Nov 9 at 6:15




Thanks so much for the detailed answer. I neglected to mention that Elasticsearch is setup to run via systemd. Given that, I'm not sure how to make it run in a network namespace (see this and this). Do you think something like this would work? Or, am I over complicating things. I can't seem to find a good, simple tutorial on network namespaces.
– Dominic P
Nov 9 at 6:15












I'm sure it can somehow be made to work using systemd, but I've never tried to do that. For starters, I'd try to set up everything manually, so you see and understand the parts. See edit for namespace stuff.
– dirkt
Nov 9 at 6:42




I'm sure it can somehow be made to work using systemd, but I've never tried to do that. For starters, I'd try to set up everything manually, so you see and understand the parts. See edit for namespace stuff.
– dirkt
Nov 9 at 6:42












Thanks for sticking with me. The extra links were really helpful. I was able to get communication setup between the elastic and the nginx namespaces. Now I'm struggling to be able to ping the nginx namespace from the main namespace. I want nginx to be able to listen on port 80/443 of the default namespace. It seems like I need a bridge to make that happen. But, I can't seem to get the bridge to work. I'll keep tinkering with it. My main issue at this point isn't with namespaces but with gaps in my understanding of basic networking. I might post a separate question about that.
– Dominic P
Nov 10 at 7:10




Thanks for sticking with me. The extra links were really helpful. I was able to get communication setup between the elastic and the nginx namespaces. Now I'm struggling to be able to ping the nginx namespace from the main namespace. I want nginx to be able to listen on port 80/443 of the default namespace. It seems like I need a bridge to make that happen. But, I can't seem to get the bridge to work. I'll keep tinkering with it. My main issue at this point isn't with namespaces but with gaps in my understanding of basic networking. I might post a separate question about that.
– Dominic P
Nov 10 at 7:10












You can use a bridge, but then both the main namespace and the nginx namespace will appear with two different external IPs, and that may not be what you want. The alternative is port forwarding via iptables (google). That's also what docker sets up for you by default. And yes, that looks like a new question. :-)
– dirkt
Nov 10 at 9:05




You can use a bridge, but then both the main namespace and the nginx namespace will appear with two different external IPs, and that may not be what you want. The alternative is port forwarding via iptables (google). That's also what docker sets up for you by default. And yes, that looks like a new question. :-)
– dirkt
Nov 10 at 9:05


















 

draft saved


draft discarded



















































 


draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f480497%2fcan-i-lock-down-access-to-a-tcp-port-in-linux%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Morgemoulin

Scott Moir

Souastre