Настройка фаервола iptables для Samba

Разрешение доступа клиентам

В этой статье объясняется, как настроить брандмауэр iptables, чтобы разрешить сетевым клиентам доступ к серверу Samba на узле Linux.
Я запускал серверы Samba уже несколько лет, всегда в частных сетях за брандмауэрами, и обычно отключал брандмауэр на внутреннем хосте, чтобы не усложнять настройку или избавиться от неожиданных багов. С годами я стал более сознательным в вопросах безопасности, и теперь я стараюсь всегда настраивать фаервол, чтобы впускать трафик только тот, что мне нужен. Эта краткая статья должна объяснить основы разрешения трафика Samba через iptables. А пока немного о самой Samba.

Порты, протоколы, и службы

В файле /etc/services несколько строк, связанных с Samba:

netbios-ns 137/tcp # NetBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NetBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NetBIOS Session Service
netbios-ssn 139/udp
microsoft-ds 445/tcp # Microsoft Directory Service
microsoft-ds 445/udp

На самом деле количество портов можно сократить к следующему виду:

netbios-ns 137/udp # NetBIOS Name Service
netbios-dgm 138/udp # NetBIOS Datagram Service
netbios-ssn 139/tcp # NetBIOS Session Service
microsoft-ds 445/tcp # Microsoft Directory Service

…потому что это порты, которые слушают службы сервера Samba. Первые три строки представляют порты, используемые сетью windows, так как сеть TCP/IP стала стандартной в операционной системе Windows 95. Оставшийся порт стал использоваться, когда Microsoft представила свою службу каталогов с Windows 2000. Для устранения неполадок или настройки полезно отметить, что протоколы UDP (порты 137 и 138) обслуживаются демоном nmbd, а протоколы TCP (порты 139 и 445) обслуживаются smbd.

Вы можете сами проверить, какие порты используются Samba, с помощью этих команд (от root):

# service smb stop
# netstat -ln > netstat-ln-smb.before
# service smb start
# netstat -ln > netstat-ln-smb.after
# diff netstat-ln-smb.*

И Вы увидите, что порты, перечисленные выше, появляются в выходных данных вместе с протоколом (TCP или UDP), которые используются для связи.

Настройка iptables

Разрешим же необходимые порты:

# iptables -A INPUT -p udp -m udp --dport 137 -j ACCEPT
# iptables -A INPUT -p udp -m udp --dport 138 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT

Затем перезапустим службу Samba:

# service iptables restart

В некоторых случаях есть хосты, которые не должны иметь доступа к серверу Samba. Вы можете ограничить диапазон IP-адресов, которые могут успешно подключаться к серверу Samba. Вот пример команд, вместо приведенных выше:

# iptables -A INPUT -p udp -m udp -s 192.168.0.0/24 --dport 137 -j ACCEPT
# iptables -A INPUT -p udp -m udp -s 192.168.0.0/24 --dport 138 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.0/24 --dport 445 -j ACCEPT

Этот пример позволит только хостам с IP-адресами между 192.168.0.1 и 192.168.0.254 связаться с сервером Samba.

Если требуется ограничить доступ только с одного хоста, используйте эти команды:

# iptables -A INPUT -p udp -m udp -s 192.168.0.1/32 --dport 137 -j ACCEPT
# iptables -A INPUT -p udp -m udp -s 192.168.0.1/32 --dport 138 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.1/32 --dport 139 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.1/32 --dport 445 -j ACCEPT

Эта конфигурация позволит только хосту с IP-адресом 192.168.0.1 связаться с сервером Samba.

Если вы хотите, чтобы несколько отдельных узлов или подсетей могли подключаться к серверу Samba, вам придется использовать несколько наборов из четырех строк конфигурации.

Настройка доступа в Samba

С помощью самой же Samba так же можно ограничить доступ. Но это скорее как вспомогательная опция к брэндмауэру.

interfaces -это глобальная опция в файле конфигурации smb.conf, которая может ограничить возможность установления соединений с Samba на одном или нескольких сетевых интерфейсах. В системах с одним сетевым интерфейсом эта опция может быть полезна только для того, чтобы Samba могла работать с интерфейсом loopback или создаваться программным обеспечением вроде VMware. Вот типичный пример использования этой опции:

interfaces = 192.168.100.1 127.0.0.1

Теперь порты слушаются только на loopback интерфейсе и интерфейсе с адресом 192.168.100.1

И еще два параметра hosts deny и hosts allow. С их помощью запрещаем или разрешаем доступ от источника:

hosts deny = 192.168.0.0/255.255.255.0
hosts allow = 192.168.1.0/255.255.255.0 192.168.3.10 192.168.3.12

Вот так.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2023

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!