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

настроить iptables, чтобы разрешить входящие / исходящие подключения из WAN (веб) и только пару компьютеров в локальной сети, блокируя все остальное

У меня есть сервер Xen с несколькими виртуальными машинами, установленными рядом с обычными компьютерами в моей локальной сети. На виртуальных машинах размещается контент, предназначенный для доступа в Интернет. Httpd - один из них, поэтому давайте рассмотрим его в качестве примера.

Я хотел бы настроить iptables (или мою сеть) как таковые:

  1. Разрешить возвратную петлю

    -A INPUT -i lo -j ACCEPT
    -A OUTPUT -o lo -j ACCEPT
    
  2. Разрешить порт 80 входящие / исходящие соединения из / в WAN (Интернет).

  3. Разрешить порт foo Входящий / исходящий трафик к / от компьютера из белого списка в локальной сети, запрещая при этом остальную часть локальной сети.

    #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
    

Essential Я хотел бы, чтобы мои виртуальные машины могли общаться только с Интернетом и другими виртуальными машинами (в определенном диапазоне блоков в локальной сети). Возможно ли это просто с помощью 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 

В настоящее время с моими модулями разработки я могу получить доступ к своему контенту, но я хочу укрепить свою сеть и защитить свои не-серверные компьютеры. И у меня не было достаточного опыта работы с iptables, чтобы доверить это себе.

Заранее спасибо. P.S. Мне также нужно принять во внимание сетевое взаимодействие между Dom0 и виртуальными машинами.

На первый взгляд предлагаемые правила кажутся хорошими. Но не забудьте разрешить DNS-трафик - порт назначения UDP 53 на ваши DNS-серверы в WAN.

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

*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