सवाल Iptables के लिए डीबगर


मैं iptables नियमों के माध्यम से एक पैकेट का पालन करने का एक आसान तरीका ढूंढ रहा हूं। यह लॉगिंग के बारे में इतना कुछ नहीं है, क्योंकि मैं सभी ट्रैफिक लॉग नहीं करना चाहता (और मैं केवल बहुत कम नियमों के लिए लॉग लक्ष्य रखना चाहता हूं)।

Iptables के लिए Wireshark की तरह कुछ। या शायद प्रोग्रामिंग भाषा के लिए डीबगर के समान कुछ भी हो सकता है।

धन्यवाद क्रिस

ध्यान दें: यह एक फैंसी जीयूआई उपकरण नहीं होना चाहिए। लेकिन इसे सिर्फ एक पैकेज काउंटर या तो दिखाने से ज्यादा करना चाहिए।

अद्यतन करें: ऐसा लगता है कि हमें ऐसा कुछ भी नहीं मिल रहा है जो कार्यक्षमता प्रदान करता है। उस स्थिति में: आइए कम से कम एक अच्छी तकनीक खोजें जो iptables लॉगिंग पर आधारित है - जिसे आसानी से चालू और बंद किया जा सकता है, और iptables नियमों को अनावश्यक रूप से लिखने की आवश्यकता नहीं है (उसी नियम को लिखना -j LOG तथा -j ...)


43
2018-03-13 11:00


मूल




जवाब:


मैं प्रत्यक्ष समाधान के बारे में नहीं सोच सकता, लेकिन मैं एक पैकेट को ट्रैक करने के तरीके के बारे में सोच सकता हूं।

  1. एक लॉग उपसर्ग निर्देश (--log-prefix "नियम 34") के साथ प्रत्येक नियम लॉग करें
  2. एक टेस्ट पैकेट या पैकेट स्ट्रीम जेनरेट करें Scapy और टीओएस क्षेत्र को अद्वितीय कुछ सेट करें
  3. उस TOS सेटिंग के लिए लॉग फ़ाइल आउटपुट grep grep और देखें कि कौन से नियम लॉग इन हैं।

9
2018-03-16 12:56



विचार के लिए धन्यवाद। दुर्भाग्यवश, मैं प्रत्येक नियम को लॉग नहीं कर सकता (एक सिस्टम पर, डिस्क शायद ऐसा करने के लिए पर्याप्त तेज़ नहीं होगी। दूसरे पर, कर्नेल में iptables लॉगिंग उपलब्ध नहीं है।) - Chris Lercher
फ़ाइल के रूप में एक नामित पाइप का प्रयोग करें softpanorama.org/Logs/Syslog/pipes_in_syslog.shtml  हालांकि चूंकि आप अपने कर्नेल में लॉग इन नहीं कर सकते हैं, इसलिए आप थोड़े एसओएल हैं - Haakon
धन्यवाद, यह शायद मेरी समस्या का समाधान नहीं करेगा, लेकिन यह जानना आम तौर पर अच्छा है कि पाइपिंग syslog संभव होगा - किसी अन्य समय काम में आ सकता है! - Chris Lercher
लॉगिंग के बारे में एक संबंधित प्रश्न: क्या iptables कई पैकेट को एक साथ संभालता है (ताकि लॉग प्रविष्टियों को अंतःस्थापित किया जा सके)? उस स्थिति में, मुझे लगता है कि टीओएस विचार बहुत सारे iptables LOG विश्लेषण के लिए एक पूर्ण जरूरी होगा! - Chris Lercher
मुझे इसका जवाब नहीं पता। मैं उम्मीद करता हूं कि प्रत्येक इंटरफेस को कम से कम iptables द्वारा एक साथ संभाला जाएगा। - Haakon


यदि आपके पास हाल ही में पर्याप्त कर्नेल और iptables का संस्करण है, तो आप TRACE लक्ष्य का उपयोग कर सकते हैं (कम से कम डेबियन 5.0 पर निर्मित होने लगता है)। आपको अपने ट्रेस की स्थितियों को जितना संभव हो उतना सटीक होना चाहिए और जब आप डिबगिंग नहीं कर रहे हैं तो किसी भी TRACE नियमों को अक्षम करें क्योंकि यह लॉग को बहुत सारी जानकारी देता है।

ट्रेस
  यह लक्ष्य पैक करता है ताकि वह   कर्नेल प्रत्येक नियम को लॉग करेगा   उन ट्रैक्स के रूप में पैकेट से मेल खाते हैं   टेबल, चेन, नियम। (   ipt_LOG या ip6t_LOG मॉड्यूल आवश्यक है   लॉगिंग के लिए।) पैकेट हैं   स्ट्रिंग उपसर्ग के साथ लॉग इन करें: "ट्रेस:   tablename: chainname: प्रकार: rulenum "   जहां सादा के लिए प्रकार "नियम" हो सकता है   नियम, निहित नियम के लिए "वापसी"   उपयोगकर्ता परिभाषित श्रृंखला का अंत और   निर्मित नीति के लिए "नीति"   जंजीर में। इसका उपयोग केवल तभी किया जा सकता है   कच्ची मेज

यदि आपने इस तरह के नियम जोड़े हैं

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)

78
2018-03-25 05:53



धन्यवाद, यह कमाल है! यह वास्तव में सबसे अच्छा जवाब है, काश मैं इसे स्वीकार कर सकता हूं (यह एक उदार सवाल था, इसलिए स्वीकृत उत्तर निश्चित है)। जबकि मैं इसे अपने सभी सिस्टम (कर्नेल सीमाओं के कारण) पर उपयोग नहीं कर सकता, कुछ सिस्टमों पर मैं कर सकता हूं। यह उत्तर उत्थान का हकदार है, क्योंकि यह वास्तव में उस चीज़ के करीब है जो मैं खोज रहा था। - Chris Lercher
मुझे कल रात यह सुविधा मिली जब मैं iptables मैन पेज को फिर से पढ़ रहा था इसलिए मैं एक अलग सवाल का जवाब दे सकता था। अपेक्षाकृत नई सुविधा माना जाता है। स्वीकार्य के रूप में चिह्नित करने में सक्षम नहीं होने के बारे में कोई चिंता नहीं है। हो सकता है कि यह मुझे एक और पॉपुलिस्ट बैज अर्जित करने के लिए समय के साथ पर्याप्त वोट मिलेगा। - Zoredache
Iptables में पैकेट ट्रेसिंग के लिए यह वास्तव में कैननिकल उत्तर है। यह बहुत बुरा है कि कुछ हालिया कर्नेल डिफ़ॉल्ट रूप से इसे सक्षम नहीं करते हैं। - Peter Grace
यहां आपको थीम के बारे में अतिरिक्त जानकारी मिल सकती है: adminberlin.de/iptables-debugging - zzeroo
कर्नेल कितनी देर पहले ट्रैक का समर्थन करता है? मैंने CentOS 6.4 पर सफलता के साथ उपयोग किया है लेकिन CentOS 6.2 में नहीं - sebelk


एक पोस्ट पर तीन जवाब:

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/


6
2018-03-16 16:49



धन्यवाद। प्वाइंट 1) और 3) iptables नियमों के माध्यम से निम्नलिखित पैकेट्स के साथ बहुत कुछ नहीं करना है, लेकिन "--log-level" के आधार पर लॉग प्रविष्टियों को पुनर्निर्देशित करने के बारे में बिंदु सहायक हो सकता है, अगर मुझे अंत में वास्तव में वापस आना पड़ता है लॉगिंग (अगर बिल्कुल कोई अन्य समाधान नहीं है)। - Chris Lercher


एक ही सवाल था और पता चला कि ZACache TRACE / ipt_LOG को इंगित करता है समाधान था!

इसके अतिरिक्त मुझे एक ऐसी स्क्रिप्ट मिली जो वर्तमान में सक्रिय iptables नियमों से पहले LOG- नियमों को सम्मिलित / हटाती है। मैंने इसे आजमाया और इसे वास्तव में एक अच्छा उपकरण पाया। - आउटपुट ट्रैक समाधान के समान है - लाभ: यह सक्रिय iptables विन्यास पर काम करता है, इससे कोई फर्क नहीं पड़ता कि यह कहाँ से लोड किया गया था। आप फ्लाई पर लॉग ऑन चालू / बंद कर सकते हैं! आपको फ़ायरवॉल-स्क्रिप्ट्स को संशोधित करने की आवश्यकता नहीं है जो फ़ायरवॉल बिल्डर या उपकरण जो भी आप उपयोग करते हैं ... - नुकसान: संशोधन के बिना, स्क्रिप्ट सभी सक्रिय नियमों के लिए LOG-नियम बनाता है। इसके बजाय, TRACE नियमों का उपयोग करते समय, आप संभवतया उन पते / सेवाओं / कनेक्शन पर लॉगिंग प्रतिबंधित कर देंगे जिनके लिए आप अब iptables प्रसंस्करण की जांच करना चाहते हैं।

किसी भी तरह, मुझे अपमान पसंद है :) टोनी क्लेटन के लिए कुडोस, एक नज़र डालें: http://lists.netfilter.org/pipermail/netfilter/2003-March/043088.html

सादर, क्रिस


2
2018-05-29 17:50





मैं आमतौर पर पैकेट और बाइट काउंटर का उपयोग यह देखने के लिए करता हूं कि नियम कैसे काम करते हैं और क्या गुम या गलत है।

आप उन्हें "iptables -nvL" द्वारा देख सकते हैं।


0
2018-03-15 12:14



मैं देख सकता हूं कि लेखक क्या चाहता है, यद्यपि; यदि आप एक व्यस्त इंटरफेस पर अपने आईपीटीबल्स नियमों का परीक्षण करने की कोशिश कर रहे हैं तो केवल काउंटर देखकर पूरी तरह से मदद नहीं मिल रही है, खासकर यदि पैकेट कई नियमों से मेल खाता है और प्रक्रिया में उपयोगकर्ता परिभाषित श्रृंखलाओं के आसपास कूदता है (जैसा कि सामान्य है अवांछित आईपी पते, और बाढ़ संरक्षण नियमों को फ़िल्टर करना)। - PP.
@ पीपी: बिल्कुल, आप मेरा दिमाग पढ़ रहे हैं। @ वीआई: धन्यवाद, यह कुछ परिस्थितियों में सहायक हो सकता है, और मैंने कभी-कभी इसका उपयोग किया है। अब मुझे कुछ और शक्तिशाली चाहिए। - Chris Lercher


AFAIK एक आईपी पैकेट पहले मैच तक नियम श्रृंखला का पीछा करता है। तो मैं वास्तव में नहीं देखता कि यहां क्या समस्या है। यदि आपके पास है:

  1. नियम 1
  2. नियम 2
  3. नियम 3 लॉग

और एक पैकेट इसे लॉग में बनाता है, इसका मतलब है कि नियम 3 पहला मिलान नियम है।


-2
2018-03-15 12:39



सच नहीं। पैकेट कई नियमों से मेल खा सकते हैं, और वे करते हैं। जब तक एक नियम में कोई कार्रवाई नहीं होती है (जैसे -j DROP या -j ACCEPT) यह सिर्फ श्रृंखला के नीचे मिलान करना जारी रखेगा। - PP.