A syslog-ng és én

Fórumok

Helló!

Egy olyan problémával fordulok azokhoz, akik tudnak segíteni, amit már elég sokan felvetettek, de a google-zés és egyéb man-ok olvasgatása során sem tudtam megvalósítani azt, ami másoknak sikerült.

Az iptables és syslog-ng a probléma!
Nem loggol semmit, ha loggal akkor mindenhova berakja magát!
Van egy ilyen túzfal szabályom:
....
iptables -A INPUT -p tcp -m tcp --dport 33 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 33 -j LOG --log-level debug --log-prefix "iptables:"
#
....

és egy ilyen syslog-ng.conf-om:
....
source src {
# message generated by Syslog-NG
internal();
# standard Linux log source (this is the default place for the syslog()
# function to send logs to)
unix-stream("/dev/log");
# messages from the kernel
pipe("/proc/kmsg"); };
# use the following line if you want to receive remote UDP logging messages
# (this is equivalent to the "-r" syslogd flag)
# udp();

#source src { unix-stream("/dev/log"); internal(); };
destination iptables { file("/var/log/iptables"); };
filter iptables { facility(kern) and match("iptables: "); };
log { source(src); filter(iptables); destination(iptables); flags(final); };

.....

A fent bemutatott config részletek már olyan végletet képviselnek amik semmit nem loggolnak...
A syslog-ng fut, létezik a /var/log/iptables file:
0 -rw-r----- 1 root adm 0 2007-06-10 15:29 iptables

jogokkal.

Nem tudom mit rontok el vagy mi nem megy, mert ezek alapján működni kéne, az, hogy ha konnekt jön a portra, akkor azt ő logolja és elmentse az iptables fileba és csak oda.
Az iptables szabály már felcserélésre is került, mivel azt hittem hogy azért nincs log mert nincs is mit logolni, de semmi nem változott.

Ha bárkinek van működő configja a fentiek megvalósításához, nagyon boldoggá tenne, ha azt megosztaná velem.

Nagyon szépen köszönöm!

Hozzászólások

nezd meg a dmesg | grep iptables -t, hogy ott megvan-e a log.

iptables -A INPUT -m tcp -p tcp --dport 33 -j LOG --log-level debug --log-prefix "iptables:"
es a
match("iptables: ");
nem jon ossze, mert ha jol tudom iptables nem rak be szokozt a prefix es a log koze szoval igy a log kb igy kezdodne: "iptables:IN.....".
De holnap reggel majd bemasolom az en mukodo configomat ide, ha nem ez lene a hiba.

egy apró módosítást próbálj ki: match(^iptables)
tehát idézőjelek nélkül (bár ez elvileg mindegy) és kalappal az elején (regexp).

az én működő konfigom (bár ebben nincs regexp):

példa iptables sor:
TITLE="FireWall"
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-level warn --log-prefix "$TITLE : hidded portscan "

syslog-ng részlet:
destination firewall { file("/var/log/iptables.log"); };
filter f_iptables { match(FireWall); };
log { source(src); filter(f_iptables); destination(firewall); };

#ha nem szeretnéd a messages fájlt teleszórni a tűzfalloggal, akkor pl.
filter f_messages { level(info .. warn)
and not facility(auth, authpriv, cron, daemon, mail, news) and not match(FireWall); };

LOG 0 -- anywhere anywhere LOG level debug tcp-sequence tcp-options ip-options uid prefix `iptables '

ez az utolso bejegyzes az iptables -L -ben.
a syslog-ng.conf ide vonatkozo reszei:
source s_all {
# message generated by Syslog-NG
internal();
# standard Linux log source (this is the default place for the syslog()
# function to send logs to)
unix-stream("/dev/log");
# messages from the kernel
file("/proc/kmsg" log_prefix("kernel: "));
# use the following line if you want to receive remote UDP logging messages
# (this is equivalent to the "-r" syslogd flag)
# udp();
};
destination df_iptables { file("/var/log/iptables"); };
filter f_iptables { match("^.*iptables.*$") and level(debug);};
log {
source(s_all);
filter(f_iptables);
destination(df_iptables);
};

valoban ha a feltelet megcserelnem akkor hatekonyabb lenne. viszont a match(".*iptables.*") vs match("^kernel: iptables") -bol nem vagyok biztos hogy az utobbi jon ki gyoztesen. bar nem ismerem az algoritmust ami mogotte van. de ha mar ennyire belemegyunk akkor a match(".*iptables.*") vs match("iptables") melyik a gyorsabb?

A '.*iptables.*' eseteben az egesz log uzenetre meg kell probalni illeszteni, mig '^kernel: iptables' eseteben csak az elejere, igy SZVSZ a kerdes el is dolt az utobbi javara. '.*iptables.*' es 'iptables' gyakorlatilag ugyanaz, egyik sem eppen hatekony. Epp nincs kedvem a glibc regexec() fuggvenyenek a forrasat atnezni a precizebb valasz erdekeben :)

Erdekelne, honnan szarmazik a pipe("/proc/kmsg");, merthogy erosen bad practice. file("/proc/kmsg" log_prefix("kernel: ")); a javasolt.

Hello!

Köszönöm a gyors reakciókat, elvielg működik a loggolás...
Csak van egy furcsaság, hogy ha sokszor restartolom a syslog-ng processt akkor egy idő után már vhogy elfelejt loggolni.
Pedig fut a process, próbáltam már parancsorból futtatni, illetve init.d-ből.
De majd rájövök az a lényeg, hogy működik csak nálam van még valami gebasz.