Назад | Перейти на главную страницу

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

Задний план

У меня есть машина 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 работает нормально, работает b / c

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) и ничего не нашел, когда попытался получить доступ к beanstalk

это результат моей команды 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

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

  1. AWS направляет запросы на ваш сервер (что должно быть в зависимости от вашей конфигурации)
  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

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

-j ACCEPT: указывает цель совпадающих пакетов. Здесь мы сообщаем 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 при новой установке, подробности см. По ссылке выше.