LINUX.ORG.RU

Автосоздание цепочки в iptables


0

2

Перезагрузив систему

root@server:/etc/network# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
root@server:/etc/network# iptables-save
# Generated by iptables-save v1.4.8 on Tue Aug 21 17:31:16 2012
*filter
:INPUT ACCEPT [753:69111]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [581:74330]
COMMIT
# Completed on Tue Aug 21 17:31:16 2012
# Generated by iptables-save v1.4.8 on Tue Aug 21 17:31:16 2012
*mangle
:PREROUTING ACCEPT [772:69980]
:INPUT ACCEPT [756:69394]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [585:74556]
:POSTROUTING ACCEPT [585:74556]
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Tue Aug 21 17:31:16 2012
самосоздается цепочка
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu
что нужно что б она не создавалась? Суть проблемы: стоит игровой сервер, при отключеном иптеблс заходит, с включеным - нет, вчера с тем же набором правил и включеным иптеблс коннект был. После переустановки подключения к интернет заходить перестало. После этого обратил внимание на то что в наборе правил создается такая цепочка, мб из-за нее нет коннекта?


мб из-за нее нет коннекта?

почитай man iptables, дружок. Хотя бы названия цепочек выучи, чтоб понимать, нужен ли FORWARD на интерфейсе с инетом, чтоб вообще какой-то коннект был, и как написать правило INPUT для открытия какого-то внешнего порта.

anonymous
()
Ответ на: комментарий от anonymous
# Completed on Tue Aug 21 17:31:16 2012
# Generated by iptables-save v1.4.8 on Tue Aug 21 17:31:16 2012
*mangle
:PREROUTING ACCEPT [772:69980]
:INPUT ACCEPT [756:69394]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [585:74556]
:POSTROUTING ACCEPT [585:74556]
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Tue Aug 21 17:31:16 2012

Правила для mangle создаются сами!!! Почему?

Andreu
() автор топика
Ответ на: комментарий от Andreu
$ cd /etc
$ sudo find . -name "*" -exec grep -Hn iptables {} \;
./ppp/ip-down.d/0clampmss:4:iptables -t mangle -L -n -v --line-numbers | grep "TCPMSS.*$PPP_IFACE.*clamp" | cut -f1 -d " " | sort -r | xargs -n1 -r iptables -t mangle -D FORWARD
./ppp/ip-up.d/0clampmss:4:iptables -t mangle -o "$PPP_IFACE" --insert FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu

Так же как и у тебя, debian, в отличие от тебя, есть голова на плечах.

anonymous
()
Ответ на: комментарий от anonymous

Т.е. из-за этого правила пакеты не идут на input и нет коннекта к серверу извне? Что делать что б был коннект? Сделать файлы /ppp/ip-up.d/0clampmss и /ppp/ip-down.d/0clampmss не исполняемыми? Если да, то подскажите как это сделать.

Andreu
() автор топика
Ответ на: комментарий от Andreu

ты не прочитал man iptables.

                            _____
  Incoming                 /     \         Outgoing
         -->[Routing ]--->|FORWARD|------->
            [Decision]     \_____/        ^
                 |                        |
                 v                       ____
                ___                     /    \
               /   \                 |OUTPUT|
              |INPUT|                  \____/
               \___/                      ^
                 |                        |
                  ----> Local Process ----

FORWARD - это не правило фильтрации, второй раз тебе туповатому повторяю. Фильтрую входящие соединения правилами INPUT

anonymous
()
Ответ на: комментарий от Andreu

с чего ты взял, что это правило лишнее и мешает твоему товарищу соединиться к тебе, болезный?

anonymous
()
Ответ на: комментарий от anonymous

Методом проб и проверок понял что загвоздка из-за этих правил

$iptables -N LSCHAIN
$iptables -A INPUT -p tcp -m conntrack --ctstate NEW --dport 2106 -m recent --rcheck --seconds 15 --name lserv -j LSCHAIN
$iptables -A LSCHAIN -m recent --remove --name lserv -j ACCEPT
$iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 2106 -j DROP

Перестало пускать на сервер после переустановки интернета на компьютере где находится сервер. Насколько я понимаю при первом подключении определяются данные моего соединения, сохраняются и заносятся в таблицу --name lserv для возможности последующего соединения уже с учетом сохраненных данных. Если я не прав обьясните суть вышеприведенных правил и из-за чего нет коннекта.

Andreu
() автор топика
Ответ на: комментарий от Andreu

Пробовал в вышеприведенных правилах менять местами DROP и ACCEPT и тогда логин сервер пропускает, начал думать над цепочками правил и следуя моей логике получается что приходящий tcp пакет обрабатывается только последним правилом в обход впередистоящих. Опять же следуя логике как должны работать данные правила в совокупности я считаю что первыми должны выполняться правила находящиеся выше, но если бы это было так то блокировались бы только те tcp пакеты которые приходят через интервал времени менее чем 15 секунд после первого tcp пакета. Заранее спасибо за ваше мнение по этому вопросу.

Andreu
() автор топика
Ответ на: комментарий от Andreu

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

Пока что я вобще не вижу --set, поэтому --rcheck должен всегда давать false, то есть -j LSCHAIN не должно срабатывать.

возможности последующего соединения уже с учетом сохраненных данных

Что вы подразумеваете под соединением?

что приходящий tcp пакет обрабатывается только последним правилом в обход впередистоящих.

Пакет обрабатывается или не обрабатывается правилом в зависимости от того, попадает ли он под условия этого правила.

mky ★★★★★
()
Ответ на: комментарий от mky
$iptables -A INPUT -p tcp -m conntrack --ctstate NEW --dport 2106 -m recent --rcheck --seconds 30 --name lserv -j DROP
$iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 2106 -m recent --set --name lserv -j ACCEPT

Посмотрите пожалуйста исправленные цепочки правил. Как по моему мнению должны работать:

$iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 2106 -m recent --set --name lserv -j ACCEPT
1.Входящий tcp пакет обрабатывается, определяется его статус new, учитывается порт на который он пришел, данный пакет запоминается и записывается в таблицу под именем lserv и пропускается.
$iptables -A INPUT -p tcp -m conntrack --ctstate NEW --dport 2106 -m recent --rcheck --seconds 30 --name lserv -j DROP
2.Если входящий tcp пакет приходит еще раз, он опять же обрабатывается и определяется как таковой что уже существует (опция -m recent) и (опция --rcheck) если так то действует правило что если не прошло 30 секунд с момента последней записи по этому tcp пакету то срабатывает (опция -rcheck) и выдает (True) и пакет дропается. 3.Если входящий tcp пакет пришел после 30 секунд с момента последней записи, то он далее по верхней цепочке не пропускается и начинает движение по следующей где ему в очередной раз будет присвоено имя lserv на последующие 30 секунд.

Andreu
() автор топика
Ответ на: комментарий от Andreu

Вроде, всё верно и должно работать. Если что не заработает, смотрите вывод «iptables -L -n -v -x», тогда выводятся счётчики срабатывания правила, и по их изменениям можно понять, срабатывало правило или нет.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.