linux - reiniciar - iptables permitir todo a una ip
iptables LOG y DROP en una regla (5)
Estoy intentando registrar conexiones salientes con iptables. Lo que quiero es, abandonar y aceptar la conexión mientras se registran también. He encontrado que la opción -j toma DROP / REJECT / ACCEPT / LOG. Pero quiero hacer algo como DROP y LOG o ACEPTAR y REGISTRAR. Hay una manera de lograr esto ?
Aunque ya tenía más de un año, tropecé con esta pregunta un par de veces en otra búsqueda de Google y creo que puedo mejorar la respuesta anterior para beneficio de los demás.
La respuesta corta es que no puede combinar ambas acciones en una línea, pero puede crear una cadena que haga lo que quiera y luego llamarla en una sola línea.
Vamos a crear una cadena para registrar y aceptar:
iptables -N LOG_ACCEPT
Y vamos a poblar sus reglas:
iptables -A LOG_ACCEPT -j LOG --log-prefix "INPUT:ACCEPT:" --log-level 6
iptables -A LOG_ACCEPT -j ACCEPT
Ahora vamos a crear una cadena para registrar y soltar:
iptables -N LOG_DROP
Y vamos a poblar sus reglas:
iptables -A LOG_DROP -j LOG --log-prefix "INPUT:DROP: " --log-level 6
iptables -A LOG_DROP -j DROP
Ahora puede hacer todas las acciones de una sola vez saltando (-j) a sus cadenas personalizadas en lugar del LOG / ACCEPT / REJECT / DROP predeterminado:
iptables -A <your_chain_here> <your_conditions_here> -j LOG_ACCEPT
iptables -A <your_chain_here> <your_conditions_here> -j LOG_DROP
Ejemplo:
iptables -A INPUT -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -j DROP
Registro de ejemplo:
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
Otras opciones:
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.
En el trabajo, necesitaba registrar y bloquear las conexiones SSLv3 en los puertos 993 (IMAPS) y 995 (POP3S) usando iptables. Entonces, combiné ¿Cómo eliminar SSLv3 de Gert van Dijk en su red utilizando el firewall de iptables? (POODLE) con la answer de Prevok y se le ocurrió esto:
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&0x3C@ 12>>26&0x3C@ 0 & 0xFFFFFF00=0x16030000 && /
0>>22&0x3C@ 12>>26&0x3C@ 2 & 0xFF=0x01 && /
0>>22&0x3C@ 12>>26&0x3C@ 7 & 0xFFFF=0x0300" /
-j SSLv3
Explicación
Para
LOG
yDROP
, cree una cadena personalizada (por ejemplo,SSLv3
):iptables -N SSLv3 iptables -A SSLv3 -j LOG --log-prefix "SSLv3 Client Hello detected: " iptables -A SSLv3 -j DROP
Luego, redireccione lo que quiere
LOG
yDROP
a esa cadena (consulte-j SSLv3
):iptables -A INPUT / -p tcp /! -f -m multiport --dports 993,995 / -m state --state ESTABLISHED -m u32 --u32 / "0>>22&0x3C@ 12>>26&0x3C@ 0 & 0xFFFFFF00=0x16030000 && / 0>>22&0x3C@ 12>>26&0x3C@ 2 & 0xFF=0x01 && / 0>>22&0x3C@ 12>>26&0x3C@ 7 & 0xFFFF=0x0300" / -j SSLv3
Nota: ten en cuenta el orden de las reglas. Esas reglas no me funcionaron hasta que las coloqué por encima de esta que tenía en mi script de firewall:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
nflog es mejor
sudo apt-get -y install ulogd2
Ejemplo de regla de bloque ICMP:
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
Y puede buscar el prefijo "Bloque ICMP" en el registro:
/var/log/ulog/syslogemu.log
para China GFW:
sudo iptables -I INPUT -s 173.194.0.0/16 -p tcp --tcp-flags RST RST -j DROP
sudo iptables -I INPUT -s 173.194.0.0/16 -p tcp --tcp-flags RST RST -j LOG --log-prefix "drop rst"
sudo iptables -I INPUT -s 64.233.0.0/16 -p tcp --tcp-flags RST RST -j DROP
sudo iptables -I INPUT -s 64.233.0.0/16 -p tcp --tcp-flags RST RST -j LOG --log-prefix "drop rst"
sudo iptables -I INPUT -s 74.125.0.0/16 -p tcp --tcp-flags RST RST -j DROP
sudo iptables -I INPUT -s 74.125.0.0/16 -p tcp --tcp-flags RST RST -j LOG --log-prefix "drop rst"