Как открыть брандмауэр порта на Ubunto внутри и как это проверить

Фон

У меня есть машина aws, на которой работает приложение laravel, и теперь я попытался установить консоль beanstalk. Вот как выглядит файл конфигурации nginx приложения laravel:

include forge-conf/default/before/*;

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name default;
    root /home/forge/default/public;

    # FORGE SSL (DO NOT REMOVE!)
    # ssl_certificate;
    # ssl_certificate_key;

    ssl_protocols ..
    ssl_ciphers ..
    ssl_prefer_server_ciphers on;
    ssl_dhparam ..

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    # FORGE CONFIG (DOT NOT REMOVE!)
    include forge-conf/default/server/*;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/default-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Вот как выглядит файл конфигурации nginx приложения beanstalk:

server {
    listen 8080;
    listen [::]:8080;
    server_name beanstalk_server;
    root /home/forge/beanstalk-console/public;

    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log  /var/log/nginx/default-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Вопрос

когда я пытаюсь ударить server-ip:8080 Я получаю ошибку:

server-ip took too long to respond.

Я убедился, что это не относится к полномочиям, так как я обновил входящие правила для экземпляра aws следующим образом:

но все же не повезло, я знаю, что это не проблема с самой консолью beanstalk, b / c, если я просто переключаю порты (то есть, если заставить консоль beanstalk слушать порт 80 вместо 8080, она работает просто отлично. Я также попробовал другой порт как 1515 и он все еще не работал)..

также я знаю, что localhost:8080 работает просто отлично, б / с работает

wget localhost:8080 

возвращает HTML-сайт для beanstalk.

Следует иметь в виду, что моя машина aws также находится за балансировщиком нагрузки... который перенаправляет http-запросы на балансировщик нагрузки на порт 80 на порт 80 машины... но я не думаю, что это будет иметь какое-либо значение

что я делаю?

Обновить

я проверил свой журнал доступа (tail -f /var/log/nginx/access.logtail -f /var/log/nginx/access.log) и журналы ошибок ($ tail -f /var/log/nginx/error.log) и ничего не нашел там, когда я попытался получить доступ к бобовому стеблю

это вывод моей команды netstat

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11997/nginx -g daem
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      11997/nginx -g daem
tcp        0      0 10.0.17.158:80          10.0.1.251:19336        ESTABLISHED 11998/nginx: worker
tcp        0      0 10.0.17.158:80          10.0.17.87:62074        ESTABLISHED 11998/nginx: worker
tcp        0      0 10.0.17.158:80          10.0.17.101:59938       ESTABLISHED 11998/nginx: worker
tcp        0      0 10.0.17.158:80          10.0.17.101:60988       ESTABLISHED 11998/nginx: worker
tcp        0      0 10.0.17.158:80          10.0.1.21:63633         ESTABLISHED 11998/nginx: worker
tcp        0      0 10.0.17.158:80          10.0.1.21:62603         ESTABLISHED 11998/nginx: worker
tcp        0      0 10.0.17.158:80          10.0.17.87:63110        ESTABLISHED 11998/nginx: worker
tcp        0      0 10.0.17.158:80          10.0.1.251:20344        ESTABLISHED 11998/nginx: worker
tcp6       0      0 :::80                   :::*                    LISTEN      11997/nginx -g daem
tcp6       0      0 :::8080                 :::*                    LISTEN      11997/nginx -g daem

обновление 2: настройки брандмауэра

Похоже, что порт 8080 не защищен брандмауэром.

netstat -ntlp | grep LISTEN
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:11300           0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:587           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11998/nginx: worker
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      11998/nginx: worker
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::3306                 :::*                    LISTEN      -
tcp6       0      0 :::80                   :::*                    LISTEN      11998/nginx: worker
tcp6       0      0 :::8080                 :::*                    LISTEN      11998/nginx: worker
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 :::5432                 :::*                    LISTEN      -

Я также запустил nmap:

nmap 10.0.17.158

Starting Nmap 7.01 ( https://nmap.org ) at 2017-10-11 10:38 EEST
Nmap scan report for 10.0.17.158
Host is up (0.000068s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3306/tcp open  mysql
5432/tcp open  postgresql
8080/tcp open  http-proxy

2 ответа

Решение

Опираясь на ответ Шади и проверив, действительно ли AWS действительно перенаправляет порт 8080 на компьютер, проблема возникла из-за iptables,

Я не уверен, как проверить, заблокирован ли порт или нет с помощью iptables, но вот команда, которая разрешит порт 8080:

Это команда iptables, которая разрешает доступ к порту 8080 с уровня операционной системы:

sudo iptables -I INPUT 1 -i eth0 -p tcp --dport 8080 -j ACCEPT

(для справки по команде iptables, смотрите этот отличный пост, прямые цитаты отформатированы как таковые, и я также добавил свои собственные объяснения к остальным):

-I INPUT 1: флаг -I указывает iptables вставить правило. Это отличается от флага -A, который добавляет правило в конец. Флаг -I занимает цепочку и позицию правила, в которую вы хотите вставить новое правило.

в этом случае мы добавляем это правило как самое первое правило в цепочке INPUT. Это нарушит остальные правила. Мы хотим, чтобы это было наверху, потому что это фундаментально и не должно зависеть от последующих правил.

-i eth0: этот компонент правила соответствует, если интерфейс, который использует пакет, является интерфейсом "eth0" (ethernet).

-p tcp: это просто указание протокола tcp

- порт 8080: порт, о котором мы говорим

-j ПРИНЯТЬ: указывает цель сопоставления пакетов. Здесь мы сообщаем iptables, что пакеты, которые соответствуют предыдущим критериям, должны быть приняты и пропущены.

Как проверить, открыт порт или нет?

Как уже упоминалось в приведенной выше ссылке, вы можете просто запустить следующее:

sudo iptables -S

это выведет много правил, в зависимости от вашей настройки. Чтобы прорваться через погоню, просто запустите эту команду

$ sudo iptables -S | grep "dport 8080"
-A INPUT -i eth0 -p tcp -m tcp --dport 8080 -j ACCEPT

так что оттуда вы можете сразу узнать, что происходит с портом 8080

Как сохранить команду iptables?

Просто используйте iptables-persistent пакет:

sudo apt-get update
sudo apt-get install iptables-persistent

Это сохранит правила iptables при новой установке, обратитесь к ссылке выше для получения более подробной информации.

Так как localhost:8080 работает, таким образом, запрос извне не достигает вашего сервера, который прослушивает этот порт 8080. Проверьте ниже

  1. AWS направляет запросы на ваш сервер (что должно быть в зависимости от вашей конфигурации)
  2. Проверьте конфигурацию брандмауэра для имеющегося у вас экземпляра. Какую ОС вы используете? возможно конфиг запрещает доступ к этому порту
Другие вопросы по тегам