我必须设置哪些iptables-rules来允许客户端访问使用netbios的samba服务器(即,能够使用\ MyServer而不是\ 192.168.0.1从Windows访问服务器)?
我有一个小型的办公室服务器,在内部网和外部网之间进行NAT /伪装,并通过netbios服务器向内部网提供dns(转发),dhcp和samba服务。
我目前的iptablesconfiguration:
# 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地址访问function,但没有工作名称parsing。 我必须允许哪些端口?
我使用smbclient从服务器本身和客户端检查了function:
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的代码。
在内部接口的端口53上的服务器上做tcpdump – 没有什么:
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规则文件的末尾插入以下日志filter。
$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
以上将报告什么是缺less的,我猜FORWARD会logging这些消息给你。
如果您希望您的SMB服务器可以从一个路由器跳转之外访问,则会发现您还需要为-A FORWARD (端口137,138,139,445)插入相同的4个规则,
虽然我不是SMB专家,但您也可以在INPUT,OUTPUT和外部需要的FORWARD中添加端口137 / tcp,138 / tcp,139 / udp。