У меня есть виртуальная машина, которая работает как шлюз от других виртуальных машин.
Конфигурация интерфейсов следующая
УБУНТУ:
eth0:
ip: 10.0.2.2
netmask 255.255.255.255
gateway 10.0.2.2
eth1:
ip: 192.168.1.1
bcast: 192.168.1.255
netmask: 255.255.255.0
Я хотел бы закрыть все порты и работать в Интернете только через шлюз.
Без правил он работает отлично, но с реальной конфигурацией брандмауэра iptables блокирует соединение.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# ..... other rules for the others connected vm
Существует правило, разрешающее УСТАНОВЛЕННЫМ, СВЯЗАННЫМ соединениям проходить через?
В этом примере вы видите:
я цитирую:
Разрешение установленных сеансов
Мы можем разрешить установленным сессиям получать трафик:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT
The above rule has no spaces either side of the comma in ESTABLISHED,RELATED
Если строка выше не работает, возможно, вы используете кастрированный VPS, провайдер которого не предоставил расширение, и в этом случае в качестве последнего средства можно использовать более низкую версию:
sudo iptables -A INPUT -m state --state УСТАНОВЛЕНО, СВЯЗАННО -j ПРИНЯТЬ
Источник: Ubuntu вики
РЕДАКТИРОВАТЬ:
Я вижу, что вы забыли разрешить DNS в своем наборе правил?