[How to] Configures Iptables with INPUT rules (with dynamic NBD)


#1

Bonjour,

voici un peu d’aide pour ceux qui veulent filtrer leurs connexions entrantes.
script iptables permettant de ne pas casser le lien réseau du disque système lorsque l’on bloque par défaut les connexions entrantes:

#!/bin/bash

nbdip=$(curl -s 169.254.42.42/conf | grep VOLUMES_0_EXPORT_URI=nbd:// | sed "s/VOLUMES_0_EXPORT_URI=nbd:\/\///" | awk -F ":" '{ print $1 }' | grep -E -o "10\.1\.([0-2]?[0-9][0-9]?)\.([0-2]?[0-9][0-9]?)")
if [ $? -eq 1 ]; then
        nbdip="10.1.18.0/23"
fi

iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -s $nbdip -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
#--- règles perso ici ----
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
#-------------------------------

iptables -P INPUT DROP

ps: ne pas tenir compte du reste des posts plus bas (cétait avant que fasse le tuto).


#2

Bonjour Xavier,

Votre rootfs est sur un disque réseau, si vous empêchez le réseau de passer, c’est le genre de choses qui arrivent. Il faut que vous laissiez le processus nbd-client communiquer avec son serveur.


#3

merci pour ta réponse, je comprend mieux :slight_smile:

voici mes règles fonctionnelles:

#!/bin/bash
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -s 10.1.19.53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

de cette façon, le lien du disque san pour le rootfs n’est pas cassé et l’OS reste opérationnel


#4

Attention, si vous redémarrez votre instance, votre serveur NBD aura une autre IP.

Vous pouvez récupérer l’IP du serveur NBD dynamiquement en faisant une requête sur l’API metadata depuis votre serveur :

curl -s 169.254.42.42/conf | sed -n ‘s#^VOLUMES_0_EXPORT_URI=nbd://(.):.$#\1#p’


#5

merci pour ton aide.
j’intègre ça dans mon script


#6

je viens d’essayer, je n’arrive pas à récupérer ce que contien 169.254.42.42/conf
que ce soit avec curl ou (wget ?)

est-ce bien le bon chemin ?


#7

Oui, est-ce que vous tentez bien depuis votre instance ?

# curl 169.254.42.42
{
  "api": "api-metadata",
  "description": "Metadata API, just query http://169.254.42.42/conf or http://169.254.42.42/conf?format=json to get info about yourself"
}

# curl 169.254.42.42/conf
NAME=labs-e91f00
<snip>
VOLUMES_0_EXPORT_URI=nbd://10.1.5.9:4640
<snip>

Il est à noter que vous pouvez potentiellement recevoir une HTTP/429 si vous êtes rate limité. Dans ce cas, il faudra effectuer de nouveau la requête quelques secondes plus tard.

# curl 169.254.42.42/conf  -i
HTTP/1.1 429
Server: nginx
Date: Thu, 16 Oct 2014 10:40:34 GMT
Content-Length: 0
Connection: keep-alive

#8

ok c’est bon cette fois :slight_smile:

c’était mon iptables trop restrictif :stuck_out_tongue:

merci


#9

Afin d’aider d’autres utilisateurs qui pourraient rencontrer le même problème, je vous suggère d’éditer les infos du topic de base :smile:


#10

euh c’est à dire ?
j’édite mon 1er post ?


#11

You can use the builtin script oc-metadata

root@c1-10-1-22-202:~# /usr/local/bin/oc-metadata | grep VOLUMES_0_EXPORT_URI
VOLUMES_0_EXPORT_URI=nbd://10.1.14.221:4576

#12

Hello,
How can i run this script?


#13

hello,

connect by ssh on your VM
open editor as nano or vi
copy paste text code of my first message
save the file
tape command: chmod +x my_script_file
run the script with: ./my_script_file


#14

Hello@xavier should i put my nbd ip’sin there or just paste the script?

I am actually facing a problem with the install of pbx.The script has iptables and firewall which break the connection with the nbd.May be you can try and have a solution for that?
I have posted this also in their forum:


#15

if install of pbx contain script with iptables and firewall, then you must edit this pbx’s script for delete lines who are in conflict with nbd connection.
it must to keep the connection with the nbd’s ip, otherwise if connection is broken/dropped by a iptable’s rule, then OS freeze :frowning:


#16

I followed this command
cd /root
wget http://incrediblepbx.com/incrediblepbx11.4.ubuntu14.tar.gz
tar zxvf incrediblepbx*
#./create-swapfile-DO
./Incredible*

is stated on ( http://nerdvittles.com/?p=9713)
i dont how to edit that script.If you have time could you please look to it.
Would be very nice to have the pbx installed on the onlinenet cloud

there is also installer script you can download from sourceforge
( http://sourceforge.net/projects/pbxinaflash/files/IncrediblePBX12-Ubuntu14.04/incrediblepbx12.tar.gz/download)


#17

in incrediblepbx11.4.ubuntu14.tar.gz, edit script IncrediblePBX12.sh
comment line 305 for disabled (sed -i ‘s|INPUT ACCEPT|INPUT DROP|’ /etc/iptables/rules.v6)
line 325, you must download and modify script rules.v4.ubuntu14 in iptables4-ubuntu14.tar.gz
comment line 19 for disabled (:INPUT DROP [0:0])
add file rules.v4.ubuntu14 in incrediblepbx11.4.ubuntu14.tar.gz, and delete line 325,326,327 in IncrediblePBX12.sh

scripts doesn’t have command with iptable INPUT DROP


#18

Hello
J’ai édité un script firewall avec NBD dynamic et l’ai exécuté et la config est bien établie.
Par contre j’ai une réponse après exécution du type
host/network `xx.x.xx.x:xxxx’ not found ou l’IP celle du est le port nbd
Est ce normal ?


#19

Shouldn’t VOLUMES 1 EXPORT _URI in the script posted at the top of the page actually be VOLUMES 0 EXPORT _URI ?

Assuming of course you only have 1 root volume.


#20

Indeed, I fixed the topic!

Also, you can iterate over all your NBD volumes and create accept rules with:

for ip in $(curl -s 169.254.42.42/conf | sed -nE 's/VOLUMES_[0-9]+_EXPORT_URI=.*nbd:\/\/([^:]+):.*/\1/p');
do
    iptables -A INPUT -i eth0 -s $ip -j ACCEPT
done

UFW Ubuntu 16.04
UFW Ubuntu 16.04