boot 14.04 iptables fail intermittently [duplicate]

У меня есть kvm VM с Ubuntu 14.04, настроенная как брандмауэр в виртуальной сети (с eth0 и eth1)

Это не на курсах, а на работе. Мне нужно научиться этому.

Периодически eth1 не поднимается.

В /etc/network/interfaces оба eth0 и eth1 установлены вручную.

Когда eth0 должен быть поднят, есть команда up /etc/interim-fw.sh , которая ничего не разрешает и не пересылает между портами.

Затем eth1. Есть предварительная команда up, где я отправляю комментарий в лог-файл, что он достиг этой точки. Затем также подключаю link up и затем команду up на /etc/firewall.sh, которая загрузит iptables со всеми необходимыми правилами.

Случайно это не загрузится и дойдет только до pre-up eth1. Но как только VM загрузится, если я запущу bash /etc/firewall.sh она загрузится полностью и все будет в порядке!

Итак, мой вопрос: как я могу решить эту проблему? Почему я получаю состояние гонки, если это то, что я получаю?

/etc/network/interfaces:

auto lo  
iface lo inet loopback  

auto eth0  
iface eth0 inet manual  
  up ip a a 5.156.241.126/25 dev eth0  
  up ip li set up dev eth0  
  up /etc/interim-fw.sh  
  down ifconfig eth0 0.0.0.0 down  


 auto eth1  
 iface eth1 inet manual  
    up ip a a 5.156.241.129/27 dev eth1  
    up ip li set up dev eth1  
    up ip route add default via 5.156.241.158  
    post-up /etc/firewall.sh  
    down ifconfig $IFACE 0.0.0.0 down  

/etc/firewall.sh

!/bin/bash -e

I_INT=eth0  # Intranet-LAN-Interface  
I_DMZ=eth1  # DMZ-LAN-Interface  
NAME=5.156.241.130                       
MASTER=5.156.241.1    
UBUNTU=141.30.13.10,141.30.13.20,141.76.1.200,141.76.1.204,141.76.1.208  
REACTOS=178.63.204.104,188.40.64.41  
MOZILLA=52.222.170.144  
PYTHON=151.101.0.223,151.101.64.223,151.101.128.223,151.101.192.223  
MAIL=5.156.241.142  
WWW=5.156.88.1  
STATE_NEW="-m state --state NEW"  
STATE_ESTABLISHED="-m state --state ESTABLISHED"  
PING="-p icmp --icmp-type 8"                        #ICMP packet type 8 alias echo request (= ping request )
REM="-m comment --comment"
{
iptables-restore << @@@@@@@@

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT   $STATE_ESTABLISHED -j ACCEPT
-A OUTPUT  $STATE_ESTABLISHED -j ACCEPT
-A FORWARD $STATE_ESTABLISHED -j ACCEPT


-A INPUT  -p icmp -m icmp --icmp-type any  $STATE_NEW  $REM "traceroute" -j ACCEPT
-A INPUT  -p udp      --dport 33434:33523  $STATE_NEW  $REM "traceroute" -j ACCEPT

-A INPUT   -i $I_INT -p tcp           --dport 22345 $STATE_NEW  $REM "ssh" -j ACCEPT
-A FORWARD -i $I_INT -o $I_DMZ -p tcp --dport 22345 $STATE_NEW  $REM "ssh" -j ACCEPT

-A OUTPUT -o $I_DMZ -d $SATURN -p tcp --dport 53  $STATE_NEW $REM "dns"  -j ACCEPT
-A OUTPUT -o $I_DMZ -d $SATURN -p udp --dport 53  $STATE_NEW $REM "dns"  -j ACCEPT
-A FORWARD -i $I_INT -o $I_DMZ -d $SATURN -p tcp --dport 53  $REM "dns" $STATE_NEW  -j ACCEPT
-A FORWARD -i $I_INT -o $I_DMZ -d $SATURN -p udp --dport 53  $REM "dns" $STATE_NEW  -j ACCEPT

-A FORWARD -i $I_INT -o $I_DMZ -d $MASTER -p tcp --dport 53  $REM "dns" $STATE_NEW  -j ACCEPT
-A FORWARD -i $I_INT -o $I_DMZ -d $MASTER -p udp --dport 53  $REM "dns" $STATE_NEW  -j ACCEPT

-A OUTPUT -o $I_DMZ $PING $STATE_NEW $REM "Ping"  -j ACCEPT
-A FORWARD -i $I_INT -o $I_DMZ $PING $STATE_NEW $REM "Ping" -j ACCEPT

-A FORWARD -i $I_INT -o $I_DMZ -d $UBUNTU -p tcp --dport 80 $STATE_NEW $REM "Ubuntu"  -j ACCEPT
-A FORWARD -i $I_INT -o $I_DMZ -d $REACTOS -p tcp -m multiport --dports 80,443 $STATE_NEW $REM "Reactos"  -j ACCEPT
-A FORWARD -i $I_INT -o $I_DMZ -d $MOZILLA -p tcp -m multiport --dports 80,443 $STATE_NEW $REM "Mozilla"  -j ACCEPT
-A FORWARD -i $I_INT -o $I_DMZ -d $PYTHON -p tcp -m multiport --dports 80,443 $STATE_NEW $REM "Python"  -j ACCEPT
-A OUTPUT            -o $I_DMZ -d $UBUNTU -p tcp --dport 80 $STATE_NEW $REM "Ubuntu"  -j ACCEPT

-A FORWARD -i $I_INT -o $I_DMZ -d $WWW -p tcp --dport 80 $STATE_NEW $REM "www"  -j ACCEPT
-A OUTPUT            -o $I_DMZ -d $WWW -p tcp --dport 80 $STATE_NEW $REM "www"  -j ACCEPT

COMMIT

@@@@@@@@
} && {
  test $(sysctl -n net.ipv4.ip_forward) -eq 0 && sysctl net.ipv4.ip_forward=1  #Forwarding aktivieren
        echo "ok"
  echo "GOT HERE - ok!" >> /tmp/fw.log
  exit 0
} || {
  test $(sysctl -n net.ipv4.ip_forward) -ne 0 && sysctl net.ipv4.ip_forward=0  #Forwarding de-aktivieren
  /etc/firewall-vorlaeufig.sh

echo "GOT HERE - not ok " >> /tmp/fw.log

Это не дублирует Как сохранить правила iptables?. Причина в том, что мой старший администратор настаивает, чтобы я использовал этот скрипт /etc/firewall.sh. Кроме того, скрипт работает нормально, но случайно срывается.

Спасибо за ваши комментарии. Я буду очень признателен за любую помощь в попытке найти причину этого. Спасибо. Боб

0
задан 16 July 2017 в 23:58

1 ответ

Ваша ситуация является сложной, поскольку Вы выполняете VM, и Вы, кажется, используете своего рода сценарий, и Вы пытаетесь назвать сценарий в своей сети пред/сообщение/вниз правила.

IMO большинство "сценариев" для генерации правил для iptables являются чрезмерно сложными и абсолютно ненужными. Большинство сценариев может казаться "умным", но часто единственной целью является obscurification iptables.

Самый легкий способ сохранить/восстановить Ваши правила с iptables-persistent

sudo apt-get install iptables-persistent

После того как Вы устанавливаете пакет, он восстановит Ваши правила, неважно, если Вы вручную ввели их или генерировали их из своего рода сценария.

Если Вы действительно хотите справку со своим сценарием, необходимо отправить его, а также конфигурационные файлы.

0
ответ дан 2 November 2019 в 22:27

Другие вопросы по тегам:

Похожие вопросы: