Firewall
TOC:

Intro

Attention il n'y a pas1firewall mais des versions de firewall qui depende de vautre distribution et de sa versions
Et bien sur sa varie parfois sortement

Nmap

Outils permetant de savoir ce qu'il y'a sur le port et si le port est ouvert

filtered: filtré par firewall
closed: ouvert mais rien qui ecoute
open: ouvert un truc qui ecoute

exemple 1 comme c'est le port stdr mysql nmap presume que c'est mysql neamoin le port est filtré
nmap -sV -p 3306 xxxx
Starting Nmap 6.45 ( http://nmap.org ) at 2014-11-17 08:19 CET
Nmap scan report for xxx (xxx.xxxx.xxx.xxx)
Host is up (0.00034s latency).
rDNS record for xxx.xxx.xxx.xxx: xxx.xxx.fr
PORT STATE SERVICE VERSION
3306/tcp filtered mysql

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds

Exemple de reponsse sur une recherche de service sur le port 3306
-sv: essayer de trouver qu'elle service est sur le port
sudo nmap -p 38770 -sV xxxx
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2014-11-14 09:35 CET
Interesting ports on xxx.xxx.fr (xxx.xxx.xxx.xxx
PORT STATE SERVICE VERSION
3306/tcp open mysql MySQL 5.0.95-log

Nmap finished: 1 IP address (1 host up) scanned in 0.039 seconds


nmap -p 389 -sV xxxx.xxx.fr
Starting Nmap 6.00 ( http://nmap.org ) at 2014-11-14 12:31 CET
Nmap scan report for xxxx.xxx.fr (195.221.228.24)
Host is up (0.00026s latency).
rDNS record for 195.221.228.24: web-ensimag.imag.fr
PORT STATE SERVICE VERSION
389/tcp open ldap (Anonymous bind OK)

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.20 seconds

-sU scan udp
sudo nmap -sU -p 161 --script=snmp-interfaces ensimv2

Firewald (redhate7)

Redhate 7

Zone

Les zones sons des dossiers de rangement, on créer des regles pour une zone puis on aplique la zone a une interface.
Exception faite des zone dopr,block trusted qui on des significtion reel

ZONE           IN                 OUT
drop      drop incom            out only filter
block     reject incom          out only filter
public    select incom only     out ok
external  select incom only     out ok
dmz       select incom only     out ok   
work      select incom only     out ok
home      select incom only     out ok
trusted   all incom             all out                        

Systemctl

systemctl status firewalld
systemctl stop  firewalld
systemctl start  firewalld
systemctl enable  firewalld
systemctl diseable  firewalld

cmd

Status du firewall
firewall-cmd --state
-> running
zone active (ici la zone public est apliqué a eth0)
firewall-cmd --get-active-zones
-> public
interfaces: eth0
lister les regles
firewall-cmd --list-all
firewall-cmd --direct --get-all-rules
--direct ou il y'a les regles de type iptables et le nat
Detailles des services actif (ssh sur eth0)
firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
Tous les services actif en vrac (enlevé permanent pour en cours)
firewall-cmd --get-service --permanent
Associe l'eth1 à la zone public
firewall-cmd --zone=public --add-interface=eth1
changer la zone active par default
firewall-cmd --set-default-zone=public
Ajouter/remove un port a une zone (en ecrivant le fichier en dur et le rechargeant en ram)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --remove-port=515/udp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
Pour ajouter une ip (on configure en ram, on save, puis on reload)
firewall-cmd --add-source=129.88.45.59
firewall-cmd --remove-source=129.88.45.59
firewall-cmd --reload
firewall-cmd --runtime-to-permanent
firewall-cmd --zone=public --list-sources
La meme chose mais par service
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --remove-service=ftp
firewall-cmd --info-service=ssh
firewall-cmd --list-services
Reload firewall pour prendre en compte la conf permanent (pour la charger du fichier en ram)
firewall-cmd --reload

Rich format

On peut aussi utiliser un format riche qui mpermet de faire des regles comme iptables
Mais uniquement sur le trfique entrant INPUT

Exemple sur fedora corre 20 pour authoriser le snmp par deux ip
firewall-cmd --get-active-zones
FedoraWorkstation
interfaces: em1 virbr0 virbr0-nic
La zone ce nome FedoraWorkstation

Lister les regles
firewall-cmd --list-all
firewall-cmd --direct --get-all-rules
direct ou il y'a les regles de type iptables et le nat

Regle basic
firewall-cmd --zone=FedoraWorkstation --add-port=161/udp --permanent
firewall-cmd --zone=FedoraWorkstation --remove-port=161/udp --permanent
firewall-cmd --reload


Regle rich exemple1 udp
firewall-cmd --add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.78" port port="161" protocol="udp" accept' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.59" port port="161" protocol="udp" accept' --permanent
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
result
firewall-cmd --list-all
FedoraWorkstation (default, active)
interfaces: em1 virbr0 virbr0-nic
sources:
services: dhcpv6-client samba-client ssh
ports: 1025-65535/udp 1025-65535/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="xxx.xxx.xxxx.59" port port="161" protocol="udp" accept
rule family="ipv4" source address="xxx.xxx.xxxx.78" port port="161" protocol="udp" accept


Regle rich exemple2 mysql
firewall-cmd --add-rich-rule='rule family="ipv4" source address="195.221.228.58" port port="3306" protocol="tcp" accept' --permanent
firewall-cmd --remove-rich-rule='rule family="ipv4" source address="195.221.228.58" port port="3306" protocol="udp" accept' --permanent
firewall-cmd --reload
firewall-cmd --list-all

Direct

Semble ne pas avoir de notion de permanent passe actif et permanent a la fois

Loguer le trafique sortant
firewall-cmd --direct --add-rules ipv4 filter OUTPUT 0 -m comment --comment "Trafique sortant" -j LOG --log-prefix "firewall-out"
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --direct --get-all-rules
exploiter
cat messages |grep "firewall-out" | cut -d" " -f 9 |sort |uniq -c | sort -g
cat messages |grep "firewall-out" | cut -d" " -f 9 | sort | uniq -c | sort -g | cut -d"=" -f 2 | xargs -n 1 host
Effacer toute les regles sortante (filtre et nat)
firewall-cmd --direct --get-all-rules
firewall-cmd --direct --remove-rules ipv4 filter OUTPUT
firewall-cmd --direct --remove-rules ipv4 filter INPUT
firewall-cmd --direct --remove-rules ipv4 nat OUTPUT
firewall-cmd --direct --remove-rules ipv4 nat INPUT
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --direct --get-all-rules
Protection contre le brut force
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp -m tcp --dport 22 -m recent --update --seconds 180 --hitcount 3 --rttl --name SSH --rsource -m comment --comment "SSH Brute-force protection" -j LOG --log-prefix "SSH_brute_force"
Reperage de qu'elle process fais qu'elle requette
for App in `ls -al /proc/[0-9]*/exe 2>/dev/null | cut -d" " -f 16 |grep "/" |rev |cut -d"/" -f 1 | rev |sort | uniq` ; do firewall-cmd --direct --add-rules ipv4 filter OUTPUT 0 -m owner --cmd-owner "$App" -j LOG --log-prefix "firewall-out-app $App : " done

iptables


iptables (redhate 4~6)
Meme sur iptables il y'a des conf diferente des redhates et les autres

Stop/Start/Sauver les regles

service iptables start
service iptables save
sauve les regles dans le fichier /etc/sysconfig/iptables

Afficher

Afficher les regles type de vue1 avec num ligne
iptables -L --line-numbers
Affiche les regles avec port 161 vue 2
iptables-save | grep 161
    -A INPUT -p udp -m udp --dport 161 -j ACCEPT
    -A INPUT -s 129.88.45.78/32 -p udp -m udp --dport 161 -j ACCEPT
    -A INPUT -s 129.88.45.78/32 -p udp -m udp --dport 161 -j ACCEPT
D'autre vue diponibles
iptables-saves
service iptables status

Effacer/Delete


Effacer les regles en trop
iptables -D INPUT -p udp -m udp --dport 161 -j ACCEPT
iptables -D INPUT -s 129.88.45.78/32 -p udp -m udp --dport 161 -j ACCEPT
iptables -D OUTPUT 1
-D: delete
INPUT / OUTPUT / FORWARD : les 3 types de regles
Sur les deux premiere on efface en recopiant les lignes et la 3iéme par son numero

Ouvrir un port

Ouvrire le port du snmp
iptables -A INPUT -p udp -s xxx.xxx.xxx.xxx --dport 161 -j ACCEPT
-A: ajoute (INPUT: pour ce qui rentre OUTPUT: ce qui sort)
-p: protocol (udp,tcp,icmp,all)
-s: source (d'ou vient le trafic)
--dport: le port
-j : ce que l'on fais (ACCEPT, REJECT, LOG)

Regles sur une plage d'adresse

-I: ajoute
-D: delete
30: inséré en position 30
192.168.0.0/255.255.255.0 -> (athorise toute les ip de 192.168.0.0 à 192.168.0.255)
iptables -I RH-Firewall-1-INPUT 30 -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 3307 -j ACCEPT
iptables -D RH-Firewall-1-INPUT -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 3307 -j ACCEPT

/sbin/service iptables save

Logger

iptables -A OUTPUT -j LOG -!d xxx.xxx.57.0/25 -m state --state NEW --log-uid --log-prefix "iptables" --log-level 4
-m state : on previent que l'on va envoyer des option de status
--state NEW ESTABLISHED INVALID RELATED : different etat possible sur une connection
--log-prefix : prefix du log
--level rsyslog du messages
-!d : on ne log pas cette palge d'ip !! attention -!d a,b done !a ou !b
Pour exclure du login les plages interne accepter le trafique interne avant iptable -A OUTPUT -j ACCEPT -d xxx.xxx.57.0/25,xxx.xxx.57.224/27
iptables -A OUTPUT -j LOG -m state --state NEW --log-uid --log-prefix "iptables" --log-level 4

Redhate


Attention su redhat les regles sont renome
De plus la derniere regles est du type
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
On jette tous les paquets il faut donc placer c'est regle accept avant
iptables -I RH-Firewall-1-INPUT 10 -p udp -s 129.88.45.78 --dport 161 -j ACCEPT
I: place en 1er (10 -> en dixiéme place)
RH-Fire.... : spécial redhate pour faire chier

Fedora core 20 firewall

configuration arret
firewall-config sudo service firewalld stop

Purge du firewall

iptables -F
iptables -t nat