← Назад к вопросам

Как открыть сетевой порт в Linux

1.0 Junior🔥 151 комментариев
#Linux и администрирование#Сети и протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Открытие сетевого порта в Linux: полное руководство

Открытие сетевого порта в Linux — фундаментальная операция для DevOps-инженера, требующая понимания нескольких уровней сетевой инфраструктуры. Процесс включает настройку брандмауэра, конфигурацию служб и управление сетевыми политиками. Рассмотрим все аспекты подробно.

1. Проверка текущего состояния портов

Перед открытием порта необходимо проверить его текущий статус:

# Проверка прослушиваемых портов
sudo ss -tulpn | grep :<PORT_NUMBER>

# Альтернатива с netstat
sudo netstat -tulpn | grep :<PORT_NUMBER>

# Проверка конкретного порта
sudo lsof -i :<PORT_NUMBER>

2. Настройка брандмауэра (Firewall)

FirewallD (RHEL/CentOS/Fedora)

# Добавление порта
sudo firewall-cmd --permanent --add-port=<PORT_NUMBER>/tcp
sudo firewall-cmd --permanent --add-port=<PORT_NUMBER>/udp

# Для диапазона портов
sudo firewall-cmd --permanent --add-port=8000-9000/tcp

# Применение изменений
sudo firewall-cmd --reload

# Проверка
sudo firewall-cmd --list-ports
sudo firewall-cmd --list-all

UFW (Ubuntu/Debian)

# Разрешение порта
sudo ufw allow <PORT_NUMBER>/tcp
sudo ufw allow <PORT_NUMBER>/udp

# С указанием приложения
sudo ufw allow ssh
sudo ufw allow 'Nginx Full'

# Включение UFW (если отключен)
sudo ufw enable

# Проверка правил
sudo ufw status verbose
sudo ufw status numbered

Iptables (универсальный метод)

# Разрешение входящих соединений
sudo iptables -A INPUT -p tcp --dport <PORT_NUMBER> -j ACCEPT
sudo iptables -A INPUT -p udp --dport <PORT_NUMBER> -j ACCEPT

# Сохранение правил (зависит от дистрибутива)
# Для RHEL/CentOS:
sudo service iptables save

# Для Debian/Ubuntu:
sudo iptables-save > /etc/iptables/rules.v4

# Просмотр правил
sudo iptables -L -n -v

3. Настройка служб и приложений

Открытие порта в брандмауэре бесполезно, если служба не настроена на прослушивание:

Изменение конфигурации служб

# Пример для SSH (изменение порта в /etc/ssh/sshd_config)
Port 2222
# Затем перезапуск
sudo systemctl restart sshd

# Пример для Nginx
server {
    listen 8080;
    server_name example.com;
    # ... остальная конфигурация
}

4. SELinux контекст (для RHEL/CentOS)

Если SELinux включен, необходимо настроить контекст безопасности:

# Разрешение порта в SELinux
sudo semanage port -a -t http_port_t -p tcp 8080

# Просмотр разрешенных портов
sudo semanage port -l | grep http_port_t

# Временное отключение SELinux для отладки
sudo setenforce 0
# Но лучше настроить правильно!

5. Проверка доступности порта

После настройки обязательно проверьте:

# Локальная проверка
sudo netstat -tulpn | grep :<PORT_NUMBER>

# Проверка с удаленного хоста
nc -zv <IP_ADDRESS> <PORT_NUMBER>
telnet <IP_ADDRESS> <PORT_NUMBER>

# Использование nmap
nmap -p <PORT_NUMBER> <IP_ADDRESS>

6. Автоматизация через Ansible

Для инфраструктуры как кода:

# Пример playbook Ansible для открытия порта
- name: Configure firewall for application
  hosts: webservers
  become: yes
  tasks:
    - name: Open port 8080/tcp in firewalld
      ansible.builtin.firewalld:
        port: 8080/tcp
        permanent: yes
        state: enabled
      notify: reload firewalld
  
  handlers:
    - name: reload firewalld
      ansible.builtin.systemd:
        name: firewalld
        state: reloaded

7. Безопасность и лучшие практики

При открытии портов соблюдайте принцип минимальных привилегий:

  • Открывайте только необходимые порты
  • Используйте нестандартные порты для снижения риска автоматических атак
  • Ограничивайте доступ по IP (если возможно):
    sudo ufw allow from 192.168.1.0/24 to any port 22
    sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
    
  • Регулярно аудитируйте открытые порты
  • Используйте VPN или jump-хосты вместо открытия портов управления напрямую в интернет

8. Диагностика проблем

Если порт не открывается:

  1. Проверьте брандмауэр: sudo firewall-cmd --list-all или sudo ufw status
  2. Убедитесь, что служба запущена: sudo systemctl status <service_name>
  3. Проверьте конфигурацию приложения
  4. Исключите конфликты SELinux: sudo ausearch -m avc -ts recent
  5. Проверьте сетевые интерфейсы: ip addr show
  6. Убедитесь, что порт не занят: sudo ss -tulpn

Заключение

Открытие порта в Linux — многоуровневый процесс, требующий координации между брандмауэром, службами и системой безопасности. В продакшн-средах рекомендую использовать инфраструктуру как код (Terraform, Ansible) для управления портами, что обеспечивает воспроизводимость, контроль версий и упрощает аудит. Всегда документируйте изменения и соблюдайте принципы минимальных привилегий для поддержания безопасности инфраструктуры.

Как открыть сетевой порт в Linux | PrepBro