# Sieć

# Przekierowanie ruchu sieciowego pomiędzy kartami sieciowymi

##### Włączenie przekazywania pakietów (IP Forwarding)

Na początku należy sprawdzić konfigurację sysctl

```bash
sudo vim /etc/sysctl.conf
```

i szukamy wpisu:

```bash
net.ipv4.ip_forward = 1
```

Przeładowujemy konfigurację

```bash
sudo sysctl -p
```

[![image.png](https://wiedza.konio-dc.eu/uploads/images/gallery/2025-03/scaled-1680-/d4Mimage.png)](https://wiedza.konio-dc.eu/uploads/images/gallery/2025-03/d4Mimage.png)

i sprawdzamy czy opcja jest aktywna:

```bash
cat /proc/sys/net/ipv4/ip_forward
```

[![image.png](https://wiedza.konio-dc.eu/uploads/images/gallery/2025-03/scaled-1680-/vBfimage.png)](https://wiedza.konio-dc.eu/uploads/images/gallery/2025-03/vBfimage.png)

Jeśli wynik to `1`, przekazywanie pakietów jest włączone.

##### Konfiguracja NAT (SNAT) poprzez **IPTABLES**

```bash
sudo iptables -t nat -I POSTROUTING -p all -s AdresacjaIPskąd ! -d AdresacjaIPdokąd -j SNAT --to-source JakimIPmaWychodzić
```

Przykład z całymi podsieciami:

```bash
sudo iptables -t nat -I POSTROUTING -p all -s 172.18.0.0/29 ! -d 172.18.0.0/29 -j SNAT --to-source 10.95.227.9
```

##### **Co robi ta reguła?**

- **iptables →** komenda którą nanosimy zmiany
- **-t nat →** Modyfikuje tablicę NAT.
- **-I POSTROUTING →** Wstawia regułę do łańcucha POSTROUTING, czyli po podjęciu decyzji o routingu.
- **-p all →** Dotyczy wszystkich protokołów (TCP, UDP, ICMP itp.).
- **-s 172.18.0.0/29 →** Ogranicza regułę do ruchu wychodzącego z tej podsieci.
- **! -d 172.18.0.0/29 →** Nie dotyczy ruchu wewnątrz tej samej podsieci (eliminuje NAT dla ruchu lokalnego).
- **-j SNAT --to-source 10.95.227.9 →** Zamienia źródłowy adres IP na 10.95.227.9, aby umożliwić komunikację z innymi sieciami.

Sprawdzamy czy reguła została dodana:

```bash
sudo iptables -t nat -L -v -n
```

[![image.png](https://wiedza.konio-dc.eu/uploads/images/gallery/2025-03/scaled-1680-/2dcimage.png)](https://wiedza.konio-dc.eu/uploads/images/gallery/2025-03/2dcimage.png)

Zapisujemy konfigurację:

```bash
sudo service iptables save
```

```bash
sudo iptables-save | sudo tee /etc/sysconfig/iptables
```

# Skrypt tworzący reguły przekierowania dla portów mailowych

Uruchamiamy na systemie proxy:

```bash
#!/bin/bash

# Sposób użycia: sudo ./mail_routing.sh <docelowy_adres_IP>
#
# Przykład: sudo ./mail_routing.sh 192.168.1.138
# Sprawdzenie, czy podano adres IP

if [ -z "$1" ]; then
    echo "Użycie: $0 <docelowy_adres_IP>"
    exit 1
fi

TARGET_IP="$1"

# Lista standardowych portów pocztowych
MAIL_PORTS=(25 465 587 143 993 110 995)

echo "Usuwanie poprzednich reguł..."
iptables -t nat -F PREROUTING
iptables -F FORWARD
iptables -t nat -F POSTROUTING

echo "Dodawanie nowych reguł przekierowania dla adresu: $TARGET_IP"

# Dodawanie reguł przekierowania dla każdego portu
for PORT in "${MAIL_PORTS[@]}"; do
    echo "Przekierowanie portu $PORT na $TARGET_IP:$PORT"
    iptables -t nat -A PREROUTING -p tcp --dport $PORT -j DNAT --to-destination $TARGET_IP:$PORT
    iptables -A FORWARD -p tcp --dport $PORT -d $TARGET_IP -j ACCEPT
    iptables -t nat -A POSTROUTING -p tcp -d $TARGET_IP --dport $PORT -j MASQUERADE
done

# Zapisywanie reguł, aby przetrwały restart systemu
echo "Zapisywanie reguł iptables..."
iptables-save > /etc/sysconfig/iptables 2>/dev/null || service iptables save 2>/dev/null

echo "Konfiguracja zakończona! Sprawdzenie reguł:"
iptables -t nat -L -v -n
iptables -L -v -n

```

Przykładowa część wyniku:

[![image.png](https://wiedza.konio-dc.eu/uploads/images/gallery/2025-03/scaled-1680-/ax0image.png)](https://wiedza.konio-dc.eu/uploads/images/gallery/2025-03/ax0image.png)

# Weryfikacja zapory sieciowej (firewalld) oraz dodanie wyjątków

<p class="callout info">Komendy wykonujemy z CLI bash / sh z uprawnieniami root (sudo)</p>

##### Sprawdzenie wszystkich reguł firewallD:  


```bash
sudo firewall-cmd --list-all
```

Dodanie portu:

```bash
sudo firewall-cmd --add-port=NumerPortu/tcp --permanent
```

Dodanie portu ograniczając do jednej zone

```bash
sudo firewall-cmd --zone=NazwaZony --add-port=NumerPortu/tcp --permanent
```

Dodanie usługi:

```bash
sudo firewall-cmd --permanent --add-service=NazwaService
```

Po zmianach należy przeładować firewallD:

```bash
sudo firewall-cmd --reload
```

##### **Co to jest "rich rule" w firewallD?**

**Rich rules** to zaawansowane reguły w firewallD, które pozwalają na bardziej precyzyjne definiowanie zasad niż standardowe strefy i usługi. Umożliwiają m.in.:

- **Filtrowanie według protokołu, adresów IP, portów, interfejsów**
- **Ustalanie kierunku ruchu (input, output, forward)**
- **Logowanie i kontrolę pasma**

Przykład dodania rich-rule:

```bash
sudo firewall-cmd --add-rich-rule='rule protocol value="NazwaProtokołu" accept' --permanent
```

Przykład wpuszczenia ruchu **ssh** z jednego adresu IP

```bash
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent
```

Po zmianach należy przeładować firewallD:

```bash
sudo firewall-cmd --reload
```