किसी विशिष्ट फ़ाइल के /etc/syslog.conf
बारे iptables
में लॉग जानकारी को सहेजने के लिए मैं फ़ाइल को कैसे कॉन्फ़िगर कर सकता हूं ।
मैं इन सूचनाओं को अलग से सहेजना चाहता हूं, इसलिए मैं जो चाहता हूं उसे आसानी से और तेजी से निकाल सकता हूं।
किसी विशिष्ट फ़ाइल के /etc/syslog.conf
बारे iptables
में लॉग जानकारी को सहेजने के लिए मैं फ़ाइल को कैसे कॉन्फ़िगर कर सकता हूं ।
मैं इन सूचनाओं को अलग से सहेजना चाहता हूं, इसलिए मैं जो चाहता हूं उसे आसानी से और तेजी से निकाल सकता हूं।
जवाबों:
के लिए मैन पेज पर एक नज़र डालें iptables
। यह एक लक्ष्य को दर्शाता है जिसे कहा जाता LOG
है कि आप क्या चाहते हैं।
LOG
4 के लिए लॉगिंग स्तर सेट करें ।
# DROP everything and Log it
iptables -A INPUT -j LOG --log-level 4
iptables -A INPUT -j DROP
syslog.conf
इन संदेशों को एक अलग फ़ाइल में लिखने के लिए कॉन्फ़िगर करें।
# /etc/syslog.conf
kern.warning /var/log/iptables.log
Syslogd को पुनरारंभ करें।
Debian / Ubuntu
$ sudo /etc/init.d/sysklogd restart
फेडोरा / CentOS / RHEL
$ sudo /etc/init.d/syslog restart
नोट: लॉगिंग की इस विधि को निश्चित प्राथमिकताएँ कहा जाता है। वे या तो संख्याएँ या नाम हैं (1,2,3,4, ..) या (DEBUG, WARN, INFO, आदि)।
यदि संयोग से आप उपयोग कर रहे हैं rsyslog
, तो आप संपत्ति आधारित फ़िल्टर बना सकते हैं जैसे:
# /etc/rsyslog.conf
:msg, contains, "NETFILTER" /var/log/iptables.log
:msg, contains, "NETFILTER" ~
उसके बाद अपने iptables नियमों में थाइलिस स्विच जोड़ें जिसे आप लॉग इन करना चाहते हैं:
–log-prefix NETFILTER
एक विकल्प के रूप में आप इस प्रकार के प्रॉपर्टी फ़िल्टर का उपयोग करके संदेशों को लॉग इन कर सकते हैं:
:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~
नोट: इस 2 विधि को किसी भी परिवर्तन की आवश्यकता नहीं है iptables
।
/var/log/iptables
और बाहर भी घुसपैठ को बचाया जा सकेगा /var/log/messages
। मैं इस डेटा से केवल एक कॉपी चाहता हूंiptables.log
यह मानता है कि आपका फ़ायरवॉल पहले से ही लॉग बनाता है, जैसा कि किसी भी फ़ायरवॉल को होना चाहिए। कुछ उदाहरणों के लिए, इसे पहचान योग्य संदेश की आवश्यकता होती है, जैसे स्लम के उदाहरण में "नेटफिल्टर"।
rsyslog.d में एक फ़ाइल बनाएं
vim /etc/rsyslog.d/10-firewall.conf
यह CentOS 7 में काम करता है। मुझे नहीं पता कि यह कैसे सत्यापित किया जाए कि यह IN और OUT की तलाश के अलावा फ़ायरवॉल से आया है ... CentOS अजीब है। इसका उपयोग न करें जब तक कि अगला संस्करण काम न करे।
# into separate file and stop their further processing
if ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
यह CentOS 7 में काम करता है और संदेश की सामग्री के लिए भी जाँच करता है ("Shorewall को बदलें" जो आपके -j लॉग नियम के संदेश में है)
# into separate file and stop their further processing
if ($msg contains 'Shorewall') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
यह दूसरों (Ubuntu, Debian, openSUSE) में काम करता है। और यह इसे करने का सबसे अच्छा तरीका है। संदेश में तार नहीं खोजना:
# into separate file and stop their further processing
if ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then -/var/log/firewall
& ~
और यहाँ एक डिफॉल्ट ओपनसैस मशीन है (जो मुझे लगता है कि हर डिस्ट्रो में होनी चाहिए और गायब है) (अंतर "& ~" के बजाय केवल "स्टॉप" लगता है; सभी सिस्टम दोनों सिंटैक्स का समर्थन नहीं करते हैं):
if ($syslogfacility-text == 'kern') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
stop
}
और उपरोक्त सभी के लिए, एक logrotate.d फ़ाइल भी न भूलें:
vim /etc/logrotate.d/firewall
युक्त
/var/log/firewall {
rotate 7
size 500k
postrotate
# before using this, run the command yourself to make sure
# it is right... the daemon name may vary
/usr/bin/killall -HUP rsyslogd
endscript
}