I'm just starting out in Ubuntu/Linux, and have some trouble opening port 80 for incoming connections.

I ran the sudo ufw allow 80/tcp command, and when I run sudo ufw status the result looks like this:

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)

However, I still get this error when trying to connect to the port with cURL.

Failed to connect to MY_IP_ADDRESS port 80: Connection refused

When I run this command netstat -ntlp | grep LISTEN to see what ports are open, I get this result:

(No info could be read for "-p": geteuid()=1000 but you should be root.)
tcp        0      0*               LISTEN      -               
tcp        0      0    *               LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN      -         

Which doesn't look that promising..

How do I open port 80 for incoming connections?


There is no program listening on port 80 so it's closed and you can't connect to it.

You can use

sudo python -m SimpleHTTPServer 80

to start a simple web server listening on port 80, or install something like Apache (package apache2) if you want a full blown web server.

| improve this answer | |

UFW is the Uncomplicated Firewall. It manages what ports on your computer can be opened for listening by an application. sudo ufw allow 80/tcp means allow TCP connections to port 80.

However, there is nothing actually listening in behind the port. To curl the port, there should be an application that will send a reply. This is typically called a server. As @Florian points out, you can use Python's SimpleHTTPServer to test it.

| improve this answer | |


sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Then to prevent it from losing the iptables configuration on restart, use:

sudo apt-get install iptables-persistent
| improve this answer | |

well what worked for me was to use iptable

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
| improve this answer | |
  • 2
    As a note this is not permanent. Will reset on reboot. – Oliver Dixon Apr 16 '17 at 22:31
  • @OliverDixon, yes correct – azerafati Apr 19 '17 at 6:53

you can use sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT this accepts the port when it configures with the port to prevent from losing this terminal line of code you can use sudo apt-get install iptables-persistent The reason for sudo in the beggining of a command is to let it run as superuser the persistant uses it as a persistant connection to the port that is supplied. You can also use you can use Python's SimpleHTTPServer to test it! This was a great question! Thank You!

| improve this answer | |

This works for me Just Allow the 80 from iptables

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.