Проблема с iptables.  Вопрос решен

Администрирование Ubuntu-Server

Модератор: Модераторы

Re: Проблема с iptables.

Сообщение Grin » 07 мар 2010, 17:15

Каким образом должна выглядеть iptables с точки зрения наиболее рациональной защиты сервера и клиентских машин извне.
Это просто домашняя сеть с сервером.
В настоящий момент таблица выглядит так:

root@Linux-S:/home/alex# iptables-save
# Generated by iptables-save v1.4.4 on Sun Mar 7 19:59:42 2010
*mangle
PREROUTING ACCEPT [1391:349158]
INPUT ACCEPT [760:231540]
FORWARD ACCEPT [631:117618]
OUTPUT ACCEPT [925:120292]
POSTROUTING ACCEPT [1608:244612]
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Sun Mar 7 19:59:42 2010
# Generated by iptables-save v1.4.4 on Sun Mar 7 19:59:42 2010
*nat
PREROUTING ACCEPT [210:10319]
POSTROUTING ACCEPT [3:382]
OUTPUT ACCEPT [66:4469]
-A POSTROUTING -o eth1 -j MASQUERADE
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Sun Mar 7 19:59:42 2010
# Generated by iptables-save v1.4.4 on Sun Mar 7 19:59:42 2010
*filter
:INPUT ACCEPT [882:245686]
:FORWARD ACCEPT [631:117618]
:OUTPUT ACCEPT [1058:134462]
COMMIT
Последний раз редактировалось Grin 18 мар 2010, 16:02, всего редактировалось 3 раз(а).
Grin
 
Сообщения: 97
Зарегистрирован: 04 фев 2010, 16:10

Реклама

Re: Проблема с iptables.

Сообщение Alex2ndr » 08 мар 2010, 11:12

Да.... если уж вы собираетесь защищать локальную сеть, то почитайте о том, как это делается. Здесь рассказать такой объем... Я пальцы сотру печатать :) . Я лучше вам дам направление поиска.
1. Прочитать руководство по iptables - http://www.opennet.ru/docs/RUS/iptables/
2. Почитать темы на этом форуме по iptables - viewtopic.php?f=109&t=2291
3. Выставить политики в DROP и разрешить все что используется. Вот когда у вас будут конкретные вопросы - милости прошу.

Насчет удаления правил тоже там почитаете. Скажу только что дейтсвие -L выводит правила на печать, а не удаляет их.
Alex2ndr
Активист
 
Сообщения: 533
Зарегистрирован: 15 фев 2010, 11:01

Re: Проблема с iptables.

Сообщение Grin » 08 мар 2010, 11:21

А вот этого достаточно будет для защиты:
http://easylinux.ru/node/190
Grin
 
Сообщения: 97
Зарегистрирован: 04 фев 2010, 16:10

Re: Проблема с iptables.

Сообщение Alex2ndr » 08 мар 2010, 11:50

Я почитал эту статейку. Что-то неполная она какая-то(нет описания действий -X, -F и тд). В принципе можно для начала почитать и ее, но я бы рекомендовал с моей ссылки в п.1 - там полный набор.
Alex2ndr
Активист
 
Сообщения: 533
Зарегистрирован: 15 фев 2010, 11:01

Re: Проблема с iptables.

Сообщение salt » 11 мар 2010, 18:51

Мне помогла статья http://mirspo.narod.ru/firewall.html
Аватара пользователя
salt
 
Сообщения: 6
Зарегистрирован: 18 фев 2010, 19:05
Откуда: г. Санкт-Петербург, Новгородская обл., Солецкий р-н, д. Толчино

Re: Проблема с iptables.

Сообщение Grin » 12 мар 2010, 16:06

Alex2ndr

Долго изучал указанное Вами руководство и пришёл к выводу, что наскоку этого не получится.
Но азы конечно усвоил.
И если бы я был администратором сети, тогда да - копал бы глубоко.
Но у меня просто домашняя сеть - eth0
Поэтому, если не трудно напишите строчки для iptables , которые запретят вторжение в мою сеть
из интернет - ppp0 и сети , смотрящей в интернет - eth1( локальная сеть - по ней много любителей шарят - в Windows логи страницами исчисляются )
Буду очень благодарен!

Добавлено спустя 2 часа 35 минут 19 секунд:
Нашёл вот такой вариант:

iptables -F # Очищаем все цепочки таблицы filter
# Ко всем пакетам, которые относятся к уже установленным соединениям, применяем терминальное действие ACCEPT — пропустить
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP # В качестве действия по умолчанию устанавливаем DROP — блокирование пакета
iptables -P OUTPUT ACCEPT # Разрешаем все исходящие пакеты

Он удовлетворяет моим требованиям?
Grin
 
Сообщения: 97
Зарегистрирован: 04 фев 2010, 16:10

Re: Проблема с iptables.

Сообщение Alex2ndr » 12 мар 2010, 19:28

Grin писал(а):Alex2ndr

Долго изучал указанное Вами руководство и пришёл к выводу, что наскоку этого не получится.
Но азы конечно усвоил.
И если бы я был администратором сети, тогда да - копал бы глубоко.
Но у меня просто домашняя сеть - eth0
Поэтому, если не трудно напишите строчки для iptables , которые запретят вторжение в мою сеть
из интернет - ppp0 и сети , смотрящей в интернет - eth1( локальная сеть - по ней много любителей шарят - в Windows логи страницами исчисляются )
Буду очень благодарен!

Добавлено спустя 2 часа 35 минут 19 секунд:
Нашёл вот такой вариант:

iptables -F # Очищаем все цепочки таблицы filter
# Ко всем пакетам, которые относятся к уже установленным соединениям, применяем терминальное действие ACCEPT — пропустить
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP # В качестве действия по умолчанию устанавливаем DROP — блокирование пакета
iptables -P OUTPUT ACCEPT # Разрешаем все исходящие пакеты

Он удовлетворяет моим требованиям?

По пунктам:
1. Этот ваш функционал работает только на ваш компьютер Т е он разрешает любой исходящий, а входящий только ответ на исходящий. НО только для вашего сервера - про трафик вашей локальной сети ничего нет.
2. в строке
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
у вас вероятно ошибка - я делаю так -
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
может конечно и в модуле conntrack есть определение состояний - но наверно все-таки ошибка.
3. iptables -F в принципе можно не добавлять в начало. Если он у вас будет только запускаться при запуске системы, то точно не надо - при перезагрузке все правила очищаются.
Теперь по поводу защиты сети. Дам я вам свой скриптик. Попробуйте разобраться - если что - спрашивайте. В принципе вам достаточно просто изменить настройки в начале и все будет работать для вас.
Код: Выделить всё
#!/bin/sh
# vim: sw=4 ts=4 expandtab ai

# Задаем некоторые переменные:

# Переменная, задающая путь к файлу запуска iptables.
IPT="/sbin/iptables"

# Настройки локальной сети
# Диапазон адресов локальной сети
LOCAL_NET="192.168.0.0/24"
# Ip-адреса клиентов в локальной сети и их mac-адреса для проверки
# Формат - [номер_в_массиве]="<ip_клиента> <mac_клиента>"
# если mac не указывать то доступ с данного ip будет разрешен для любого mac
# Можно оставить эту переменную пустой(т е () ),тогда будут разрешены все ip
LOCAL_IPS=(
[1]="192.168.0.2 00:13:8f:e0:34:d1"
[2]="192.168.0.3"
[3]="192.168.0.4 00:19:4f:9e:f3:69"
[4]="192.168.0.5 00:06:1b:c2:db:40"
)
# Стандартные порты
#TCP
#   80      http
#   443     https
#   21      ftp
#   5190   ICQ
#   5222   Jabber
#   5223   Jabber
#   9418   Git
#   2222   ssh
#   110     pop3
#   25      smtp
#   5353   Multicast DNS
#   123     ntp
#UDP
#   53      DNS
#   5353   Multicast DNS
#   25024   Openvpn для моего случая

# Разрешенные порты для локальной сети
ALLOWED_PORTS_FW_TCP="80 443 21 22 2222 5222 5223 25 110 9418 995 465 3389"
ALLOWED_PORTS_FW_UDP="53 5353"

# Настройки самого сервера
# Интерфейс в Интернет
INET_IFACE="tun0"
# Интерфейс в локальную сеть
LOCAL_IFACE="eth0"
# Адрес этого сервера в локальной сети
LOCAL_ADR="192.168.0.1"
# Разрешенные порты для входящих запросов к серверу
ALLOWED_PORTS_IN_TCP="80 2222"
ALLOWED_PORTS_IN_UDP="53"
# Разрешенные порты для исходящих запросов c серверa
ALLOWED_PORTS_OT_TCP="2222"
ALLOWED_PORTS_OT_UDP="53 123 25024"

start_fw()
{
    # Включаем перенаправление пакетов через ядро.
    echo 1 > /proc/sys/net/ipv4/ip_forward

    # Сбрасываем правила и удаляем цепочки.
    $IPT -F
    $IPT -X
    $IPT -t nat -F
    $IPT -t nat -X
    $IPT -t mangle -F
    $IPT -t mangle -X

    # Политики по умолчанию.
    $IPT -P INPUT DROP
    $IPT -P FORWARD DROP
    $IPT -P OUTPUT DROP

    # Разрешаем вход и выход всем пакетам, связанным с локальным интерфейсом lo
    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A OUTPUT -o lo -j ACCEPT

    # Разрешаем вход и выход всем пакетам, относящимся к протоколу ICMP
    $IPT -A INPUT -p icmp -j ACCEPT
    $IPT -A OUTPUT -p icmp -j ACCEPT
    $IPT -A FORWARD -p icmp -j ACCEPT

    # Разрешаем пакеты, относящиеся ко всем установленным соединениям
    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    # !!!!!!!!!! ТОЛЬКО ЕСЛИ ВНУТРЕНЯЯ СЕТЬ ДОВЕРЕННАЯ !!!!!!!!!!!!!
    # Разрешаем пакеты, идущие из локальной сети на этот компьютер и
    # с этого компа в локальную сеть
    $IPT -A INPUT -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
    $IPT -A OUTPUT -o $LOCAL_IFACE -d $LOCAL_NET -j ACCEPT

    # NAT через динамический IP адрес.
    $IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

    # Создаем цепочки для сортировки транзитного трафика и направляем его в них
    $IPT -N allowip
    $IPT -N allowport
    $IPT -A FORWARD -s $LOCAL_NET -j allowip
    # Разрешаем доступ для клиентов указанных в LOCAL_IPS
    # если данная переменная пустая то разрешены все адреса из локальной сети
    if [ "${#LOCAL_IPS[*]}" -ne 0 ]; then
        for i in `seq 1 ${#LOCAL_IPS[*]}`; do
            ip=`echo ${LOCAL_IPS[$i]} | awk '{print $1}'`
            mac=`echo ${LOCAL_IPS[$i]} | awk '{print $2}'`
            if [ -n "$mac" ]; then
                $IPT -A allowip -m mac -s $ip --mac-source $mac -j allowport
            else
                $IPT -A allowip -s $ip -j allowport
            fi
        done
    else
         $IPT -A allowip -s $LOCAL_NET -j allowport
    fi
    # Разрешаем транзитные соединения из локальной сети
    for port in $ALLOWED_PORTS_FW_TCP; do
        $IPT -A allowport -p tcp -m tcp --dport $port -j ACCEPT
    done
    for port in $ALLOWED_PORTS_FW_UDP; do
        $IPT -A allowport -p udp -m udp --dport $port -j ACCEPT
    done

    # Разрешаем входящие соединения c сервером
    for port in $ALLOWED_PORTS_IN_TCP; do
        $IPT -A INPUT -p tcp -m tcp --dport $port -j ACCEPT
    done
    for port in $ALLOWED_PORTS_IN_UDP; do
        $IPT -A INPUT -p udp -m udp --dport $port -j ACCEPT
    done

    # Разрешаем исходящие соединения c сервера
    for port in $ALLOWED_PORTS_OT_TCP; do
        $IPT -A OUTPUT -p tcp -m tcp --dport $port -j ACCEPT
    done
    for port in $ALLOWED_PORTS_OT_UDP; do
        $IPT -A OUTPUT -p udp -m udp --dport $port -j ACCEPT
    done
}

stop_fw()
{
    # Сбрасывем все правила
    $IPT -F
    $IPT -X
    $IPT -t nat -F
    $IPT -t nat -X
    $IPT -t mangle -F
    $IPT -t mangle -X
    $IPT -P INPUT ACCEPT
    $IPT -P FORWARD ACCEPT
    $IPT -P OUTPUT ACCEPT

    # Выключить перенаправление пакетов через ядро.
    echo 0 > /proc/sys/net/ipv4/ip_forward
}

case "$1" in
start)   echo -n "Starting firewall: iptables"
   start_fw
        echo "."
   ;;
stop)   echo -n "Stopping firewall: iptables"
   stop_fw
        echo "."
        ;;
restart) echo -n "Restarting firewall: iptables"
        stop_fw
        start_fw
   echo "."
        ;;
*)   echo "Usage: $0 start|stop|restart"
        exit 1
        ;;
esac
exit 0
Alex2ndr
Активист
 
Сообщения: 533
Зарегистрирован: 15 фев 2010, 11:01

Re: Проблема с iptables.

Сообщение Grin » 14 мар 2010, 07:53

Alex2ndr

Благодарю. Начал изучать Ваш скрипт. Я обычно вносил все эти правила в rc.local, хотя встречал мнение, что это не совсем правильно.
Хотя и не критично.
А у Вас как организовано?
Grin
 
Сообщения: 97
Зарегистрирован: 04 фев 2010, 16:10

Re: Проблема с iptables.

Сообщение Alex2ndr » 14 мар 2010, 10:42

я делаю так:
1. Вношу все это в файл. Пусть он называется rc.iptables
2. Кладу этот файл в /etc/init.d/
3. Делаю его исполняемым :
Код: Выделить всё
sudo chmod +x /etc/init.d/rc.iptables

4. Добавляю его в автозагрузку:
Код: Выделить всё
sudo update-rc.d rc.iptables start 90 2 3 4 5 . stop 10 0 1 6 .

Внимание! Точка на конце - это важно - иначе выдаст ошибку.
Alex2ndr
Активист
 
Сообщения: 533
Зарегистрирован: 15 фев 2010, 11:01

Re: Проблема с iptables.

Сообщение Grin » 14 мар 2010, 18:00

Ещё раз спасибо.
1. А Вами рекомендованное правило надо добавлять:

-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Если да, то в какое место Вашего скрипта?

2. При вводе команды, получаю такое сообщение. Игнорировать или надо как то лечить?

root@Linux-S:/home/alex# update-rc.d rc.iptables start 90 2 3 4 5 . stop 10 0 1 6 .
update-rc.d: warning: /etc/init.d/rc.iptables missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>


3. Вроде всё правильно сделал, но iptables-save никаких правил не показал - просто всё ACCEPT,
Последний раз редактировалось Grin 15 мар 2010, 19:21, всего редактировалось 3 раз(а).
Grin
 
Сообщения: 97
Зарегистрирован: 04 фев 2010, 16:10

Re: Проблема с iptables.

Сообщение Alex2ndr » 14 мар 2010, 18:42

Grin писал(а):Ещё раз спасибо.
А Вами рекомендованное правило надо добавлять:

-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Если да, то в какое место Вашего скрипта?

Куда-нить в начало. Например вот так
Код: Выделить всё
...
    # Разрешаем вход и выход всем пакетам, связанным с локальным интерфейсом lo
    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A OUTPUT -o lo -j ACCEPT

    #Решаем проблему с pmtu
    $IPT -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

    # Разрешаем вход и выход всем пакетам, относящимся к протоколу ICMP
    $IPT -A INPUT -p icmp -j ACCEPT
    $IPT -A OUTPUT -p icmp -j ACCEPT
    $IPT -A FORWARD -p icmp -j ACCEPT
...


Grin писал(а):Я понимаю, что Ваш скрипт уже исполняемый и мне достаточно его только подправить под свои параметры?

Что значит исполняемый? Я под исполняемым понимаю наличие права на исполнение (x). Сейчас вы скопируете содержимое скрипта в /etc/init.d/rc.iptables. Но новосозданный файл НЕ ЯВЛЯЕТСЯ ИСПОЛНЯЕМЫМ!. Вот вам пример:
Код: Выделить всё
Создадим пустой файл
alex@deb-book:~/test$ touch rc.iptables

Посмотрим, что у нас в каталоге
Код: Выделить всё
alex@deb-book:~/test$ ls -la
итого 8
drwxr-xr-x  2 alex alex 4096 Мар 14 21:19 .
drwxr-xr-x 53 alex alex 4096 Мар 14 21:19 ..
-rw-r--r--  1 alex alex    0 Мар 14 21:19 rc.iptables

Смотрим права - -rw-r--r-- . Они обозначают такое Первый - значит это файл. Три следующие символа - права для владельца: rw- Как видите разрешено читать(r), писать (w), но запрещено исполнять (-). Следущие три символа права группы: r-- разрешено читать, но запрещено писать и исполнять. Для всех остальных права аналогичные группе: r--
Теперь сделаем файл исполняемым
Код: Выделить всё
alex@deb-book:~/test$ chmod +x ./rc.iptables

Снова смотрим права
Код: Выделить всё
alex@deb-book:~/test$ ls -la
итого 8
drwxr-xr-x  2 alex alex 4096 Мар 14 21:19 .
drwxr-xr-x 53 alex alex 4096 Мар 14 21:19 ..
-rwxr-xr-x  1 alex alex    0 Мар 14 21:19 rc.iptables
alex@deb-book:~/test$

Права владельца - rwx Разрешено читать(r), писать (w), исполнять (x). Группе теперь тоже разрешено исполнять (r-x) и всем остальным тоже (r-x)
Вот теперь этот файл исполняемый. Если файл в /etc/init.d/ не будет исполняемым, то при старте системы он не запустится.

Если вы имели в виду, что скрипт рабочий(т е его не надо тестировать), то да - рабочий. Он у меня на домашнем сервере работает.
Последний раз редактировалось Alex2ndr 14 мар 2010, 18:58, всего редактировалось 1 раз.
Alex2ndr
Активист
 
Сообщения: 533
Зарегистрирован: 15 фев 2010, 11:01

Re: Проблема с iptables.

Сообщение tester8 » 14 мар 2010, 18:52

Я просто оставлю эту ссылку:
http://ubuntologia.ru/permissions

Alex2ndr, иногда можно просто дать ссылку на статью на сайте, а не писать заново.
Аватара пользователя
tester8
Модератор
 
Сообщения: 561
Зарегистрирован: 09 май 2009, 11:47
Откуда: СПб

Re: Проблема с iptables.

Сообщение Alex2ndr » 14 мар 2010, 19:03

tester8 писал(а):Я просто оставлю эту ссылку:
http://ubuntologia.ru/permissions

Alex2ndr, иногда можно просто дать ссылку на статью на сайте, а не писать заново.

Спасибо, что-то я увлекся...
Alex2ndr
Активист
 
Сообщения: 533
Зарегистрирован: 15 фев 2010, 11:01

Re: Проблема с iptables.

Сообщение Grin » 16 мар 2010, 06:43

При вводе команды, получаю такое сообщение.

root@Linux-S:/home/alex# update-rc.d rc.iptables start 90 2 3 4 5 . stop 10 0 1 6 .
update-rc.d: warning: /etc/init.d/rc.iptables missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>

Добавлено спустя 7 минут 27 секунд:
Кстати в статье не говорится, что если у файла есть права на исполнение, то он является исполняемым.
Может это подразумевается, но не явно. Так что пояснения Alex2ndr, думаю уместны.
Последний раз редактировалось Grin 18 мар 2010, 15:41, всего редактировалось 1 раз.
Grin
 
Сообщения: 97
Зарегистрирован: 04 фев 2010, 16:10

Re: Проблема с iptables.

Сообщение Alex2ndr » 16 мар 2010, 09:36

Grin писал(а):При вводе команды, получаю такое сообщение. Это надо как то лечить?

root@Linux-S:/home/alex# update-rc.d rc.iptables start 90 2 3 4 5 . stop 10 0 1 6 .
update-rc.d: warning: /etc/init.d/rc.iptables missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>

попробуйте переделать начало файла на вот такое:
Код: Выделить всё
#!/bin/sh
### BEGIN INIT INFO
# Provides:          iptables
# Required-Start:    $syslog $network $time
# Required-Stop:     $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start iptables at boot time
# Description:       Enable service provided by iptables.
### END INIT INFO

# Задаем некоторые переменные:

# Переменная, задающая путь к файлу запуска iptables.
IPT="/sbin/iptables"

...
Alex2ndr
Активист
 
Сообщения: 533
Зарегистрирован: 15 фев 2010, 11:01

Re: Проблема с iptables.

Сообщение Grin » 16 мар 2010, 14:49

Переделал, но меня смутило, что они закоментированы - хотя результат есть!
Теперь получаю только это сообщение:
root@Linux-S:/home/alex# update-rc.d rc.iptables start 90 2 3 4 5 . stop 10 0 1 6 .
System start/stop links for /etc/init.d/rc.iptables already exist.

При вводе следующей команды - ругается на скобку в 25 строке:

root@Linux-S:/home/alex# /etc/init.d/rc.iptables ls -la
/etc/init.d/rc.iptables: 25: Syntax error: "(" unexpected

25 строка из скрипта, выделена красным:
......
# Можно оставить эту переменную пустой(т е () ),тогда будут разрешены все ip
LOCAL_IPS=(
[1]="192.168.0.2 00:01:6C:26:A4:8B"
[2]="192.168.0.6 00:0D:61:11:9D:8B"
.......

Но правила отсутствуют, видимо автозагрузка не получается и интернета у домашних машин нет:

root@Linux-S:/home/alex# iptables-save
# Generated by iptables-save v1.4.4 on Tue Mar 16 19:03:29 2010
*filter
:INPUT ACCEPT [162:20312]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [172:20444]
COMMIT
# Completed on Tue Mar 16 19:03:29 2010
Grin
 
Сообщения: 97
Зарегистрирован: 04 фев 2010, 16:10

Re: Проблема с iptables.

Сообщение Alex2ndr » 16 мар 2010, 19:59

Grin писал(а):Переделал, но меня смутило, что они закоментированы - хотя результат есть!

Подумаешь, закоментированы. Тот что первая строка(shabang) якобы закоментирована вас не смущает?
Вы наверно на С не писали - там с # начинаются команды для компилятора.

Grin писал(а):root@Linux-S:/home/alex# update-rc.d rc.iptables start 90 2 3 4 5 . stop 10 0 1 6 .
System start/stop links for /etc/init.d/rc.iptables already exist.

Ну и чего вы удвиляетесь? Вы повторно пытаетесь установить это приложение в автозагрузку и он вам справедливо говорит, что оно там уже стоит. После того как вы первый раз добавили можете больше этого не делать. Можно изменять файл как угодно - из автозагрузки он не пропадет.

Grin писал(а):При вводе следующей команды - ругается на скобку в 25 строке:

root@Linux-S:/home/alex# /etc/init.d/rc.iptables ls -la
/etc/init.d/rc.iptables: 25: Syntax error: "(" unexpected

25 строка из скрипта, выделена красным:
......
# Можно оставить эту переменную пустой(т е () ),тогда будут разрешены все ip
LOCAL_IPS=(
[1]="192.168.0.2 00:01:6C:26:A4:8B"
[2]="192.168.0.6 00:0D:61:11:9D:8B"
.......

Вероятно вы потеряли закрывающую скобку - shell вам об этом и говорит - Syntax error: "(" unexpected. Проверьте. У меня этот массив выглядит так:
Код: Выделить всё
LOCAL_IPS=(
[1]="192.168.0.2 00:13:8f:e0:34:d1"
[2]="192.168.0.3"
[3]="192.168.0.4 00:19:4f:9e:f3:69"
[4]="192.168.0.5 00:06:1b:c2:db:40"
)

Т е после LOCAL_IPS= скобка открывается, а после последнего элемента закрывается.

Grin писал(а):Но правила отсутствуют, видимо автозагрузка не получается и интернета у домашних машин нет:

Конечно отсутствуют. Скрипт у вас на 25 строке вылетает - до 25 строки никаких правил нету.
Так что этому факту можно не удивляться.

Добавлено спустя 17 минут 31 секунду:
PS обратил внимание на странную команду:
Код: Выделить всё
root@Linux-S:/home/alex# /etc/init.d/rc.iptables ls -la

Это что? /etc/init.d/rc.iptables стартует сам файлик. А "ls -la" что по вашему делает? Или это глюк?
В понимании shell вы таким образом передаете скрипты 2 параметра. 1-й это ls а второй -la. Скрипт отреагирует на это вот так -
Код: Выделить всё
Usage: /etc/init.d/rc.iptables start|stop|restart

Т е он говорит что : Подавай мне 1-ый параметр - или start или stop или restart.
Таким образом запускать этот скрипт надо так -
Код: Выделить всё
root@Linux-S:/home/alex# /etc/init.d/rc.iptables start

останавливать соответственно -
Код: Выделить всё
root@Linux-S:/home/alex# /etc/init.d/rc.iptables stop

ну а как перезапускать сами догадаетесь.
Alex2ndr
Активист
 
Сообщения: 533
Зарегистрирован: 15 фев 2010, 11:01

Re: Проблема с iptables.

Сообщение Grin » 17 мар 2010, 07:02

Alex2ndr писал(а):Вероятно вы потеряли закрывающую скобку - shell вам об этом и говорит - Syntax error: "(" unexpected. Проверьте.


Скобка закрывающая есть, как в Вашем образце. Вот мой полный скрипт:
Код: Выделить всё
#!/bin/sh
### BEGIN INIT INFO
# Provides:          iptables
# Required-Start:    $syslog $network $time
# Required-Stop:     $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start iptables at boot time
# Description:       Enable service provided by iptables.
### END INIT INFO

# vim: sw=4 ts=4 expandtab ai
# Задаем некоторые переменные:

# Переменная, задающая путь к файлу запуска iptables.
IPT="/sbin/iptables"

# Настройки локальной сети
# Диапазон адресов локальной сети
LOCAL_NET="192.168.0.0/24"
# Ip-адреса клиентов в локальной сети и их mac-адреса для проверки
# Формат - [номер_в_массиве]="<ip_клиента> <mac_клиента>"
# если mac не указывать то доступ с данного ip будет разрешен для любого mac
# Можно оставить эту переменную пустой(т е () ),тогда будут разрешены все ip
LOCAL_IPS=(
[1]="192.168.0.2 00:01:6C:26:A4:8B"
[2]="192.168.0.6 00:0D:61:11:9D:8B"
[3]="192.168.0.4 00:19:DB:D1:3B:63"
[4]="192.168.0.5 00:0D:61:5E:86:40"
)
# Стандартные порты
#TCP
#   80      http
#   443     https
#   21      ftp
#   5190   ICQ
#   5222   Jabber
#   5223   Jabber
#   9418   Git
#   2222   ssh
#   110     pop3
#   25      smtp
#   5353   Multicast DNS
#   123     ntp
#UDP
#   53      DNS
#   5353   Multicast DNS
#   25024   Openvpn для моего случая

# Разрешенные порты для локальной сети
ALLOWED_PORTS_FW_TCP="80 443 21 22 2222 5222 5223 25 110 9418 995 465 3389"
ALLOWED_PORTS_FW_UDP="53 5353"

# Настройки самого сервера
# Интерфейс в Интернет
INET_IFACE="eth1"
# Интерфейс в локальную сеть
LOCAL_IFACE="eth0"
# Адрес этого сервера в локальной сети
LOCAL_ADR="192.168.0.1"
# Разрешенные порты для входящих запросов к серверу
ALLOWED_PORTS_IN_TCP="80 2222"
ALLOWED_PORTS_IN_UDP="53"
# Разрешенные порты для исходящих запросов c серверa
ALLOWED_PORTS_OT_TCP="2222"
ALLOWED_PORTS_OT_UDP="53 123 25024"

start_fw()
{
    # Включаем перенаправление пакетов через ядро.
    echo 1 > /proc/sys/net/ipv4/ip_forward

    # Сбрасываем правила и удаляем цепочки.
    $IPT -F
    $IPT -X
    $IPT -t nat -F
    $IPT -t nat -X
    $IPT -t mangle -F
    $IPT -t mangle -X

    # Политики по умолчанию.
    $IPT -P INPUT DROP
    $IPT -P FORWARD DROP
    $IPT -P OUTPUT DROP

    # Разрешаем вход и выход всем пакетам, связанным с локальным интерфейсом lo
    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A OUTPUT -o lo -j ACCEPT

    #Решаем проблему с pmtu
    $IPT -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Запрет пингования моего сервера
# $IPT -A INPUT -p icmp --icmp-type 8 -j DROP

    # Разрешаем вход и выход всем пакетам, относящимся к протоколу ICMP
    $IPT -A INPUT -p icmp -j ACCEPT
    $IPT -A OUTPUT -p icmp -j ACCEPT
    $IPT -A FORWARD -p icmp -j ACCEPT

    # Разрешаем пакеты, относящиеся ко всем установленным соединениям
    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    # !!!!!!!!!! ТОЛЬКО ЕСЛИ ВНУТРЕНЯЯ СЕТЬ ДОВЕРЕННАЯ !!!!!!!!!!!!!
    # Разрешаем пакеты, идущие из локальной сети на этот компьютер и
    # с этого компа в локальную сеть
    $IPT -A INPUT -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
    $IPT -A OUTPUT -o $LOCAL_IFACE -d $LOCAL_NET -j ACCEPT

    # NAT через динамический IP адрес.
    $IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

    # Создаем цепочки для сортировки транзитного трафика и направляем его в них
    $IPT -N allowip
    $IPT -N allowport
    $IPT -A FORWARD -s $LOCAL_NET -j allowip
    # Разрешаем доступ для клиентов указанных в LOCAL_IPS
    # если данная переменная пустая то разрешены все адреса из локальной сети
    if [ "${#LOCAL_IPS[*]}" -ne 0 ]; then
        for i in `seq 1 ${#LOCAL_IPS[*]}`; do
            ip=`echo ${LOCAL_IPS[$i]} | awk '{print $1}'`
            mac=`echo ${LOCAL_IPS[$i]} | awk '{print $2}'`
            if [ -n "$mac" ]; then
                $IPT -A allowip -m mac -s $ip --mac-source $mac -j allowport
            else
                $IPT -A allowip -s $ip -j allowport
            fi
        done
    else
         $IPT -A allowip -s $LOCAL_NET -j allowport
    fi
    # Разрешаем транзитные соединения из локальной сети
    for port in $ALLOWED_PORTS_FW_TCP; do
        $IPT -A allowport -p tcp -m tcp --dport $port -j ACCEPT
    done
    for port in $ALLOWED_PORTS_FW_UDP; do
        $IPT -A allowport -p udp -m udp --dport $port -j ACCEPT
    done

    # Разрешаем входящие соединения c сервером
    for port in $ALLOWED_PORTS_IN_TCP; do
        $IPT -A INPUT -p tcp -m tcp --dport $port -j ACCEPT
    done
    for port in $ALLOWED_PORTS_IN_UDP; do
        $IPT -A INPUT -p udp -m udp --dport $port -j ACCEPT
    done

    # Разрешаем исходящие соединения c сервера
    for port in $ALLOWED_PORTS_OT_TCP; do
        $IPT -A OUTPUT -p tcp -m tcp --dport $port -j ACCEPT
    done
    for port in $ALLOWED_PORTS_OT_UDP; do
        $IPT -A OUTPUT -p udp -m udp --dport $port -j ACCEPT
    done
}

stop_fw()
{
    # Сбрасывем все правила
    $IPT -F
    $IPT -X
    $IPT -t nat -F
    $IPT -t nat -X
    $IPT -t mangle -F
    $IPT -t mangle -X
    $IPT -P INPUT ACCEPT
    $IPT -P FORWARD ACCEPT
    $IPT -P OUTPUT ACCEPT

    # Выключить перенаправление пакетов через ядро.
    echo 0 > /proc/sys/net/ipv4/ip_forward
}

case "$1" in
start)   echo -n "Starting firewall: iptables"
   start_fw
        echo "."
   ;;
stop)   echo -n "Stopping firewall: iptables"
   stop_fw
        echo "."
        ;;
restart) echo -n "Restarting firewall: iptables"
        stop_fw
        start_fw
   echo "."
        ;;
*)   echo "Usage: $0 start|stop|restart"
        exit 1
        ;;
esac
exit 0
Grin
 
Сообщения: 97
Зарегистрирован: 04 фев 2010, 16:10

Re: Проблема с iptables.

Сообщение Alex2ndr » 17 мар 2010, 09:05

Что-то меня терзают смутные сомнения...
Дайте вывод echo $SHELL и $SHELL --version. У меня это выглядит так -
Код: Выделить всё
alex@deb-gate3:~$ echo $SHELL
/bin/bash
alex@deb-gate3:~$ $SHELL --version
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
alex@deb-gate3:~$


Я так понимаю ему описание массива не нравится... Можно конечно выкинуть, но пока попробуем менее болезненный способ.
И еще попробуйте перед этим массивом LOCAL_IPS вставить такую строку:
Код: Выделить всё
declare -a LOCAL_IPS
Alex2ndr
Активист
 
Сообщения: 533
Зарегистрирован: 15 фев 2010, 11:01

Re: Проблема с iptables.

Сообщение Grin » 17 мар 2010, 13:21

Alex2ndr писал(а):Дайте вывод echo $SHELL и $SHELL --version


root@Linux-S:/home/alex# echo $SHELL
/bin/bash
root@Linux-S:/home/alex# $SHELL --version
GNU bash, version 4.0.33(1)-release (i486-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Alex2ndr писал(а):И еще попробуйте перед этим массивом LOCAL_IPS вставить такую строку:

declare -a LOCAL_IPS


Вставил, при старте получаю следующее:

root@Linux-S:/home/alex# /etc/init.d/rc.iptables start
/etc/init.d/rc.iptables: 25: declare: not found
/etc/init.d/rc.iptables: 26: Syntax error: "(" unexpected
root@Linux-S:/home/alex#
Grin
 
Сообщения: 97
Зарегистрирован: 04 фев 2010, 16:10

Пред.След.

Вернуться в Администрирование Ubuntu-Server

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1