# Admin Linux : TP 3

- Thomas LACAZE
- Jean-Michel REMEUR
- Maud GELLEE
- Arsène LAPOSTOLET

Nous avons commencé par mettre en place les machines et les interconnexion physique sur marionnette : 

![archi](images/marionette.png)


# Hypothèses

Après avoir étudié le tableau et le schéma, nous avons déduis que les machines m1, m2, m3 et m4 récupèrerons leurs adresses IP à l'aide du DHCP et appartiendrons toutes les quatre au VLAN 10. Pour le DHCP et le DNS nous avons compris que ces deux machines auront elles des adresses fixes et seront positionnées dans le VLAN 30. Les deux imprimantes auront elles aussi des adresses fixes mais se trouveront sur la VLAN 20. La Gateway sera connectée aux trois VLANs via l'interface eth0 et sera connectée à la réelle Gateway via l'interface eth1.

## Configurer le réseau

Pour définir les IPs des machines de manière fixe nous avons dans un premier temps configuré les interfaces réseau sur les machines. Cependant, nous passeront par la suite à des IPs fixes pour ces machines mais distribuées par le serveur DHCP via des Hosts.


### Configurer imprimante1

`/etc/network/interfaces`
```
auto eth0
iface eth0 inet static
    address 192.168.20.1
    netmask 255.255.255.0
    gateway 192.168.20.254
```

### Configurer imprimante2

`/etc/network/interfaces`
```
auto eth0
iface eth0 inet static
    address 192.168.20.2
    netmask 255.255.255.0
    gateway 192.168.20.254
```

### Configurer DHCP

`/etc/network/interfaces`
```
auto eth0
iface eth0 inet static
    address 192.168.30.1
    netmask 255.255.255.0
    gateway 192.168.30.254
```

### Configurer DNS

`/etc/network/interfaces`
```
auto eth0
iface eth0 inet static
    address 192.168.30.2
    netmask 255.255.255.0
    gateway 192.168.30.254
```

### Config VLAN


#### Sur le switch S1 : 
Pour cela il faut uniquement démarrer le Switch sans le reste de l'infrastructure.

Nous avons utilisé les commandes suivantes :
- `vlan/create` : permet de créer un VLAN
- `vlan/setport` : permet d'affecter un port à un VLAN
- `vlan/addport` : permet d'affecter un port à un VLAN en mode trunking
- `vlan/print` : affiche la configuration actuelle des VLANs sur le switch

```bash
vlan/create <numéroVLAN>
vlan/addport <numéroVLAN> <port>
vlan/print
```

Dans le fichier '/root/switch.conf' nous avons :

```bash
vlan/create 10
vlan/create 20
vlan/create 30

port/setvlan 6 10
port/setvlan 7 10
port/setvlan 8 10
port/setvlan 9 10

port/setvlan 1 20
port/setvlan 2 20

port/setvlan 3 30
port/setvlan 5 30

vlan/addport 10 4 #Trunking pour la communication inter vlan
vlan/addport 20 4 #Trunking pour la communication inter vlan
vlan/addport 30 4 #Trunking pour la communication inter vlan
```

Nous utilisons la commande suivante pour charger la configuration :

```bash
load /root/switch.conf
```

#### Sur la gateway : 

Création et configuration des vlans. 

Créer les interfaces virtuelles et les ajouter dans `/etc/rc.local`:

```bash
vconfig add eth0 10
vconfig add eth0 20
vconfig add eth0 30
```

Ajouter la configuration des VLANs dans `/etc/network/interfaces`:

```bash
auto eth0

auto eth0.10
iface eth0.10 inet static
    address 192.168.10.254
    netmask 255.255.255.0

auto eth0.20
iface eth0.20 inet static
    address 192.168.20.254
    netmask 255.255.255.0

auto eth0.30
iface eth0.30 inet static
    address 192.168.30.254
    netmask 255.255.255.0

auto eth1 # pour contacter la machine hote
iface eth1 inet static
    address 10.0.2.3
    netmask 255.255.255.0
```

Cependant nous avons un bug lors du redémarrage du service réseau `service networking restart`.

La solution que nous avons trouvé est de passer en root sur la machine host.

![vlanprint](images/vlanprint.png)

## Routing

Sur la Gateway nous avtivons le routing avec les commandes suivantes : 

```
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
iptables -A POSTROUTING -t nat -o eth0.10 -j MASQUERADE
iptables -A POSTROUTING -t nat -o eth0.20 -j MASQUERADE
iptables -A POSTROUTING -t nat -o eth0.30 -j MASQUERADE

##### USELESS ?
ip route add 192.168.10.0/24 via 192.168.20.254
ip route add 192.168.10.0/24 via 192.168.30.254
ip route add 192.168.20.0/24 via 192.168.10.254
ip route add 192.168.20.0/24 via 192.168.30.254
ip route add 192.168.30.0/24 via 192.168.10.254
ip route add 192.168.30.0/24 via 192.168.20.254
```

## DHCP

Désactiver le service DHCP sur la gateway : 

![dhcpgateway](images/gatewaydhcp.png)

Sur le serveur dhcp :

```bash
nano /etc/default/isc-dhcp-server
```

```bash
INTERFACE="eth0.10 eth0.20 eth0.30"
```

```bash
option domain-name "st-potache.fr";
option domain-name-server 192.168.30.2;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;

subnet 192.168.10.0 netmask 255.255.255.0 {
    option routers 192.168.10.254;
    pool {
        allow unknown-clients;
        range 192.168.10.2 192.168.10.20;
    }
}

subnet 192.168.20.0 netmask 255.255.255.0 {
    option routers 192.168.20.254;
    host imprimante1 {
        hardware ethernet 02:04:06:1a:b9:82;
        fixed-address 192.168.20.1;
    }

    host imprimante2 {
        hardware ethernet 02:04:06:02:c5:28;
        fixed-address 192.168.20.2;
    }

}

subnet 192.168.30.0 netmask 255.255.255.0 {
    option routers 192.168.30.254;
    host dns {
        hardware ethernet 02:04:06:e7:17:34;
        fixed-address 192.168.30.2;
    }
}
```

```bash
sudo service isc-dhcp-server restart
```

Pour redémarrer :
`/etc/rc.local`
```
service isc-dhcp-server start
exit 0
```

Pour configurer le DNS :

```bash
nano /etc/resolv.conf
```

Contenu du fichier `/etc/resolv.conf`
```
domain st-potache.fr
search st-potache.fr
nameserver 192.168.30.2
```

Pour redémarrer :
`/etc/rc.local`
```
/etc/init.d/bind9 start
exit 0
```

Le relay : 

Dans /etc/default/isc-dhcp-relay :
```
SERVERS="192.168.30.1"

# On what interfaces should the DHCP relay (dhrelay) serve DHCP requests?
INTERFACES=""

# Additional options that are passed to the DHCP relay daemon?
OPTIONS=""
```

```bash
sudo service isc-dhcp-relay restart
```

Sur les machines m1, m2, m3,  m4, dns, imprimante1, imprimante2ro  : 

```
allowhotplug eth0
auto eth0
iface eth0 inet dhcp
```

```bash
sudo service networking restart
```

Résultat : 

![DNS 1](./images/dhcp1.png)
![DNS 2](./images/dhcp2.png)


## DNS

`/etc/bind/named.conf.default-zones`
```
zone "st-potache.fr" {
        type master;
        file "/etc/bind/db.st-potache.fr";
}

zone "20.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.st-potache.fr.rev20";
}

zone "30.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.st-potache.fr.rev30";
}
```

`/etc/bind/db.st-potache.fr`
```
$TTL    86400
@       IN      SOA     dns. root.dns. (
                        202120901       ; Serial
                        604800          ; Refresh
                        86400           ; Retry
                        2419200         ; Expire
                        86400 )         ; Negative Cache TTL

        IN      NS      dns.st-potache.fr.
dns     IN      A       192.168.30.2
imprimante1     IN      A       192.168.20.1
imprimante2     IN      A       192.168.20.2
dhcp    IN      A       192.168.30.1
```

`/etc/bind/db.st-potache.fr.rev20`
```
$TTL    86400
@       IN      SOA     dns. root.dns. (
                        202120901       ; Serial
                        604800          ; Refresh
                        86400           ; Retry
                        2419200         ; Expire
                        86400 )         ; Negative Cache TTL

        IN      NS      dns.st-potache.fr.
1       IN      PTR     imprimante1.st-potache.fr.
2       IN      PTR     imprimante2.st-potache.fr.
```

`/etc/bind/db.st-potache.fr.rev30`
```
$TTL    86400
@       IN      SOA     dns. root.dns. (
                        202120901       ; Serial
                        604800          ; Refresh
                        86400           ; Retry
                        2419200         ; Expire
                        86400 )         ; Negative Cache TTL

        IN      NS      dns.st-potache.fr.
1       IN      PTR     dns.st-potache.fr.
2       IN      PTR     dhcp.st-potache.fr.
```

Résultats :

```bash
$dns: nslookup 192.168.30.2
```
![$dns: nslookup 192.168.30.2](./images/dns1.png)

```bash
$dns: nslookup dhcp.st-potache.fr
```
![$dns: nslookup dhcp.st-potache.fr](./images/dns2.png)

```bash
$imprimante2: nslookup dhcp.st-potache.fr
```
![$imprimante2: nslookup dhcp.st-potache.fr](./images/dns3.png)

## DDNS

On crée la clef `/etc/bind/rndc.key`
```
key "rndc-key" {
       algorithm hmac-md5;
       secret "yF1eFUcsV7P1M8d+GxGb5g==";
};
```

On rajoute la ligne ci-dessous à la fin du fichier `/etc/bind/named.conf`
```
include "/etc/bind/rndc.key";
```

`/etc/bind/named.conf.default-zones`
```
zone "st-potache.fr" {
        type master;
        forwarder {};
        file "/etc/bind/db.st-potache.fr";
        allow-updates { key rndc-key };
}

zone "20.168.192.in-addr.arpa" {
        type master;
        forwarder {};
        file "/etc/bind/db.st-potache.fr.rev20";
        allow-updates { key rndc-key };
}

zone "30.168.192.in-addr.arpa" {
        type master;
        forwarder {};
        file "/etc/bind/db.st-potache.fr.rev30";
        allow-updates { key rndc-key };
}
```

On redémarre le service DNS
```
services bind9 restart
```

On crée la clef `/etc/dhcp/rndc.key`
```
key "rndc-key" {
       algorithm hmac-md5;
       secret "yF1eFUcsV7P1M8d+GxGb5g==";
};
```

On édite le fichier `/etc/dhcp/dhcpd.conf` en changeant les lignes ci-dessous
```
ddns-updates on;
ddns-update-style interim;
```

On rajoute la clef `rndc.key` dans les zones en rajoutant les lignes suivantes dans la config des subnet
`/etc/dhcp/dhcpd.conf`
```
zone "st-potache.fr" {
        primary st-potache.fr;
        key rndc-key;
}

zone "20.168.192.in-addr.arpa" {
        primary st-potache.fr;
        key rndc-key;
}

zone "30.168.192.in-addr.arpa" {
        primary st-potache.fr;
        key rndc-key;
}
```

On redémarre le service DHCP

```bash
services isc-dhcp-server restart
```

## Intranet

```bash
$ apt install apache2
$ apt install mysql-server
$ sudo mysql -p
mysql> GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysl> # copier le script sql de l'annexe
mysql> exit;
$ sudo apt install php5 libapache2-mod-php5 php5-mysql
$ sudo systemctl apache2 restart
$ sudo nano /var/www/html/index.html # copier le contenu de index.html de l'annexe
$ sudo nano /var/www/html/reponse.php # copier le contenu de reponse.php de l'annexe
```

Résultats : 

![PHP 1](./images/php1.png)
![PHP 2](./images/php2.png)
![PHP 3](./images/php3.png)
![PHP 4](./images/php4.png)



## Gestion des utilisateurs 

Sur la machine m1 :
Création du groupe users :

```bash
groupadd -g 100 users
```

Création du compte étudiant : 
```bash
useradd -u 1501 -g 100 -s /bin/bash -m etudiant
```
On change le mot de passe du compte étudiant à l'aide de la commande : 
```bash
sudo passwd etudiant
```
(Nous avons mis comme mot de passe "toto")

Nous avons choisit d'utiliser les commandes sftp pour transférer les trois fichiers de configurations des utilisateurs (/etc/passwd, /etc/shadow et /etc/group)

sftp root@adrIPmachinesrc:/cheminFichierSrc /cheminFichierCible

Sur les machines m2, m3 et m4:
```bash
sftp root@192.168.10.6:/etc/group /etc/group
sftp root@192.168.10.6:/etc/passwd /etc/passwd
sftp root@192.168.10.6:/etc/shadow /etc/shadow
```

Ou en utilisant `scp`.

Sur chaque machine il faut faire écouter le ssh sur 0.0.0.0 dans le fichier `/etc/ssh/sshd_config`.
Décommentez la ligne `ListenAddress 0.0.0.0`.

Sur la machine m1 vers les machines m2, m3 et m4: 
```bash
scp /etc/group root@192.168.10.5:/etc/group
scp /etc/passwd root@192.168.10.5:/etc/passwd
scp /etc/shadow root@192.168.10.5:/etc/shadow

scp /etc/group root@192.168.10.7:/etc/group
scp /etc/passwd root@192.168.10.7:/etc/passwd
scp /etc/shadow root@192.168.10.7:/etc/shadow
```


## Pare Feu

- Mettre les politiques par défaut de toutes les chaînes à DROP :
  
```bash
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
```

- Autoriser les requêtes ICMP (`ping`) vers la machine `gateway`

```bash
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
```

- Autoriser les requêtes ICMP à transiter par la machine `gateway` (`FORWARD`) ICMP

```bash
iptables -A FORWARD -p icmp -j ACCEPT
```

- Autoriser les requêtes (`port 53`) pour assurer le service DNS

```bash
iptables -A FORWARD -p udp --dport 53 -j ACCEPT
```

- Autoriser les requêtes (`port 67/68`) pour assurer le service DHCP
Nous avons également mis de l'INPUT et de l'OUTPUT car il y a le DHCP Relay sur la gateway.

```bash
iptables -A FORWARD -p udp --dport 67 -j ACCEPT
iptables -A FORWARD -p udp --dport 68 -j ACCEPT

iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p udp --dport 68 -j ACCEPT

iptables -A OUTPUT -p udp --dport 67 -j ACCEPT
iptables -A OUTPUT -p udp --dport 68 -j ACCEPT
```

- Pour l'autorisation des connexion HTTP vers le debian hôte :

```bash
iptables -A FORWARD -s 192.168.10.0/24 -d 10.0.2.0/2 -p tcp --dport 80 -j ACCEPT
```

![Web](./images/web.png)

- Nous nous sommes rendu compte à partir des règles sur le DNS que les réponses ne passaient pas, après avoir regardé sur internet, nous avons réalisé qu'avec une politique par défaut où tout est `DROP` il fallait que l'on autorise explicitement les connexions existantes et actives :

```bash
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
```
Cette commande a été utile pour toutes les règles à partir du DNS.
