itoutline.me

 

Iptables i dynamiczne IP

W przypadku posiadania serwera w sieci Internet zawsze najlepiej jest ograniczać do niego dostęp tylko do tego co rzeczywiście chcemy, żeby było na nim dostępne. Dodatkowo ograniczenie do konkretnych klas czy adresów w przypadku dostępu do interfejsów umożliwiających większą kontrolę nad serwerem jest także dobrą praktyką (jeszcze lepszą jest nie eksponowanie ich w Internecie w ogóle;)

Ostatnio prowadziłem testy na takim serwerze i naturalnym było np. ograniczenie dostępu do SSH dla konkretnych adresów. Problem polega na tym, że o ile w firmie miałem statyczny adres to w domu już nie. Mogłem ustawić regułę na obecny domowy adres ale za kilka godzin mogła być już nieaktualna. Wyjściem z sytuacji okazał się, jak bardzo często się zdarza, prosty skrypt i dyndns.

iptables_update.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
# --==itoutline.me==--

HOSTALLOWED="/home/itoutline/update_iptables/allowed_host.txt"

while read line
do

  HOSTNAME=$line
  LOGFILE=/home/itoutline/update_iptables/"$line".log

  Current_IP=$(host $HOSTNAME | cut -f4 -d' ')

  if [ $LOGFILE == "" ] ; then
    iptables -I INPUT -s $Current_IP -j ACCEPT
    echo $Current_IP > $LOGFILE
  else

    Old_IP=$(cat $LOGFILE)

    if [ "$Current_IP" != "$Old_IP" ] ; then
      iptables -D INPUT -s $Old_IP -j ACCEPT
      iptables -I INPUT -s $Current_IP -j ACCEPT
      /etc/init.d/iptables save
      echo $Current_IP > $LOGFILE
      echo iptables have been updated
    fi
  fi
done < "$HOSTALLOWED"

W allowed_host.txt umieszczamy w kolejnych liniach nazwy domenowe hostów.

A do cron-a dodajemy linijkę:

iptables_update.sh
1
*/1 * * * * /home/itoutline/update_iptables/update_iptables.sh  2>&1 |logger

Comments