我正在尝试在我的xen主机服务器上设置IPTABLES,它将阻止对同一台机器上的xen客户端的传入和/或传出访问。 具体来说,我需要阻止输出端口25的stream量和input端口53的stream量到一个特定的容器。
常规的IPTABLE规则只会影响到主机的stream量 – 而不是xen客户端。
对于我的服务器,eth0是内部networking,eth1是外部networking。
下面的规则集似乎应该工作,但容器根本不受影响:
iptables -A OUTPUT -p tcp -m状态-state新build立,相关-sport 25 -d -j拒绝 iptables -A INPUT -p tcp -m状态-state新build,相关-dport 53 -d -j拒绝 iptables -A INPUT -p udp -m状态-state新build,相关-dport 53 -d -j拒绝
所以基本上,我如何设置一个IPTABLE规则,将适用于Xen客户端而不是Xen主机?
谢谢
这个规则工作离子我的安装:
iptables -I FORWARD 1 -d [client-ip] -p tcp -m tcp --dport 53 -j DROP iptables -I FORWARD 1 -d [client-ip] -p udp -m udp --dport 53 -j DROP
请注意,netfilter从上到下读取规则,如果你有一个规则允许上面的客户端的所有stream量( iptables -A将规则添加到表的末尾 ),这个新规则将不会达到,不会有影响。
我不明白你为什么使用“状态”模块,如果你列出所有有效的状态? 它只是使用CPU时间,并没有效果恕我直言。
接下来,我不确定,从端口25开始阻塞stream量的目标是什么。如果客户端发送电子邮件,他将连接到远程服务器的端口25,但使用本地端口之一 (默认为32k..64k )在他身边。 你能不能解释一下,你想得到什么结果?
你可以玩iptables的“physdev”模块。 但请记住,xen插件(即将其放在防火墙规则列表的开始位置)在guest虚拟机启动时使用完全访问规则。 所以,你应该调整xen逻辑。
我自己的简单的防火墙为主机与任务:
#!/bin/bash # ====== Public settings ====== LAN='192.168.0.0/24' WAN='0.0.0.0/0.0.0.0' HOST_IP='192.168.0.20' ADMIN_PORTS='22,873' DB_IP='192.168.0.6' MYSQL_PORTS='3306' DB_PORTS="$ADMIN_PORTS,$MYSQL_PORTS" WS_IP='192.168.0.10' WS_PORTS="$ADMIN_PORTS,80" WS2_IP='192.168.0.9' WS2_PORTS="$ADMIN_PORTS,8082" XP_IP='192.168.0.7' XP_PORTS="$ADMIN_PORTS,3389,6666,6688,12345" # ====== Private settings ====== IPTABLES='/sbin/iptables' clearTables() { $IPTABLES -t filter -P INPUT ACCEPT $IPTABLES -t filter -P FORWARD ACCEPT $IPTABLES -t filter -P OUTPUT ACCEPT $IPTABLES -t nat -P PREROUTING ACCEPT $IPTABLES -t nat -P POSTROUTING ACCEPT $IPTABLES -t nat -P OUTPUT ACCEPT $IPTABLES -t mangle -P PREROUTING ACCEPT $IPTABLES -t mangle -P INPUT ACCEPT $IPTABLES -t mangle -P OUTPUT ACCEPT $IPTABLES -t mangle -P FORWARD ACCEPT $IPTABLES -t mangle -P POSTROUTING ACCEPT $IPTABLES -t filter -F $IPTABLES -t nat -F $IPTABLES -t mangle -F $IPTABLES -t filter -X $IPTABLES -t nat -X $IPTABLES -t mangle -X } listTables(){ for table in filter nat mangle; do echo "=========== $table ============"; $IPTABLES -t $table -n -L; echo; done } clearTables PHYSDEV='-m physdev --physdev-is-bridged' # ====== Firewall logic ====== #========= Common permissions for host machine ========== $IPTABLES -A FORWARD $PHYSDEV -p ALL -s $HOST_IP -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -p ALL -d $HOST_IP -j ACCEPT # ======= For all (guests) ======= # DNS $IPTABLES -A FORWARD $PHYSDEV -p udp --dport 53 -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -p udp --sport 53 -j ACCEPT # ping #$IPTABLES -A FORWARD $PHYSDEV -p icmp -s $DB_IP -d $LAN -j REJECT $IPTABLES -A FORWARD $PHYSDEV -p icmp -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -p icmp -j ACCEPT #======= DB server ====== # LAN <--> admin ports $IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $DB_IP -p tcp -m multiport --dports $ADMIN_PORTS -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -s $DB_IP -d $LAN -p tcp -m multiport --sports $ADMIN_PORTS -j ACCEPT # MySQL between WS and DB $IPTABLES -A FORWARD $PHYSDEV -s $WS_IP -d $DB_IP -p tcp -m multiport --dports $MYSQL_PORTS -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -s $DB_IP -d $WS_IP -p tcp -m multiport --sports $MYSQL_PORTS -j ACCEPT #======== WS ======== # LAN <--> admin ports $IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $WS_IP -p tcp -m multiport --dports $ADMIN_PORTS -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -s $WS_IP -d $LAN -p tcp -m multiport --sports $ADMIN_PORTS -j ACCEPT # HTTP-порт $IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $WS_IP -p tcp -m multiport --dports $WS_PORTS -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -s $WS_IP -d $LAN -p tcp -m multiport --sports $WS_PORTS -j ACCEPT #======== WS2 ======= # LAN <--> admin ports $IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $WS2_IP -p tcp -m multiport --dports $ADMIN_PORTS -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -s $WS2_IP -d $LAN -p tcp -m multiport --sports $ADMIN_PORTS -j ACCEPT # HTTP-ports $IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $WS2_IP -p tcp -m multiport --dports $WS2_PORTS -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -s $WS2_IP -d $LAN -p tcp -m multiport --sports $WS2_PORTS -j ACCEPT #======== WIN_XP ======= # LAN <--> admin ports $IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $XP_IP -p tcp -m multiport --dports $ADMIN_PORTS -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -s $XP_IP -d $LAN -p tcp -m multiport --sports $ADMIN_PORTS -j ACCEPT # HTTP-ports $IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $XP_IP -p tcp -m multiport --dports $XP_PORTS -j ACCEPT $IPTABLES -A FORWARD $PHYSDEV -s $XP_IP -d $LAN -p tcp -m multiport --sports $XP_PORTS -j ACCEPT #========== Common ban to LAN for guests ========== $IPTABLES -A FORWARD $PHYSDEV -p ALL -d $LAN -j DROP $IPTABLES -A FORWARD $PHYSDEV -p ALL -s $LAN -j DROP
我很less试图阻止DomU虚拟机,所以我不能告诉你到底该怎么做。 但是请参考这个页面:
http://wiki.xensource.com/xenwiki/XenNetworking
特别是“桥接”部分。 那里有一些iptables例子。