我有一个Xen服务器上有几台虚拟机,它坐在我局域网上的普通PC上。 虚拟机提供了访问网页的内容。 Httpd就是其中之一,所以让我们以此为例。
我想configurationiptables(或我的networking),如下所示:
允许回送
-A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT
允许端口80从/到WAN(networking)的入站/出站连接。
允许端口foo进/出局域网上列入白名单的计算机的stream量,同时拒绝其余的局域网。
#allow one ip with port foo -A INPUT -i eth0 -p tcp -s 192.168.0.w --dport foo -m state --state NEW,ESTABLISHED -j ACCEPT -A OUTPUT -o eth0 -p tcp --sport foo -m state --state ESTABLISHED -j ACCEPT #block the rest of the lan -A INPUT -i eth0 -m iprange --src-range 192.168.1.x-192.168.1.y -j DROP -A OUTPUT -o eth0 -m iprange --src-range 192.168.1.m-192.168.1.n -j DROP
拒绝所有其他types的stream量。
-P INPUT DROP -P OUTPUT DROP -P FORWARD DROP
基本上,我希望我的虚拟机只能与networking和其他虚拟机(在局域网内的某个块范围内)通信。 这可能只是使用iptables? 如果不是,我将如何实现这一目标?
我目前的iptables看起来是这样的(其中大部分是由centos预先生成的):
# Generated by iptables-save v1.4.7 on Tue Mar 12 10:43:43 2013 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Tue Mar 12 10:43:43 2013
目前与我的开发箱,我可以访问我的内容,但我希望加强我的networking,并保护我的非服务器电脑。 而且我还没有足够的经验与iptables相信我的自我。
提前致谢。 PS我还需要考虑Dom0和虚拟机之间的networking通信。
乍一看,build议的规则似乎没有问题。 但是不要忘了允许DNSstream量 – 目标UDP端口53到您的广域网上的DNS服务器。
也许我回答了自己的问题,正在和一位朋友谈这个问题。 这是我们想出来的,如果它帮助任何人。
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT #Loopback -A INPUT -i lo -j ACCEPT #DNS Servers -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT #SSH conditional -A INPUT -i eth0 -p tcp -s 192.168.0.x --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -A OUTPUT -o eth0 -p tcp -d 192.168.0.x --sport 22 -m state --state ESTABLISHED -j ACCEPT #communicate with some other server on the lan -A INPUT -i eth0 -p tcp -s 192.168.0.y --dport yp -m state --state NEW,ESTABLISHED -j ACCEPT -A OUTPUT -o eth0 -p tcp -d 192.168.0.y --sport yp -m state --state ESTABLISHED -j ACCEPT #HTTP -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT #HTTPS -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT #Drop other output to my LAN -A OUTPUT -d 192.168.0.1/24 -j REJECT -A INPUT -j DROP -A FORWARD -j DROP COMMIT