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

iptables / netfilter правила для доступа samba / netbios

Какие iptables-rules я должен установить, чтобы разрешить клиентам доступ к серверу samba с работающим netbios (то есть возможность использовать \ MyServer вместо \ 192.168.0.1 для доступа к серверу из Windows)?

У меня есть небольшой офисный сервер, который выполняет NAT / маскировку между внутренней и внешней сетью и обслуживает dns (пересылку), dhcp и samba с сервером netbios во внутреннюю сеть.

Моя текущая конфигурация iptables:

    # Loeschen aller vorhandener Regeln
    $IPT -F

    # Default Policy setzen
    $IPT -P INPUT DROP
    $IPT -P OUTPUT DROP
    $IPT -P FORWARD DROP

    # Loopback komplett freischalten
    $IPT -A INPUT -i $LO -j ACCEPT
    $IPT -A OUTPUT -o $LO -j ACCEPT

    # Bestehende Verbindungen auf allen Interfaces erlauben
    $IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    $IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    # Ping auf allen Interfaces erlauben
    $IPT -A INPUT -p icmp -j ACCEPT

    # Eingehende Verbindungen aus dem internen Netz erlauben
    # SSH, HTTP, HTTPS, Squid
    $IPT -A INPUT -i $INT -m state --state NEW -m multiport -p tcp --dport 22,80,443,8080  -j ACCEPT
    # DNS
    $IPT -A INPUT -i $INT -m state --state NEW -p tcp --dport domain -j ACCEPT
    $IPT -A INPUT -i $INT -m state --state NEW -p udp --dport domain -j ACCEPT
    # Samba
    $IPT -A INPUT -i $INT -m state --state NEW -p udp --dport 137 -j ACCEPT
    $IPT -A INPUT -i $INT -m state --state NEW -p udp --dport 138 -j ACCEPT
    $IPT -A INPUT -i $INT -m state --state NEW -p tcp --dport 139 -j ACCEPT
    $IPT -A INPUT -i $INT -m state --state NEW -p tcp --dport 445 -j ACCEPT

    # Ausgehende Verbindungen ins interne Netz erlauben
    # Samba
    $IPT -A OUTPUT -o $INT -m state --state NEW -p udp --sport 137 -j ACCEPT
    $IPT -A OUTPUT -o $INT -m state --state NEW -p udp --sport 138 -j ACCEPT
    $IPT -A OUTPUT -o $INT -m state --state NEW -p tcp --sport 139 -j ACCEPT
    $IPT -A OUTPUT -o $INT -m state --state NEW -p tcp --sport 445 -j ACCEPT

    # Eingehende Verbindungen aus dem externen Netz erlauben
    # SSH vom Sprungserver
    $IPT -A INPUT -i $EXT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT

    # Ausgehende Verbindungen ins externe Netz erlauben
    # HTTP
    $IPT -A OUTPUT -o $EXT -m state --state NEW -p tcp --dport http -j ACCEPT
    # DNS
    $IPT -A OUTPUT -o $EXT -m state --state NEW -p udp --dport domain -j ACCEPT
    $IPT -A OUTPUT -o $EXT -m state --state NEW -p tcp --dport domain -j ACCEPT

    # Transparenter Proxy für HTTP über Squid
    $IPT -t nat -A PREROUTING -i $INT -p tcp --dport 80 -j REDIRECT --to-port 8080

    # Routing
    # Forwarding
    $IPT -A FORWARD -i $INT -o $EXT -j ACCEPT
    $IPT -A FORWARD -i $EXT -o $INT -m state --state RELATED,ESTABLISHED -j ACCEPT
    # NAT
    $IPT -t nat -A POSTROUTING -o $EXT -j MASQUERADE

С этим набором правил доступ по ip-адресу работает хорошо, но нет рабочего разрешения имен. Какие порты я должен разрешить?

Проверял работоспособность с помощью smbclient как с самого сервера, так и с клиента:

root@client:~# smbclient -L //192.168.40.254/
Enter root's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

    Sharename       Type      Comment
    ---------       ----      -------
    IPC$            IPC       IPC Service (samba-debian)
    lehrer          Disk      Lehrer
    print$          Disk      Printer Drivers
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

    Server               Comment
    ---------            -------
    SAMBA-DEBIAN         samba-debian

    Workgroup            Master
    ---------            -------
    WORKGROUP            SAMBA-DEBIAN



root@client:~# smbclient -L //samba-debian/
Enter root's password:
Connection to samba-debian failed (Error NT_STATUS_CONNECTION_REFUSED)



root@samba-debian:~# smbclient -L //192.168.40.254/
Enter root's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

    Sharename       Type      Comment
    ---------       ----      -------
    IPC$            IPC       IPC Service (samba-debian)
    lehrer          Disk      Lehrer
    print$          Disk      Printer Drivers
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

    Server               Comment
    ---------            -------
    SAMBA-DEBIAN         samba-debian

    Workgroup            Master
    ---------            -------
    WORKGROUP            SAMBA-DEBIAN



root@samba-debian:~# smbclient -L //samba-debian/
Enter root's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

    Sharename       Type      Comment
    ---------       ----      -------
    IPC$            IPC       IPC Service (samba-debian)
    lehrer          Disk      Lehrer
    print$          Disk      Printer Drivers
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

    Server               Comment
    ---------            -------
    SAMBA-DEBIAN         samba-debian

    Workgroup            Master
    ---------            -------
    WORKGROUP            SAMBA-DEBIAN

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

Делаю tcpdump на сервере на 53 порте на внутреннем интерфейсе - ничего нет:

root@samba-debian:~# tcpdump -i eth1 port 53
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
0 packets captured
0 packets recieved by filter
0 packets recieved by kernel

Одна из полезных вещей - вставить следующий фильтр журнала в конец iptables файл правил.

$IPT -A OUTPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4
$IPT -A INPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4
$IPT -A FORWARD -m limit --limit 2/min -j LOG --log-prefix "IPTables-FWD-Dropped: " --log-level 4

Вышеуказанное сообщит, что отсутствует, и я предполагаю, что FORWARD зарегистрирует это сообщение для вас.

Если вы хотите, чтобы ваш SMB-сервер был доступен за пределами одного маршрутизатора, вы обнаружите, что вам также необходимо вставить те же 4 правила для -A FORWARD (порт 137, 138, 139, 445)

Хотя я не эксперт по SMB, вы можете добавить порт 137 / tcp, 138 / tcp, 139 / udp в каждый из INPUT, OUTPUT и, если требуется извне, FORWARD.