iptables logging: Como diferenciar entre o tráfego de saída originado no host, do tráfego em túnel SSH?

0

Suponha que eu tenha o iptables configurado para bloquear acessos de entrada, exceto 22 e um pequeno número de outras portas. Suponha também que eu desejo que o iptables "ponha" em todos os softwares mal-intencionados que ligam para casa, com uma regra como:

iptables -A OUTPUT -p all -s $THIS_SERVER -m conntrack --state NEW -j LOG --log-prefix "OUTBOUND "

Tudo isso é bom, mas se eu também tenho tráfego tunelado SSH, como eu usaria o iptables para tratar esse tráfego de forma diferente? Aqui está o meu exemplo específico. Digamos que o encaminhamento seja permitido pelo sshd para que um cliente possa fazer algo como:

ssh -D127.0.0.1:12345 uid@myserver -N

Eles então têm um proxy SOCKS no final e podem fazer solicitações de saída através de $THIS_SERVER . Este é um comportamento que eu quero permitir, mas eu gostaria de registrá-lo como tráfego diferente do que o anterior, originado no próprio servidor (ou talvez, não registrar este tráfego encaminhado em tudo).

Você acha que isso pode ser feito e, em caso afirmativo, explique. O que tentei fazer foi capturar a segunda categoria pela cadeia FORWARD, mas isso não funcionou. Ambas as categorias de tráfego parecem ser selecionadas pelos mesmos critérios, por isso não consigo distingui-las. Existe uma maneira de associar esses pacotes com túnel SSH?

Para evitar dúvidas, aqui estão as entradas de log associadas à configuração de um proxy SOCKS através do meu servidor e, em seguida, a abertura do Firefox. O UID=980 é o usuário do resolvedor do Linux e UID=1000 é o usuário remoto que estabeleceu o túnel via ssh.

[15719.755667] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=62202 DF PROTO=UDP SPT=35744 DPT=53 LEN=53 UID=980 GID=980 
[15719.755771] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=62203 DF PROTO=UDP SPT=32777 DPT=53 LEN=53 UID=980 GID=980 
[15720.046668] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=95 TOS=0x00 PREC=0x00 TTL=64 ID=62256 DF PROTO=UDP SPT=33118 DPT=53 LEN=75 UID=980 GID=980 
[15720.047446] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=34.210.48.174 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=520 DF PROTO=TCP SPT=34758 DPT=443 WINDOW=29200 RES=0x00 SYN URGP=0 UID=1000 GID=1000 
[15720.049736] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=34.210.48.174 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=1938 DF PROTO=TCP SPT=34760 DPT=443 WINDOW=29200 RES=0x00 SYN URGP=0 UID=1000 GID=1000 
[15720.614489] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=74 TOS=0x00 PREC=0x00 TTL=64 ID=62296 DF PROTO=UDP SPT=43834 DPT=53 LEN=54 UID=980 GID=980 
[15720.614573] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=74 TOS=0x00 PREC=0x00 TTL=64 ID=62297 DF PROTO=UDP SPT=55510 DPT=53 LEN=54 UID=980 GID=980 
[15720.615559] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=75 TOS=0x00 PREC=0x00 TTL=64 ID=62298 DF PROTO=UDP SPT=40906 DPT=53 LEN=55 UID=980 GID=980  
[15728.039642] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=72 TOS=0x00 PREC=0x00 TTL=64 ID=63174 DF PROTO=UDP SPT=39308 DPT=53 LEN=52 UID=980 GID=980 
[15728.039723] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=72 TOS=0x00 PREC=0x00 TTL=64 ID=63175 DF PROTO=UDP SPT=53907 DPT=53 LEN=52 UID=980 GID=980 
[15729.529947] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=81 TOS=0x00 PREC=0x00 TTL=64 ID=63315 DF PROTO=UDP SPT=45694 DPT=53 LEN=61 UID=980 GID=980 
[15729.530068] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=81 TOS=0x00 PREC=0x00 TTL=64 ID=63316 DF PROTO=UDP SPT=52263 DPT=53 LEN=61 UID=980 GID=980 
[15729.896039] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=63355 DF PROTO=UDP SPT=40457 DPT=53 LEN=50 UID=980 GID=980 
[15729.896132] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=63356 DF PROTO=UDP SPT=38307 DPT=53 LEN=50 UID=980 GID=980 
[15730.189743] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=82 TOS=0x00 PREC=0x00 TTL=64 ID=63442 DF PROTO=UDP SPT=40521 DPT=53 LEN=62 UID=980 GID=980 
[15730.189870] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=82 TOS=0x00 PREC=0x00 TTL=64 ID=63443 DF PROTO=UDP SPT=34444 DPT=53 LEN=62 UID=980 GID=980 
[15730.190707] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=81 TOS=0x00 PREC=0x00 TTL=64 ID=63444 DF PROTO=UDP SPT=55549 DPT=53 LEN=61 UID=980 GID=980 
[15730.192361] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=52.43.38.51 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=22080 DF PROTO=TCP SPT=60876 DPT=443 WINDOW=29200 RES=0x00 SYN URGP=0 UID=1000 GID=1000 
[15730.641766] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=81 TOS=0x00 PREC=0x00 TTL=64 ID=63507 DF PROTO=UDP SPT=54359 DPT=53 LEN=61 UID=980 GID=980 
[15730.641890] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=81 TOS=0x00 PREC=0x00 TTL=64 ID=63508 DF PROTO=UDP SPT=52250 DPT=53 LEN=61 UID=980 GID=980 
[15749.499230] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=87 TOS=0x00 PREC=0x00 TTL=64 ID=198 DF PROTO=UDP SPT=57205 DPT=53 LEN=67 UID=980 GID=980 
[15749.499394] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=87 TOS=0x00 PREC=0x00 TTL=64 ID=199 DF PROTO=UDP SPT=45791 DPT=53 LEN=67 UID=980 GID=980 
[15749.500301] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=116 TOS=0x00 PREC=0x00 TTL=64 ID=200 DF PROTO=UDP SPT=37022 DPT=53 LEN=96 UID=980 GID=980 
[15749.500917] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=54.68.157.14 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=64708 DF PROTO=TCP SPT=43082 DPT=443 WINDOW=29200 RES=0x00 SYN URGP=0 UID=1000 GID=1000 
[15752.028535] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=81 TOS=0x00 PREC=0x00 TTL=64 ID=585 DF PROTO=UDP SPT=59245 DPT=53 LEN=61 UID=980 GID=980 
[15752.028624] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=81 TOS=0x00 PREC=0x00 TTL=64 ID=586 DF PROTO=UDP SPT=55551 DPT=53 LEN=61 UID=980 GID=980 
[15752.029484] OUTPUT:LOG,ACCEPT IN= OUT=eth0 SRC=$THIS_SERVER DST=$NAMESERVER LEN=75 TOS=0x00 PREC=0x00 TTL=64 ID=587 DF PROTO=UDP SPT=34032 DPT=53 LEN=55 UID=980 GID=980
    
por Douglas Held 25.03.2018 / 20:08

2 respostas

0

Os túneis SSH provavelmente têm porta de destino 22, portanto, basta fazer sua regra ignorar essa porta:

iptables -A OUTPUT -p tcp --dport 22 -s $THIS_SERVER -m conntrack --state NEW -j ACCEPT
iptables -A OUTPUT -p all -s $THIS_SERVER -m conntrack --state NEW -j LOG --log-prefix "OUTBOUND "
    
por 25.03.2018 / 20:59
0

Uma forma de obter o resultado seria executar sshd em um namespace de rede separado e, em seguida, fornecer tunelamento DNAT para as conexões ssh de entrada e NAT para o tráfego de saída desse namespace. Nessa configuração, você terá o tráfego sshd em uma interface separada (virtual).

    
por 26.03.2018 / 06:38

Tags