IPtable을위한 디버거


47

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

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

고마워 크리스

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

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

답변:


10

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

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

아이디어 주셔서 감사합니다. 불행히도, 모든 규칙을 기록 할 수는 없습니다 (한 시스템에서는 디스크가 그렇게 빠르지 않을 것입니다. 다른 시스템에서는 iptables 로깅을 커널에서 사용할 수 없습니다.)
Chris Lercher

1
명명 된 파이프를 softsoftoror.org/Logs/Syslog/pipes_in_syslog.shtml 파일로 사용하십시오. 그러나 커널에 로그인 할 수 없기 때문에 SOL
Haakon

고마워, 아마 내 문제를 해결할 수는 없지만 일반적으로 배관 syslog가 가능하다는 것을 아는 것이 좋습니다. 다른 시간에 유용 할 수 있습니다!
Chris Lercher

로깅에 대한 한 가지 관련 질문 : iptables가 여러 패킷을 동시에 처리합니까 (로그 항목이 인터리브 될 수 있습니까)? 이 경우 TOS 아이디어는 많은 iptables LOG 분석에 반드시 필요한 것입니다!
Chris Lercher

나는 그것에 대한 답을 모른다. 각 인터페이스는 최소한 iptables에 의해 동시에 처리 될 것으로 기대합니다.
Haakon

82

최근 충분한 커널과 버전의 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)

8
고마워요, 대단합니다! 그것은 실제로 가장 좋은 대답입니다, 나는 그것을 받아 들일 수 있기를 바랍니다 (바운티 질문이었습니다. 받아 들인 대답은 명확합니다). 커널 제한으로 인해 모든 시스템에서 사용할 수는 없지만 일부 시스템에서는 사용할 수 있습니다. 이 답변은 내가 찾던 것에 가깝기 때문에 공감할 가치가 있습니다.
Chris Lercher

지난 밤 iptables 매뉴얼 페이지를 다시 읽을 때이 기능을 발견하여 다른 질문에 대답 할 수있었습니다. 비교적 새로운 기능인 것 같습니다. 승인 된 것으로 표시 할 수 없다는 걱정은 없습니다. 어쩌면 이것은 시간이 지남에 따라 또 다른 Populist 배지를 얻을 수있을 정도로 투표 될 것입니다.
Zoredache

이것은 실제로 iptables의 패킷 추적에 대한 정식 답변입니다. 일부 최신 커널이 기본적으로 커널을 활성화하지 않는 것은 너무 나쁩니다.
피터 그레이스

커널은 얼마 전에 TRACE를 지원합니까? CentOS 6.4에서는 성공했지만 CentOS 6.2에서는 사용하지 않았습니다
sebelk

6

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

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/


1
감사. 포인트 1)과 3)은 iptables 규칙을 통해 패킷을 따르는 것과 관련이 없지만 "--log-level"을 기반으로 로그 항목을 리디렉션하는 데 도움이 될 수 있습니다. 로깅 (다른 솔루션이 전혀없는 경우).
Chris Lercher

2

같은 질문을하고 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

감사합니다, 크리스


0

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

"iptables -nvL"로 볼 수 있습니다.


2
저자가 원하는 것을 볼 수 있습니다. 바쁜 인터페이스에서 iptables 규칙을 테스트하려는 경우 단순히 패킷을 보는 것만으로도 많은 도움이되지 않습니다. 패킷이 여러 규칙에서 일치하고 프로세스에서 사용자 정의 체인을 뛰어 넘을 가능성이있는 경우 (일반적으로 원치 않는 IP 주소 및 플러드 방지 규칙 필터링).
PP.

@PP : 정확히, 당신은 내 마음을 읽고 있습니다. @Vi : 감사합니다. 일부 상황에서는 도움이 될 수 있으며 가끔 사용했습니다. 이제 더 강력한 것이 필요합니다.
Chris Lercher

-2

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

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

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


사실이 아니다. 패킷은 여러 규칙과 일치 할 수 있습니다. 규칙이 (같은 작용하지 않는 -j DROP이상 -j ACCEPT)는 단지 체인에있어서 일치하는 것.
PP.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.