配置 iptables 以允许来自 WAN(网络)的入站/出站连接,并且只允许 LAN 上的几台电脑连接,同时阻止其他任何设备

配置 iptables 以允许来自 WAN(网络)的入站/出站连接,并且只允许 LAN 上的几台电脑连接,同时阻止其他任何设备

我有一台 Xen 服务器,上面有几台虚拟机,与局域网上的普通 PC 并排放置。虚拟机托管用于 Web 访问的内容。Httpd 就是其中之一,因此我们以它为例。

我想这样配置 iptables(或者我的网络):

  1. 允许环回

    -A INPUT -i lo -j ACCEPT
    -A OUTPUT -o lo -j ACCEPT
    
  2. 允许端口 80 与 WAN(Web)的入站/出站连接。

  3. 允许端口 foo 进出 LAN 上白名单计算机的流量,同时拒绝 LAN 的其余部分。

    #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
    
  4. 拒绝所有其他类型的流量。

    -P INPUT DROP
    -P OUTPUT DROP
    -P FORWARD DROP
    

基本我希望我的虚拟机只能与 Web 和其他虚拟机通信(在 LAN 上的某个块范围内)。仅使用 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 

目前,我可以使用开发箱访问内容,但我希望强化网络,保护非服务器 PC。而且,我没有足够的 iptables 经验来信任自己。

提前致谢。PS:我还需要考虑 Dom0 和虚拟机之间的网络通信。

答案1

乍一看,建议的规则似乎不错。但不要忘记允许 DNS 流量 - 目标 UDP 端口 53 到达 WAN 上的 DNS 服务器。

答案2

也许我回答了自己的问题,正在和朋友讨论这个问题。这是我们想出的办法,希望对大家有帮助。

*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

相关内容