Iptables के लिए डिबगर


47

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

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

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

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

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

जवाबों:


10

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

  1. लॉग उपसर्ग निर्देश (- नियम-उपसर्ग "नियम 34") के साथ प्रत्येक नियम को लॉग करें
  2. स्केपी के साथ एक टेस्ट पैकेट या पैकेट स्ट्रीम बनाएं और टीओएस फील्ड को कुछ यूनीक सेट करें
  3. उस टीओएस सेटिंग के लिए लॉग फ़ाइल आउटपुट को grep करें और देखें कि किन नियमों ने इसे लॉग किया।

विचार के लिए धन्यवाद। दुर्भाग्य से, मैं हर नियम को लॉग नहीं कर सकता (एक सिस्टम पर, डिस्क संभवतः ऐसा करने के लिए पर्याप्त तेज़ नहीं होगी। दूसरे पर, iptables लॉगिंग कर्नेल में उपलब्ध नहीं है।)
क्रिस लेर्चर

1
फ़ाइल नाम के रूप में नामांकित पाइप का उपयोग करें softpanorama.org/Logs/Syslog/pipes_in_syslog.shtml हालाँकि जब से आप अपनी कर्नेल में लॉग इन नहीं कर सकते हैं तो आप SOL
Haakon

धन्यवाद, यह शायद मेरी समस्या को हल नहीं करेगा, लेकिन आम तौर पर यह जानना अच्छा है, कि पाइपिंग syslog संभव होगा - किसी अन्य समय में काम आ सकता है!
क्रिस लेचर

लॉगिंग के बारे में एक संबंधित प्रश्न: क्या iptables कई पैकेटों को समवर्ती रूप से संभालता है (ताकि लॉग एंट्रीज को इंटरलीव्ड किया जा सके)? उस स्थिति में, मुझे लगता है कि टीआईओएस विचार बहुत सारे iptables के लिए एक संपूर्ण विश्लेषण होना चाहिए!
क्रिस लेचर

मुझे इसका उत्तर नहीं पता है। मुझे उम्मीद है कि प्रत्येक इंटरफ़ेस को कम से कम हालांकि iptables द्वारा समवर्ती रूप से नियंत्रित किया जाएगा।
हैकॉन

82

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

TRACE
यह लक्ष्य चिह्न पैक करता है ताकि कर्नेल उन सभी नियमों को लॉग करेगा जो पैकेट से तालिकाओं, जंजीरों, नियमों के रूप में मेल खाते हैं। (Ipt_LOG या ip6t_LOG मॉड्यूल को लॉगिंग के लिए आवश्यक है।) पैकेट को स्ट्रिंग उपसर्ग के साथ लॉग किया गया है: "TRACE: tablename: chainname: type: 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)

8
धन्यवाद, यह कमाल है! यह वास्तव में सबसे अच्छा उत्तर है, काश मैं इसे स्वीकार कर पाता (यह एक बहुत ही महत्वपूर्ण प्रश्न था, इसलिए स्वीकृत उत्तर निश्चित है)। हालांकि मैं इसे अपने सभी सिस्टम (कर्नेल सीमाओं के कारण) पर उपयोग नहीं कर सकता, कुछ सिस्टम पर मैं कर सकता हूं। यह उत्तर उत्थान योग्य है, क्योंकि यह वास्तव में वही है जो मैं देख रहा था।
क्रिस लेचर

मुझे यह सुविधा कल रात मिली जब मैं iptables मैन पेज को फिर से पढ़ रहा था ताकि मैं एक अलग प्रश्न का उत्तर दे सकूं। लगता है एक अपेक्षाकृत नई सुविधा है। इसे चिन्हित नहीं किए जाने की कोई चिंता नहीं है। शायद यह समय के साथ मुझे एक और लोकलुभावन बैज कमाने के लिए पर्याप्त वोट दिया जाएगा।
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) सिसलॉग द्वारा डिबग करें

इस वेबसाइट से: 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- स्तर" के आधार पर लॉग प्रविष्टियों को पुनर्निर्देशित करने के बारे में बिंदु सहायक हो सकता है, अगर मुझे अंततः वास्तव में वापस गिरना है लॉगिंग (मामले में कोई अन्य समाधान नहीं है)।
क्रिस लेचर

2

एक ही सवाल था और पाया कि Zoredache TRACE / ipt_LOG की ओर इशारा करता है!

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

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

सादर, क्रिस


0

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

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


2
मैं देख सकता हूँ कि लेखक क्या चाहता है, हालांकि; यदि आप एक व्यस्त इंटरफ़ेस पर अपने iptables नियमों का परीक्षण करने की कोशिश कर रहे हैं, तो केवल काउंटरों को देखने से पूरी तरह से मदद नहीं मिल रही है, खासकर अगर पैकेट कई नियमों पर मेल खाता है और प्रक्रिया में उपयोगकर्ता-परिभाषित चेन के आसपास कूदने की संभावना है (जैसा कि विशिष्ट है) अवांछित आईपी पते, और बाढ़ सुरक्षा नियमों को छानना)।
पीपी।

@PP: बिल्कुल, आप मेरा दिमाग पढ़ रहे हैं। @ वी: धन्यवाद, यह कुछ परिस्थितियों में सहायक हो सकता है, और मैंने कभी-कभी इसका उपयोग किया है। अब मुझे और अधिक शक्तिशाली कुछ चाहिए।
क्रिस लेचर

-2

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

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

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


सच नहीं। पैकेट कई नियमों से मेल खा सकते हैं, और वे करते हैं। जब तक एक नियम में एक कार्रवाई (जैसे -j DROPया -j ACCEPT) होती है, यह सिर्फ श्रृंखला के नीचे मिलान जारी रखेगा।
पीपी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.