it-swarm.com.de

iptables LOG und DROP in einer Regel

Ich versuche ausgehende Verbindungen mit iptables zu protokollieren. Ich möchte, dass die Verbindung getrennt und akzeptiert wird, während sie ebenfalls protokolliert wird. Ich habe festgestellt, dass die Option -j DROP/REJECT/ACCEPT/LOG verwendet. Aber ich möchte so etwas wie DROP und LOG oder ACCEPT und LOG machen. Gibt es einen Weg, dies zu erreichen?

24
Abhay PS

Beispiel:

iptables -A INPUT -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -j DROP

Log Exampe:

Feb 19 14:18:06 servername kernel: INPUT:DROP:IN=eth1 OUT= MAC=aa:bb:cc:dd:ee:ff:11:22:33:44:55:66:77:88 SRC=x.x.x.x DST=x.x.x.x LEN=48 TOS=0x00 PREC=0x00 TTL=117 ID=x PROTO=TCP SPT=x DPT=x WINDOW=x RES=0x00 SYN URGP=0

Andere Optionen:

   LOG
       Turn on kernel logging of matching packets.  When this option 
       is set for a rule, the Linux kernel will print some 
       information  on  all  matching  packets
       (like most IP header fields) via the kernel log (where it can 
       be read with dmesg or syslogd(8)).  This is a "non-terminating 
       target", i.e. rule traversal
       continues at the next rule.  So if you want to LOG the packets 
       you refuse, use two separate rules with the same matching 
       criteria, first using target LOG
       then DROP (or REJECT).

       --log-level level
              Level of logging (numeric or see syslog.conf(5)).

       --log-prefix prefix
              Prefix log messages with the specified prefix; up to 29 
              letters long, and useful for distinguishing messages in 
              the logs.

       --log-tcp-sequence
              Log TCP sequence numbers. This is a security risk if the 
              log is readable by users.

       --log-tcp-options
              Log options from the TCP packet header.

       --log-ip-options
              Log options from the IP packet header.

       --log-uid
              Log the userid of the process which generated the packet.
19
pOchi

Obwohl ich bereits über ein Jahr alt bin, bin ich bei einer anderen Google-Suche ein paarmal auf diese Frage gestoßen und glaube, dass ich die vorherige Antwort zum Wohle anderer verbessern kann.

Kurz gesagt, Sie können nicht beide Aktionen in einer Zeile kombinieren, aber Sie können eine Kette erstellen, die das tut, was Sie wollen, und sie dann in einer Zeile aufrufen.

Erstellen wir eine Kette zum Protokollieren und Akzeptieren von:

iptables -N LOG_ACCEPT

Und lassen Sie uns seine Regeln auffüllen:

iptables -A LOG_ACCEPT -j LOG --log-prefix "INPUT:ACCEPT:" --log-level 6
iptables -A LOG_ACCEPT -j ACCEPT

Jetzt erstellen wir eine Kette zum Protokollieren und Löschen:

iptables -N LOG_DROP

Und lassen Sie uns seine Regeln auffüllen:

iptables -A LOG_DROP -j LOG --log-prefix "INPUT:DROP: " --log-level 6
iptables -A LOG_DROP -j DROP

Jetzt können Sie alle Aktionen auf einmal ausführen, indem Sie anstelle der Standardeinstellung LOG/ACCEPT/REJECT/DROP zu Ihren benutzerdefinierten Ketten springen (-j):

iptables -A <your_chain_here> <your_conditions_here> -j LOG_ACCEPT
iptables -A <your_chain_here> <your_conditions_here> -j LOG_DROP
53
Prevok

nflog ist besser

Sudo apt-get -y install ulogd2

Beispiel für eine ICMP-Blockierungsregel:

iptables=/sbin/iptables
# Drop ICMP (PING)
$iptables -t mangle -A PREROUTING -p icmp -j NFLOG --nflog-prefix 'ICMP Block'
$iptables -t mangle -A PREROUTING -p icmp -j DROP

Und Sie können Präfix "ICMP Block" im Protokoll suchen:

/var/log/ulog/syslogemu.log
2
user4839775

Bei der Arbeit musste ich SSLv3-Verbindungen an den Ports 993 (IMAPS) und 995 (POP3S) mithilfe von iptables protokollieren und blockieren. Also habe ich Gert van Dijks Wie entferne ich SSLv3 in Ihrem Netzwerk mithilfe der iptables-Firewall? (POODLE) mit Prevoks Antwort kombiniert und Folgendes gefunden:

iptables -N SSLv3
iptables -A SSLv3 -j LOG --log-prefix "SSLv3 Client Hello detected: "
iptables -A SSLv3 -j DROP
iptables -A INPUT \
  -p tcp \! -f -m multiport --dports 993,995 \
  -m state --state ESTABLISHED -m u32 --u32 \
  "0>>22&[email protected] 12>>26&[email protected] 0 & 0xFFFFFF00=0x16030000 && \
   0>>22&[email protected] 12>>26&[email protected] 2 & 0xFF=0x01 && \
   0>>22&[email protected] 12>>26&[email protected] 7 & 0xFFFF=0x0300" \
  -j SSLv3

Erläuterung

  1. Um LOG und DROP zu erstellen, erstellen Sie eine benutzerdefinierte Kette (z. B. SSLv3):

    iptables -N SSLv3
    iptables -A SSLv3 -j LOG --log-prefix "SSLv3 Client Hello detected: "
    iptables -A SSLv3 -j DROP
    
  2. Leiten Sie dann, was Sie möchten, LOG und DROP zu dieser Kette um (siehe -j SSLv3):

    iptables -A INPUT \
      -p tcp \! -f -m multiport --dports 993,995 \
      -m state --state ESTABLISHED -m u32 --u32 \
      "0>>22&[email protected] 12>>26&[email protected] 0 & 0xFFFFFF00=0x16030000 && \
       0>>22&[email protected] 12>>26&[email protected] 2 & 0xFF=0x01 && \
       0>>22&[email protected] 12>>26&[email protected] 7 & 0xFFFF=0x0300" \
      -j SSLv3
    

Hinweis: Beachten Sie die Reihenfolge der Regeln. Diese Regeln haben für mich erst funktioniert, als ich sie über die Regeln in meinem Firewall-Skript gestellt habe:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT