Исходящий порт открыт на брандмауэре, как разблокировать для PHP?

Цель — отправить исходящую электронную почту с моего общего хоста на Mandrill через SMTP с использованием PHP, и я полностью сотрудничаю с администраторами хоста sys.

Текущая ситуация:

  • ✅ PHP может подключаться к порту smtp.mandrillapp.com 443 (используется для HTTPS)
  • ❌ PHP не может подключиться к порту smtp.mandrillapp.com 587 (используется для SMTP)
  • ✅ PHP может подключиться к порту 443 portquiz.net (используется для HTTPS)
  • ❌ PHP не может подключиться к порту 587 portquiz.net (используется для SMTP)
  • ✅ Telnet может подключиться к порту smtp.mandrillapp.com 443
  • ✅ Telnet может подключиться к порту smtp.mandrillapp.com 587

Telnet проверен тем, что они входят в систему как root и работают telnet HOST PORT, PHP проверяется с помощью сценария ниже.

Какой вариант конфигурации для PHP может вызывать блокировку исходящих соединений через порт 587? И как мы можем изменить эту конфигурацию?

<?php
// Test outbound server connections

// https://mandrill.zendesk.com/hc/en-us/articles/205582167-What-SMTP-ports-can-I-use-
$servers = array(
array("ssl://www.google.com", 443),
array("ssl://smtp.mandrillapp.com", 465),
array("smtp.mandrillapp.com", 25),
array("smtp.mandrillapp.com", 587),
array("smtp.mandrillapp.com", 2525),
array("smtp.mandrillapp.com", 443)
);

foreach ($servers as $server) {
list($server, $port) = $server;
echo "<h1>Attempting connect to <tt>$server:$port</tt></h1>\n";
flush();
$socket = fsockopen($server, $port, &$errno, &$errstr, 10);
if(!$socket) {
echo "<p>ERROR: $server:$portsmtp - $errstr ($errno)</p>\n";
} else {
echo "<p>SUCCESS: $server:$port - ok</p>\n";
}
flush();
}
?>

0

Решение

Насколько я знаю, невозможно заблокировать какие-либо конкретные порты с помощью PHP. (Может быть, с помощью suhosin, но я никогда не слышал об этом варианте.)

Не могли бы вы спросить у своего хостинг-провайдера, включен ли SELinux? SELinux позволяет операционной системе запретить определенным пользователям / процессам привязывать / подключаться к определенному порту. Это может быть причиной того, что они могут подключаться к SMTP-серверу, используя telnet в качестве пользователя root, но процесс PHP под вашим собственным пользователем не может. У меня были серверы CentOS, на которых мне не удалось подключиться к порту 80 с помощью PHP / Apache, но когда я запустил curl / wget от имени root, все прошло отлично.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]