IPtable을위한 디버거 것. 또는

iptables 규칙을 통해 패킷을 따르는 쉬운 방법을 찾고 있습니다. 모든 트래픽을 기록하고 싶지 않기 때문에 로깅에 대해서는 그리 중요하지 않습니다.

Iptables를위한 Wireshark와 같은 것. 또는 프로그래밍 언어의 디버거와 비슷한 것입니다.

고마워 크리스

참고 : 멋진 GUI 도구 일 필요는 없습니다. 그러나 단순히 패키지 카운터를 표시하는 것 이상을 수행해야합니다.

업데이트 : 요청 된 기능을 제공하는 것을 찾을 수없는 것처럼 보입니다. 이 경우 :하자 적어도 로그인 iptables를 기반으로 좋은 기술을 찾아 – 쉽게 켜고 끌 수 있으며, (동일한 규칙을 작성하지 중복 쓰기의 iptables 규칙을 필요로하지 않습니다 -j LOG-j ...)



답변

직접 솔루션을 생각할 수는 없지만 패킷을 추적하는 방법에 대한 라운드를 생각할 수 있습니다.

  1. 각 규칙을 로그 접두사 지시문 (–log-prefix “Rule 34”)으로 기록하십시오.
  2. scapy 로 테스트 패킷 또는 패킷 스트림을 생성 하고 TOS 필드를 고유 한 것으로 설정하십시오.
  3. 해당 TOS 설정에 대한 로그 파일 출력을 grep하고이를 기록한 규칙을 확인하십시오.

답변

최근 충분한 커널과 버전의 iptables를 가지고 있다면 TRACE 타겟을 사용할 수 있습니다 (적어도 데비안 5.0에 내장 된 것 같습니다). 추적 조건을 가능한 한 구체적으로 설정하고 로그에 많은 정보를 뿌릴 수 있으므로 디버깅하지 않을 때는 TRACE 규칙을 비활성화해야합니다.

TRACE
이 대상은 팩을 표시하므로 커널이 테이블, 체인, 규칙을 통과 할 때 패킷과 일치하는 모든 규칙을 기록합니다. (ipt_LOG 또는 ip6t_LOG 모듈은 로깅에 필요합니다.) 패킷은 문자열 접두사 “TRACE : tablename : chainname : type : rulenum”으로 기록됩니다. 여기서 일반 규칙의 경우 유형은 “rule”이고 암시 적 규칙의 경우 “return”입니다. 사용자 정의 체인의 끝과 내장 체인의 정책에 대한 “정책”. 원시 테이블에서만 사용할 수 있습니다.

이와 같은 규칙을 추가 한 경우

iptables -t raw -A PREROUTING -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE
iptables -t raw -A OUTPUT -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE

다음과 같은 출력이 제공됩니다.

# cat /var/log/kern.log | grep 'TRACE:'
Mar 24 22:41:52 enterprise kernel: [885386.325658] TRACE: raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325689] TRACE: mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325713] TRACE: nat:PREROUTING:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: nat:nat.1:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: mangle:INPUT:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:INPUT:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_all_c1:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_irc_c2:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)


답변

한 게시물에 대한 세 가지 답변 :

1) 스크립트로 디버그 :

#!/bin/bash
debug() {
    if [ -n "$debug" ]; then
        $@ || echo -e "The command which launched the error:\n$@"
    else
        $@
    fi
}
debug=1
IPTABLES="debug /sbin/iptables"

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
....

2) syslog에 의한 디버그

이 웹 사이트에서 : http://www.brandonhutchinson.com/iptables_fw.html

If you want to make a syslog entry of dropped packets, change:

# Drop all other traffic
/sbin/iptables -A INPUT -j DROP

To:

# Create a LOGDROP chain to log and drop packets
/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP

# Drop all other traffic
/sbin/iptables -A INPUT -j LOGDROP


You may also want to configure the --log-level to log dropped packets to a separate file instead of /var/log/messages:

# Drop all other traffic
/sbin/iptables -A INPUT -j LOGDROP --log-level debug


/etc/syslog.conf change:

# Send iptables LOGDROPs to /var/log/iptables
kern.=debug                                             /var/log/iptables

Reload the syslogd service for the change to take effect.
/sbin/service syslog reload

3) 디버그 없음, 멋진 iptables 편집 :

또한 이것은 도움이 될 수 있습니다 : http://www.fwbuilder.org/


답변

같은 질문을하고 Zoredache가 TRACE / ipt_LOG를 가리키는 해결책이라는 것을 알았습니다!

또한 현재 활성화 된 모든 iptables 규칙보다 LOG-rules를 삽입 / 제거하는 스크립트를 발견했습니다. 나는 그것을 시도하고 정말 멋진 도구라는 것을 알았습니다. -출력은 TRACE 솔루션과 유사합니다.-이점 :로드 된 위치에 관계없이 활성 iptables 구성에서 작동합니다. 즉시 로깅을 켜거나 끌 수 있습니다! Firewall Builder 또는 도구에서 생성 한 방화벽 스크립트는 사용자가 사용하는 모든 것을 수정할 필요가 없습니다 …-단점 : 수정하지 않으면 스크립트가 모든 활성 규칙에 대한 LOG 규칙을 작성합니다. 대신, TRACE 규칙을 사용할 때 아마도 iptables 처리를 조사하려는 주소 / 서비스 / 연결로 로깅을 제한 할 것입니다.

어쨌든, 나는 aproach를 좋아합니다 🙂 Tony Clayton의 Kudos는 다음과 같습니다 .http :
//lists.netfilter.org/pipermail/netfilter/2003-March/043088.html

감사합니다, 크리스


답변

일반적으로 패킷 및 바이트 카운터를 사용하여 규칙의 작동 방식을 확인하고 누락되거나 잘못된 것을 찾습니다.

“iptables -nvL”로 볼 수 있습니다.


답변

AFAIK IP 패킷은 처음 일치 할 때까지 규칙 체인을 통과합니다. 그래서 나는 여기서 무엇이 문제인지 실제로 알지 못한다. 당신이 가지고 있다면:

  1. 규칙 1
  2. 규칙 2
  3. 규칙 3 LOG

패킷이 로그에 기록되면 규칙 3이 첫 번째로 일치하는 규칙임을 의미합니다.


답변