Перейти до

Разные Вопросы по Stg и Iptables


Рекомендованные сообщения

Доброе время суток

1. Перестали выполнятся скрипты onconnect, ondisconnect. Значит начал создавать пользователей, а то проверял только на стандартном test и перестали выполнятся скрипты. 100 % уверен, что ничего не менял на сервере, а только создал пользователей.

Вот мои скрипты

#!/bin/bash
login=$1
ip=$2
cash=$3
id=$4
iptables -t filter -A INPUT -s $ip -j ACCEPT
iptables -t filter -A FORWARD -s $ip -j ACCEPT
iptables -t filter -A FORWARD -d $ip -j ACCEPT
iptables -t filter -A OUTPUT -d $ip -j ACCEPT

 

#!/bin/bash
ip=$2
iptables -t filter -D INPUT -s $ip -j ACCEPT
iptables -t filter -D FORWARD -s $ip -j ACCEPT
iptables -t filter -D FORWARD -d $ip -j ACCEPT
iptables -t filter -D OUTPUT -d $ip -j ACCEPT

 

2. Не пойму, почему не работает днс сервер. Default policy DROP.

Со своего компа просканил открытые порты 53 есть но днс не работает.

Если

Default policy ACCEPT то ДНС работает

Вот правила мои:

#DNS

iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT

iptables -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT

iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT

iptables -t filter -A OUTPUT -p tcp --sport 53 -j ACCEPT

iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

iptables -t filter -A FORWARD -p udp --sport 53 -j ACCEPT

iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT

iptables -t filter -A OUTPUT -p udp --sport 53 -j ACCEPT

 

3. В примерах настройки СТГ скрипт OnDisconnect такой

#!/bin/bash

ip=$2

iptables -t filter -D INPUT -s $ip -j ACCEPT
#while [$? -eq 0]
#iptables -t filter -D INPUT -s $ip -j ACCEPT
#done

iptables -t filter -D FORWARD -s $ip -j ACCEPT
#while [$? -eq 0]
#iptables -t filter -D FORWARD -s $ip -j ACCEPT
#done

iptables -t filter -D FORWARD -d $ip -j ACCEPT
#while [$? -eq 0]
#iptables -t filter -D FORWARD -d $ip -j ACCEPT
#done

iptables -t filter -D OUTPUT -d $ip -j ACCEPT
#while [$? -eq 0]
#iptables -t filter -D OUTPUT -d $ip -j ACCEPT
#done

Можете мне объяснить, как он должен работать и почему он у меня не удаляет правила ?

 

4. Когда у меня скрипты те выполнялись я заметил такой прикол: когда клиент отключается в inetaccess то все проги у которых активные подключение к инету(например Download Master, QIP) продолжают тянуть с инета хотя в авторизаторе отключен. Знач мне нужно отрубать принудительно все подключения с определенного хоста и потом удалить все нужные правила из iptables. Как это сделать ?

Ссылка на сообщение
Поделиться на других сайтах

1. добавь вывод сторки и прьверь испоняеться или нет

тоестьт второй строкой echo $1 $2 $3 $4 > /etc/stargazer/OnConlog

если в файл пишетьсяс значит все испоняеться

2. смотри настройки днс

резолвиться ли на самом сервере имена

возможно в настройках намеда что то не то

3.

#!/bin/bash

 

ip=$2

 

iptables -t filter -D INPUT -s $ip -j ACCEPT

while [$? -eq 0]

iptables -t filter -D INPUT -s $ip -j ACCEPT

done

 

iptables -t filter -D FORWARD -s $ip -j ACCEPT

while [$? -eq 0]

iptables -t filter -D FORWARD -s $ip -j ACCEPT

done

 

iptables -t filter -D FORWARD -d $ip -j ACCEPT

while [$? -eq 0]

iptables -t filter -D FORWARD -d $ip -j ACCEPT

done

 

iptables -t filter -D OUTPUT -d $ip -j ACCEPT

while [$? -eq 0]

iptables -t filter -D OUTPUT -d $ip -j ACCEPT

done

 

должно быть так

и еще одно при подключению пользователю открываються все порты INPUT, OUTPUT а это не хорошо

закоментировал цыклы зря такак как правил у тебя может быть несколько а не одно

а удалять надо все

а так все должно работать

открывай только нужнее

Ссылка на сообщение
Поделиться на других сайтах

1. Ничего не понял. Сообщение не несет никакой смысловой нагрузки :huh:

Что-то нужно проверить. Так и не понял. Пожалуйста подробнее.

2. Повторяюсь пока default policy ACCEPT - DNS полностью работоспособен. И только после того как выполняю файл с правилами iptables Он перестает работать.

3. Извеняюсь опечатался := ondisconnect вот такой у меня

#!/bin/bash

ip=$2

iptables -t filter -D INPUT -s $ip -j ACCEPT
while [$? -eq 0]
iptables -t filter -D INPUT -s $ip -j ACCEPT
done

iptables -t filter -D FORWARD -s $ip -j ACCEPT
while [$? -eq 0]
iptables -t filter -D FORWARD -s $ip -j ACCEPT
done

iptables -t filter -D FORWARD -d $ip -j ACCEPT
while [$? -eq 0]
iptables -t filter -D FORWARD -d $ip -j ACCEPT
done

iptables -t filter -D OUTPUT -d $ip -j ACCEPT
while [$? -eq 0]
iptables -t filter -D OUTPUT -d $ip -j ACCEPT
done

Так вот почему он не работает ? Он не убивает правила эти: FORWARD -s, FORWARD -d, OUTPUT -d. А INPUT -s правило он убивает. Если сделать вот так

#!/bin/bash

ip=$2

iptables -t filter -D INPUT -s $ip -j ACCEPT
#while [$? -eq 0]
#iptables -t filter -D INPUT -s $ip -j ACCEPT
#done

iptables -t filter -D FORWARD -s $ip -j ACCEPT
#while [$? -eq 0]
#iptables -t filter -D FORWARD -s $ip -j ACCEPT
#done

iptables -t filter -D FORWARD -d $ip -j ACCEPT
#while [$? -eq 0]
#iptables -t filter -D FORWARD -d $ip -j ACCEPT
#done

iptables -t filter -D OUTPUT -d $ip -j ACCEPT
#while [$? -eq 0]
#iptables -t filter -D OUTPUT -d $ip -j ACCEPT
#done

То все правила коректно удаляются. Но этот код не совсем правильный потому, что

закоментировал цыклы зря такак как правил у тебя может быть несколько а не одно

а удалять надо все

 

И на 4 пожалуйста ответьте

 

Вот пример моего скрипта для настройки iptables

#!/bin/bash


# ip-адрес интерфейса eth0
server0=10.77.11.100

# ip-адрес интерфейса eth1
server1=10.77.20.1

# Интерфейс смотрящий в сеть провайдера
iface_pro=eth0

# Интерфейс смотрящий в сеть клиентов
iface_cli=eth1

# Интерфейс через который приходит инет
iface_world=ppp0

# Порты на которых работает авторизатор/конфигуратор
conf_port=5555
user_port1=5555
user_port2=5554

# Включаем форвардинг

echo "1" > /proc/sys/net/ipv4/ip_forward

# Очищаем правила файрвола
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X

# Всех нах рубим DROP типа
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Разрешаем пингам ходить везде
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A FORWARD -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# Разрешаем прогам работать с lo
iptables -t filter -A INPUT -d 127.0.0.1 -j ACCEPT
iptables -t filter -A OUTPUT -d 127.0.0.1 -j ACCEPT

# Разрешаем ходить пакетам через сетевуху
iptables -t filter -A INPUT -s 10.77.11.1 -j ACCEPT
iptables -t filter -A OUTPUT -d 10.77.11.1 -j ACCEPT

#DNS
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --sport 53 -j ACCEPT


#iptables -t filter -A FORWARD -i eth0 -o eth1 -j ACCEPT
#iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT


# Разрешаем SSH
iptables -t filter -A INPUT -p tcp -s 10.77.20.0/24 -d $server1 --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d 10.77.20.0/24 -s $server1 --sport 22 -j ACCEPT

# Разрешаем конфигуратору работать
iptables -t filter -A INPUT -p tcp -s 10.77.20.0/24 -d $server1 --dport $conf_port -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d 10.77.20.0/24 -s $server1 --sport $conf_port -j ACCEPT

# Разрешаем Inet Access
iptables -t filter -A INPUT -p udp -s 10.77.20.0/24 -d $server1 --dport $user_port1 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -d 10.77.20.0/24 -s $server1 --sport $user_port1 -j ACCEPT

iptables -t filter -A INPUT -p tcp -s 10.77.20.0/24 -d $server1 --dport $user_port2 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d 10.77.20.0/24 -s $server1 --sport $user_port2 -j ACCEPT

# NAT
iptables -t nat -A POSTROUTING -s 10.77.20.253 -o ppp0 -j MASQUERADE

Чтоб понятнее была топология сети - вот картинка.

1077201ke2.th.png

 

Очень прошу кто-то знающий помогите мне!!! Я уже вдоль и поперек перечетал документацию по iptables, stargazer, bind, pptp и по прямым рукам. Голова пухнет, но я знаю победа уже рядом... :) %)

Ссылка на сообщение
Поделиться на других сайтах

iptables -t filter -A INPUT -p icmp -j ACCEPT

iptables -t filter -A INPUT -p icmp -j ACCEPT

iptables -t filter -A FORWARD -p icmp -j ACCEPT

iptables -t filter -A OUTPUT -p icmp -j ACCEPT

это что вижу сразу

по поводу OnDissconect

есть такой прикол если идет какая то ошибка с выводом то скрипт прерываеться

попробуй так

 

iptables -t filter -D FORWARD -s $ip -j ACCEPT > /dev/null

while [$? -eq 0]

iptables -t filter -D FORWARD -s $ip -j ACCEPT > /dev/null

done

Ссылка на сообщение
Поделиться на других сайтах

просто будут юзать инет на халяву

посему пинги только при включенном инеете

на 53 порт тоже проксю можно поставить

 

вместе с форвардом делай еще и маскарад в правилах ключения инета и отключения

Ссылка на сообщение
Поделиться на других сайтах

1. Сначала надо проверить выполняются скрипты или нет. Добавь в них (пораньше! первой исполняемой строкой) строку записи информации в лог, ну естественно поправь под себя

echo "Connect `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /home/stargazer/users/$LOGIN/connect.log

Если после соединения в логе увидишь соответствующую запись - скрипт выполняется.

Если скрипт не выполняется - смотри ls -l /etc/stargazer/ права и владелца, также посмотри ps aux, а вдруг у тебя и нет процесса stg-exec, тогда проверяй конфиг.

Если скрипт выполняется, но правила не добавляются - добавь к iptables полный путь. Визуально других проблем нет.

Вообще рекомендую использовать подсчет через ipq - точнее и понятней. А все правила пользователей добавлять не в общие таблицы, а в дополнительно созданные цепочки - проще и понятней.

 

2. Я так понимаю что у тебя на сервере должен быть установлен DNS-сервер, поэтому форвардить запросы совершенно не надо. Достаточно разрешить исходящие соединения

iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT

iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

если нужно разрешить пользователям получать доступ к DNS без регистрации

iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

iptables -t filter -A OUTPUT -p udp --sport 53 -j ACCEPT

 

3. Циклы необходимы, а вдруг у тебя почемуто не одно правило, а больше. Циклы удалят все. Визуально вижу такую проблему - символы [ и ] должны отделятся пробелами, команда все таки.

 

4. Честно говоря нифига не понял.

Ссылка на сообщение
Поделиться на других сайтах

-rwxrwxrw-  1 root root 2722 Дек  6 17:17 fw
-rwxrwxrw-  1 root root   88 Дек  7 17:01 mas
-rwxrwxrw-  1 root root  155 Ноя 28 14:58 OnChange
-rwsrwsrwx  1 root root  326 Дек 12 13:34 OnConnect
-rwxrwxrw-  1 root root  494 Дек  6 18:46 OnDisconnect
-rwxrwxrw-  1 root root  304 Ноя 28 14:58 OnUserAdd
-rwxrwxrw-  1 root root   77 Ноя 28 14:58 OnUserDel
-rw-rw-rw-  1 root root   98 Дек  7 19:32 rules
-rw-rw-rw-  1 root root 7062 Дек  5 20:34 stargazer.conf

Вот что я нашел запущеным

root      2252  0.0  1.3 24688 2632 ?        S<   13:25   0:00 /usr/sbin/stargazer
root      2253  0.0  0.7  3364 1412 ?        S    13:25   0:00 stg-exec
root      2254  0.0  0.7  3364 1412 ?        S    13:25   0:00 stg-exec
root      2255  0.0  0.7  3364 1412 ?        S    13:25   0:00 stg-exec

просто будут юзать инет на халяву

Теперь дошло. Пока к серверу еще не подключен никто и пинги для тестов открыл.

 

 

Но скрипты так и не выполняется.

этого не понял

символы [ и ]
Я так понимаю что у тебя на сервере должен быть установлен DNS-сервер, поэтому форвардить запросы совершенно не надо.

Понял, но пока мой ДНС не работает оставлю так как есть.

4. Честно говоря нифига не понял.
Что именно ?
Ссылка на сообщение
Поделиться на других сайтах
команду echo в скрипты добавлял? какой результат?

Добавлял.

echo "Connect `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /home/stargazer/users/$LOGIN/connect.log

Изменил я на

echo "Connect `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /home/lol

Мне просто так удобнее

Результат нулевой

А потом вручную запустил скрипт и вот, что увидел в файле

Connect 2007.12.12-20.06.47 %ip %cash

Эт понятно так и долно быть. Почему старгазер их перестал выполнять ? ХЗ Мож переустановить надо его ?

Ссылка на сообщение
Поделиться на других сайтах
[root@dvpro vlad]# ls -l /etc/stargazer/

итого 40

-rwxrwxrw-  1 root root 2722 Дек  6 17:17 fw

-rwxrwxrw-  1 root root  88 Дек  7 17:01 mas

-rwxrwxrw-  1 root root  155 Ноя 28 14:58 OnChange

-rwxrwxrwx  1 root root  296 Дек 12 20:04 OnConnect

-rwxrwxrw-  1 root root  494 Дек  6 18:46 OnDisconnect

-rwxrwxrw-  1 root root  304 Ноя 28 14:58 OnUserAdd

-rwxrwxrw-  1 root root  77 Ноя 28 14:58 OnUserDel

-rw-rw-rw-  1 root root  98 Дек  7 19:32 rules

-rw-rw-rw-  1 root root 7062 Дек  5 20:34 stargazer.conf

[root@dvpro vlad]#

Ссылка на сообщение
Поделиться на других сайтах

Проблема исполнения скриптов решилась переустановкой STG.

Еще с ДНС только не разобрался. Какого хрена он не работает после выполнения скрипта firewall`а ? Я ж во все стороны разрешил по TCP и UDP на 53 порту....

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

Внесу свою лепту.

 

1. Обрати внимание на регистр переменных. Баш очень чувствителен к этому. А вообще, судя по всему у тебя не в работе/неработе скриптов дело, а в том, что у тебя неправильно настроен iptables.

 

2. iptables настрой лучше по примеру из мануала. Когда я первый раз с этим завязался, у меня была та же проблем. Весь прикол в том, что построенные таким образом, как у тебя, правила, не позволят работать не только ДНС, но и ftp, если он у тебя есть. И еще целой куче сервисов. Там завязка с установленными соединениями RELATED,ESTABLISHED. Переделай под себя пример из мануала. Реально помагает.

 

Вот мой пример (работает уже два года):

#Здесь идет блок переменных, к. используются далее в скрипте
ipt="<полный путь к iptables>"
lo_if="lo"
#и т.д.

#Тут возможно надо будет подклчить модули
/sbin/modprobe ip_tables
#и т.д.

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 -N bad_tcp_packets
$ipt -N allowed
$ipt -N tcp_packets
$ipt -N udp_packets
$ipt -N icmp_packets

#Правила по умолчанию
$ipt -P INPUT DROP
$ipt -P FORWARD DROP
$ipt -P OUTPUT DROP

#Описываем цепочку для "плохих" пакетов
$ipt -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \
   -m state --state NEW -j REJECT --reject-with tcp-reset
$ipt -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

#Описываем цепочку allowed - разрешенные пакеты
$ipt -A allowed -p tcp --syn -j ACCEPT
$ipt -A allowed -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A allowed -p tcp -j DROP

#Цепочка tcp_packets - для обработки пакетов протокола tcp
#IRC, SSH, FTP,ntp можно всем
$ipt -A tcp_packets -p tcp -m mport --dports 20,21,22,6667:6670,123 -j allowed
#Админский доступ  - sg_config, samba, http
$ipt -A tcp_packets -p tcp -s $admin -m mport --dports 5554,139,80 -j allowed

#цепочка udp
#dns,ntp,InetAccess для всех пользователей сети
$ipt -A udp_packets -p udp -s <адрес сети> -m mport \
   --dports 53,123,5555 -j ACCEPT
#Samba под Вистой работает чуть хитрее,
#поэтому ей надо октрыть еще один порт udp
#Если доступ будет тоько с ХР, то не обязательно
$ipt -A udp_packets -p udp -s $admin --dport 137 -j ACCEPT
#DHCP можно всем
$ipt -A udp_packets -p udp --sport 68 --dport 67 -j ACCEPT

#################Цепочка INPUT
#отбрасываем "плохие" пакеты
$ipt -A INPUT -p tcp -j bad_tcp_packets
#разрешаем установленные соединения для всех входящих запросов на вс
$ipt -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
#все можно на локальном интерфейсе
$ipt -A INPUT -p all -i $lo_if -j ACCEPT

#обрабатываем остальные пакеты
$ipt -A INPUT -p tcp -j tcp_packets
$ipt -A INPUT -p udp -j udp_packets
$ipt -A INPUT -p icmp -j icmp_packets

##################Цепочка FORWARD
#Отбрасываем "плохие" пакеты
$ipt -A FORWARD -p tcp -j bad_tcp_packets
#Все остальное добавляется/удаляется скриптами OnConnect/OnDisconnect

##################Цепочка OUTPUT
#отбрасываем "плохие" пакеты
$ipt -A OUTPUT -p tcp -j bad_tcp_packets
#Разрешаем компу общаться с внешним миром
$ipt -A OUTPUT -p all -o $lo_if -j ACCEPT

$ipt -t nat -A POSTROUTING -j MASQUERADE

Править скрипт по вкусу и необходимости

 

 

 

######################################################

Вот примеры моих скриптов OnConnect/OnDisconnect

#OnConnect
ipt="/sbin/iptables"

# Login
login=$1
#user IP
ip=$2
#cash
cash=$3
#user ID
id=$4

net="<адрес сети с маской>"

$ipt -A FORWARD -s $ip -d ! $net -j allowed
$ipt -A FORWARD -d $ip -m state --state ESTABLISHED,RELATED -j allowed

echo "C `date +%Y.%m.%d-%H.%M.%S` $ip $cash" >> /var/stargazer/users/$login/connect.log

 

######################################################

#OnDisconnect
ipt="/sbin/iptables"

# Login
login=$1
#user IP
ip=$2
#cash
cash=$3
#user ID
id=$4

net="<адрес сети с маской>"

while [ $? -eq 0 ]
do
$ipt -D FORWARD -s $ip -d ! $net -j allowed
$ipt -D FORWARD -d $ip -m state --state ESTABLISHED,RELATED -j allowed
done

echo "D `date +%Y.%m.%d-%H.%M.%S` $ip $cash" >> /var/stargazer/users/$login/connect.log

 

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

 

 

P.S. В таком виде все скрипты работают в Linux SuSE 10, 10.2 и ASP 9.0

Возмножно, в других версиях возможны изменения

 

P.S.S. Для работы скриптов необходимо, чтобы либо стояли патчи к ядру mport, state, если ядро <= 2.4 или 2.6 (тогда патчи можно не ставить - они "вшиты" в ядро).

 

P.S.S.S. Ногами сильно не пинать, но замечания выслушаю. Я же не идеален )).

Ссылка на сообщение
Поделиться на других сайтах

Много букв - все не читал, но что бросилось в глаза:

 

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

 

Делать в одном цикле = делать вообще без цикла. Надо проверять код завершения каждой команды удаления, а не только последней.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...