LinuxForum.Fans
Тема

Открыть порт под опред.папку на VPS CentOS

Автор: iAlexandre 20 сообщений 5371 просмотров
#384918

Всем привет, извиняюсь за нубские вопросы, но несколько дней только имею дело с настройкой CentOS на VPS, поэтому не все понятно, а в море инфы просто тону и как на зло - нужно срочно поднять сервер. Итак, имеется CentOS 6 с установленными MySQL, FTP, PHP, Apache, вопросы:

1. если у меня VPS и доступ к нему в итоге мне нужен по его же IP, доменное имя привязывать не планирую, я могу в итоге сайт заливать в /var/www/ ? Либо же для корректной работы всех модулей (MySQL, PHP, Apache) нужно заливать в /home/mysite/www/ ?

2. как мне открыть для определенной папки определенный порт? Например, если можно все сливать в /var/www/, то, допустим, там папка portforw и вот только для нее нужно открыть порт 5005 что бы весь трафик идущий на мой VPS по этому порту шел только в эту папку.

Заранее весьма благодарен за ответы *DRINK*

#384921
iAlexandre написал:


1. если у меня VPS и доступ к нему в итоге мне нужен по его же IP, доменное имя привязывать не планирую, я могу в итоге сайт заливать в /var/www/ ? Либо же для корректной работы всех модулей (MySQL, PHP, Apache) нужно заливать в /home/mysite/www/ ?

Заливайте в ту, которая в httpd.conf указана как DocumentRoot

Пример:

Показать

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"

iAlexandre написал:

2. как мне открыть для определенной папки определенный порт? Например, если можно все сливать в /var/www/, то, допустим, там папка portforw и вот только для нее нужно открыть порт 5005 что бы весь трафик идущий на мой VPS по этому порту шел только в эту папку.

Может имеет смысл просто ограничить доступ к каталогу паролем. Например по http или ftp.?

#384926
"Marley" написал:
Заливайте в ту, которая в httpd.conf указана как DocumentRoot

Понял, спасибо большое!

"Marley" написал:
Может имеет смысл просто ограничить доступ к каталогу паролем. Например по http или ftp.?

Дело в том, что у меня на VPS будет небольшой сервер сбора данных с устройств, которые заточены под этот порт и конкретную папку на сервере, изменить в настройках я могу лишь IP-адрес, поэтому для правильной работы нужно как-то открыть этот самый порт для этой папки. :(

#384929
iAlexandre написал:

Дело в том, что у меня на VPS будет небольшой сервер сбора данных с устройств, которые заточены под этот порт и конкретную папку на сервере, изменить в настройках я могу лишь IP-адрес, поэтому для правильной работы нужно как-то открыть этот самый порт для этой папки. :(

Порт можно открыть для программы, которая будет слушать этот самый порт и выполнять какие-либо действия с каталогами и файлами на сервере. Например, создавать их или читать, редактировать и т.д.

Открыть порт для папки, скорее всего нельзя.

---------------------
Можно настроить apache, чтобы он работал на каком-нибудь другом порту и предоставлял доступ по http к любому каталогу на сервере.

#384932
"Marley" написал:
Открыть порт для папки, скорее всего нельзя.

Ок, а если просто открыть порт на сервере и направить трафик через него в нужную папку? Или это одно и тож е получается с тем,что я описал выше?

И если этого сделать нельзя - это только из-за CentOS либо как? Ибо вообще такое делают, раз устройства заточены. Да и в работе я такое видел.

#384934

Скорее всего вам нужно все навсего инсталлировать и запустить вашу программу сервер и открыть порт на фаерволе.

#384939
"Marley" написал:
Скорее всего вам нужно все навсего инсталлировать и запустить вашу программу сервер и открыть порт на фаерволе.

Спасибо, попробую.

Это делается так?

text
iptables -A INPUT -s какой_нужно_писать_IP? -p udp -m multiport  --ports 5005, 8090 -j ACCEPT
iptables -A OUTPUT -d какой_нужно_писать_IP? -p udp -m multiport  --ports 5005, 8090 -j ACCEPT
iptables -A INPUT -s какой_нужно_писать_IP? -p tcp -m multiport  --ports 5005, 8090 -j ACCEPT
iptables -A OUTPUT -d какой_нужно_писать_IP? -p tcp -m multiport  --ports 5005, 8090 -j ACCEPT
#384945

Не являюсь специалистом по firewall.

Думаю команда приблизительно такая:

text
# iptables -I INPUT -p tcp --dport нужный_порт -j ACCEPT
#385026

По моему ему нужен банальный виртуалхост на определенном порте. То есть сайт должен открываться по адресу http://111.112.113.222:5005
Сайты по умолчанию лежать в директории /var/www/html/
Чтобы сайт открывался на порту 5005, надо создать файл(ы) виртуального хоста в директории /etc/httpd/conf.d/
Например для известного почтового веб интерфейса Rouncube:

text
# vi /etc/httpd/conf.d/roundcube.conf

Virtualhost mail.company.ru:443>
ServerName mail.company.ru
ServerAdmin admin@company.ru
DocumentRoot "/var/www/html/roundcube/"
#SSLEngine off
#SSLCertificateFile /etc/postfix/certs/cert.pem
#SSLCertificateKeyFile /etc/postfix/certs/key.pem
# Поскольку roundcube написан на PHP и мы
# не предполагаем запуск чего-либо кроме PHP скриптов
# на этом виртуалхосте, то на всякий случай отключаем CGI
# и запрещаем изменение параметров ./htaccess'ом
<Directory "/var/www/html/roundcube/">
Options -ExecCGI
AllowOverride None
#SSLRequireSSL
</Directory>
# Запрещаем PHP скриптам выходить за пределы
# директории виртуалхоста
php_admin_value open_basedir /var/www/html/roundcube
php_admin_value safe_mode_include_dir /var/www/html/roundcube
#php_admin_value safe_mode_exec_dir /noexec
php_admin_value doc_root /var/www/html/roundcube
php_admin_value upload_tmp_dir /var/www/html/roundcube/temp
php_admin_value session.save_path /var/www/html/roundcube/temp
# Логирование
ErrorLog /var/log/httpd/roundcube-error.log
TransferLog /var/log/httpd/roundcube-access.log
</Virtualhost>

Здесь в строчке:

Virtualhost mail.company.ru:443

Надо поменять порт с 443 на 5005. И можно еще поменять mail.company.ru на ваш IP адрес.
И можно еще попробовать, добавить упоминание виртуального сайта в /etc/httpd/conf.d/httpd.conf:

<VirtualHost 192.168.1.2:80> # Ваш IP адрес
ServerAdmin admin@company.ru
# Redirect permanent / https://mail.company.ru
DocumentRoot /var/www/html/roundcube/
ServerName mail.company.ru
ErrorLog logs/mail.company.ru-error_log
CustomLog logs/mail.company.ru-access_log common
</VirtualHost>

И тогда возможно откроется ваш сайт.
Поиграйтесь с файлами виртуальных сайтов.
Я создаю один файл и добавляю упоминание в httpd.conf, так как у меня веб интерфейс работает по HTTPS.

Да, и еще не забудьте настроить фаервол iptables, открыть порты 5005 и 8090:

text
iptables -A INPUT -p tcp -m multiport --dports 5005,8090  -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 5005,8090  -j ACCEPT

Возможно я не прав, но думаю это вам и надо.

#385069

AlfaStriker, спасибо, но это, наверное, немного не то.

Объясню ситуацию: у меня имеется образ готового сервера, я его развернул на настроенном VPS'e, теперь осталось для полноценной работы открыть порт. В образ "вшита" проверка работы порта: если он будет работать как нужно, то при наборе myip:5005 сервер выдаст на страницу "OK".

Пока этого не происходит ( По Вашему методу в roundcube.conf что писать-то, если мне roundcube не нужен?)

#385071

Отключите firewall и проверьте работает ли ваша программа без него.

[console]
# service iptables stop
[/console]

p.s. почитайте, что такое порт.

#385291

Marley, пробовал остановить iptables, не помогло (

#385299

Значит проблема не в том, что порт закрыт фаерволом. (И его не нужно пытаться открыть.)
Я бы дальше посмотрел, слушает ли программа указанный порт и попробовал бы к ней подключиться телнетом.

#385510
"Marley" написал:
посмотрел, слушает ли программа указанный порт и попробовал бы к ней подключиться телнетом

А с этого места можно подробнее, пожалуйста?:)

#385515

iAlexandre

[console]# netstat -tulpn | grep 80[/console]

text

tcp        0      0 :::80                       :::*                        LISTEN      1215/httpd 

Собственно вижу, что порт 80 слушает apache (httpd)

Проверяю:

# telnet 192.168.1.11 80

text

Trying 192.168.1.11...
[b]Connected[/b] to 192.168.1.11.
Escape character is '^]'.

Все ок.

#385789

Спасибо, а как теперь бы заставить апач слушать нужные мне порты?

[console]telnet xx.xx.xx.xx 5005
Trying xx.xx.xx.xx...
telnet: connect to address xx.xx.xx.xx: Connection refused[/console]

#385791

Нужно в httpd.conf заменить
Listen 80 (или 8080) на 5005

========
Если нужно, чтобы apache работал на 80 порту и на 5005, нужно сделать как описал AlfaStriker.

#387393

Так-с, ну собственно что-то вроде получилось, спасибо Вам огромное. :)

[console][root@vps ~]# netstat -tulpn | grep 5005
tcp 0 0 0.0.0.0:5005 0.0.0.0:* LISTEN 5345/httpd

[root@servicvps ~]# telnet хх.хх.хх.хх 5005
Trying хх.хх.хх.хх...
Connected to хх.хх.хх.хх.
Escape character is '^]'.[/console]

Значится порт открыт. А почему тогда я его не вижу тут:
[console][root@vps ~]# nmap -sT -O localhost

Starting Nmap 5.51 ( http://nmap.org ) at 2014-07-22 19:30 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000062s latency).
Other addresses for localhost (not scanned): 127.0.0.1
rDNS record for 127.0.0.1: localhost.localdomain
Not shown: 994 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
443/tcp open https
3306/tcp open mysql
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:

Network Distance: 0 hops

OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.08 seconds[/console]

#387395

Я не настолько хорошо знаю как работает nmap.

Можно посмотреть с помощью nmap определенный порт.

[console]# nmap -A localhost -p 5005[/console]

#387413

полистал логи, сделал:

[console]# nmap -A localhost -p 5005
PORT STATE SERVICE VERSION
5005/tcp open http Apache httpd 2.2.15 ((CentOS))[/console]

наконец-то вздохнул, спасибо:)

Войдите или зарегистрируйтесь, чтобы ответить.