Доброго времени суток.
Такая проблема:
Изменяю таблицы mangle и nat, маркируя пакет в mangle
iptables -t mangle -A PREROUTING -m string --string 'test' --algo kmp -j MARK --set-mark 1
Тут же вывожу в сислог для проверки из двух таблиц - из mangle и nat:
iptables -t mangle -A PREROUTING -m mark --mark 1 -j LOG
iptables -t nat -A PREROUTING -j LOG
При каждом обновлении страницы в сислоге появляется запись лога mangle (с маркировкой) и очень редко что-то из nat (только SYN).
В примере несколько раз обновил страницу:
Jan 16 18:47:12 authsrv kernel: [124662.472390] IN=eth0 OUT= MAC=08:00:27:ac:b3:07:00:19:d1:ab:47:e1:08:00 SRC=192.168.1.50 DST=192.168.1.235 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=10375 DF PROTO=TCP SPT=50949 DPT=80 WINDOW=8192 RES=0x00 SYN URGP=0
Jan 16 18:47:12 authsrv kernel: [124662.476614] IN=eth0 OUT= MAC=08:00:27:ac:b3:07:00:19:d1:ab:47:e1:08:00 SRC=192.168.1.50 DST=192.168.1.235 LEN=427 TOS=0x00 PREC=0x00 TTL=128 ID=10377 DF PROTO=TCP SPT=50949 DPT=80 WINDOW=16425 RES=0x00 ACK PSH URGP=0 MARK=0x1
Jan 16 18:47:13 authsrv kernel: [124663.888539] IN=eth0 OUT= MAC=08:00:27:ac:b3:07:00:19:d1:ab:47:e1:08:00 SRC=192.168.1.50 DST=192.168.1.235 LEN=427 TOS=0x00 PREC=0x00 TTL=128 ID=10401 DF PROTO=TCP SPT=50949 DPT=80 WINDOW=16300 RES=0x00 ACK PSH URGP=0 MARK=0x1
Jan 16 18:47:14 authsrv kernel: [124665.145198] IN=eth0 OUT= MAC=08:00:27:ac:b3:07:00:19:d1:ab:47:e1:08:00 SRC=192.168.1.50 DST=192.168.1.235 LEN=427 TOS=0x00 PREC=0x00 TTL=128 ID=10420 DF PROTO=TCP SPT=50949 DPT=80 WINDOW=16175 RES=0x00 ACK PSH URGP=0 MARK=0x1
Jan 16 18:47:16 authsrv kernel: [124666.361113] IN=eth0 OUT= MAC=08:00:27:ac:b3:07:00:19:d1:ab:47:e1:08:00 SRC=192.168.1.50 DST=192.168.1.235 LEN=427 TOS=0x00 PREC=0x00 TTL=128 ID=10441 DF PROTO=TCP SPT=50949 DPT=80 WINDOW=16425 RES=0x00 ACK PSH URGP=0 MARK=0x1
Jan 16 18:47:17 authsrv kernel: [124667.513106] IN=eth0 OUT= MAC=08:00:27:ac:b3:07:00:19:d1:ab:47:e1:08:00 SRC=192.168.1.50 DST=192.168.1.235 LEN=427 TOS=0x00 PREC=0x00 TTL=128 ID=10457 DF PROTO=TCP SPT=50949 DPT=80 WINDOW=16300 RES=0x00 ACK PSH URGP=0 MARK=0x1
Jan 16 18:47:18 authsrv kernel: [124668.634435] IN=eth0 OUT= MAC=08:00:27:ac:b3:07:00:19:d1:ab:47:e1:08:00 SRC=192.168.1.50 DST=192.168.1.235 LEN=427 TOS=0x00 PREC=0x00 TTL=128 ID=10478 DF PROTO=TCP SPT=50949 DPT=80 WINDOW=16175 RES=0x00 ACK PSH URGP=0 MARK=0x1
Jan 16 18:47:20 authsrv kernel: [124670.690631] IN=eth0 OUT= MAC=08:00:27:ac:b3:07:00:19:d1:ab:47:e1:08:00 SRC=192.168.1.50 DST=192.168.1.235 LEN=427 TOS=0x00 PREC=0x00 TTL=128 ID=10505 DF PROTO=TCP SPT=50949 DPT=80 WINDOW=16425 RES=0x00 ACK PSH URGP=0 MARK=0x1
Jan 16 18:47:22 authsrv kernel: [124672.266545] IN=eth0 OUT= MAC=08:00:27:ac:b3:07:00:19:d1:ab:47:e1:08:00 SRC=192.168.1.50 DST=192.168.1.235 LEN=427 TOS=0x00 PREC=0x00 TTL=128 ID=10529 DF PROTO=TCP SPT=50949 DPT=80 WINDOW=16300 RES=0x00 ACK PSH URGP=0 MARK=0x1
Объясните плз, в чём может быть проблема?
вывод iptables-save:
# Generated by iptables-save v1.4.18 on Thu Jan 16 16:47:18 2014
*raw
:PREROUTING ACCEPT [8:576]
:OUTPUT ACCEPT [6:745]
COMMIT
# Completed on Thu Jan 16 16:47:18 2014
# Generated by iptables-save v1.4.18 on Thu Jan 16 16:47:18 2014
*mangle
:PREROUTING ACCEPT [7:536]
:INPUT ACCEPT [7:536]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [12:1449]
:POSTROUTING ACCEPT [12:1449]
-A PREROUTING -m string --string "test" --algo kmp --to 65535 -j MARK --set-xmark 0x1/0xffffffff
-A PREROUTING -m mark --mark 0x1 -j LOG
COMMIT
# Completed on Thu Jan 16 16:47:18 2014
# Generated by iptables-save v1.4.18 on Thu Jan 16 16:47:18 2014
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -j LOG
COMMIT
# Completed on Thu Jan 16 16:47:18 2014
# Generated by iptables-save v1.4.18 on Thu Jan 16 16:47:18 2014
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -s 10.90.0.3/32 -i tun0 -m state --state NEW -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -d 10.90.0.0/16 -o tun0 -m state --state NEW -j ACCEPT
COMMIT
# Completed on Thu Jan 16 16:47:18 2014
Пользователь решил продолжить мысль 16 Января 2014, 21:11:22:
Сам себе и отвечу - проблема в том, что правило PREROUTING таблицы nat срабатывает ТОЛЬКО ОДИН раз при первоначальном пакете (а это, к слову, SYN, в котором нет упоминания об url).
Все остальные пакеты PREROUTING таблицы nat не проходят, а сразу подменяются адреса по анологии.