У меня есть сервер Xen с несколькими виртуальными машинами, установленными рядом с обычными компьютерами в моей локальной сети. На виртуальных машинах размещается контент, предназначенный для доступа в Интернет. Httpd - один из них, поэтому давайте рассмотрим его в качестве примера.
Я хотел бы настроить iptables (или мою сеть) как таковые:
Разрешить возвратную петлю
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
Разрешить порт 80 входящие / исходящие соединения из / в WAN (Интернет).
Разрешить порт 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
ЗАПРЕЩАЕТСЯ весь другой трафик типа.
-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