Debug di regole Iptables
Ogni pacchetto dal kernel 2.6.23 in poi, attraversa la tabella raw, che ha un target particolare TRACE
Ipotizziamo di coler loggare tutti i pacchetti provenienti dall'host 1.2.3.4 destinati alla porta 8000
- Caricare i moduli per il logging di iptables:
sudomodproble ipt_LOG
- Definire che pacchetti si vogliono loggare, inserendoli in entrambe le chain OUTPUT e PREROUTING
sudo iptables -t raw -A PREROUTING -p tcp --dport 8000 -s 1.2.3.4 -j TRACE sudo iptables -t raw -A OUTPUT -p tcp --dport 8000 -s 1.2.3.4 -j TRACE
- Ora in syslog si vedrà un output del tipo (formattato...) che indica che il pacchetto è loggato:
TRACE: raw:PREROUTING:policy:2 IN=eth1 OUT= MAC=00:06:7b:03:7f:89:84:c9:b2:82:18:1a:08:00 SRC=1.2.3.4 DST=5.6.7.8 LEN=52 TOS=0x10 PREC=0x00 TTL=55 ID=50604 DF PROTO=TCP SPT=34953 DPT=8000 SEQ=1670740955 ACK=1467539518 WINDOW=229 RES=0x00 ACK URGP=0 OPT (0101080A0084E5D9017E96F9)
- Qui dice che transita dalla chain FORWARD passando dalla regola 8:
TRACE: filter:FORWARD:rule:8 IN=eth1 OUT=eth0 SRC=1.2.3.4 DST=7.8.9.10 LEN=52 TOS=0x10 PREC=0x00 TTL=54 ID=50604 DF PROTO=TCP SPT=34953 DPT=8000 SEQ=1670740955 ACK=1467539518 WINDOW=229 RES=0x00 ACK URGP=0 OPT (0101080A0084E5D9017E96F9)
- Nel caso non ci sia la rule: ma policy: significa che il pacchetto è stato matchato da una POLICY della chain.
- Per vedere la rule interessata:
sudo iptables -t tablename -v -L CHAINNAME RULENUMBER
- Ad esempio per vedere la regola 3 della tabella nat nella chain PREROUTING
sudo iptables -t nat -v -L PREROUTING 3
- IMPORTANTE: Al termine, eliminare le regole di tracing impostate, sostituendo al -A il -D, altrimenti ALTRIMENTI IL SYSLOG SI RIEMPIRÀ
sudo iptables -t raw -D PREROUTING -p tcp --dport 8000 -s 1.2.3.4 -j TRACE sudo iptables -t raw -D OUTPUT -p tcp --dport 8000 -s 1.2.3.4 -j TRACE