Router Debian cz. 2

 

Instalacja i konfiguracja serwera DHCP

Zainstalowanie i skonfigurowanie serwera DHCP na interfejsie eth1 (eth0 – jest zawsze interfejsem WAN)
instalacja:
apt-get update
apt-get install isc-dhcp-server

edytujemy:
/etc/default/isc-dhcp-server
Dodajemy interfejs na którym ma działać server DHCP (jeśli mamy kilka interfejsów na których ma działać dhcp to dopisujemy po spacji np. INTERFACES=”eth1 eth2 eth3″ Odpowiednia podsieć zostanie przyporządkowana po adresie ip interfejsu.
INTERFACES=”eth1″


Edytujemy:
/etc/dhcp/dhcpd.conf
dodajemy pulę adresową


subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.50 192.168.100.250;
option domain-name-servers 1.1.1.1, 8.8.4.4;
option domain-name "nazwa_firmy.local";
option routers 192.168.100.1;
option broadcast-address 192.168.100.255;
# 1 day (86400 seconds)
# 7 days (7*86400 = 604800 seconds)
default-lease-time 86400;
max-lease-time 604800;
}

restartujemy serwis:
service isc-dhcp-server restart
sprawdzamy czy wszystko ok poleceniem:
systemctl status isc-dhcp-server.service

Przekazywanie pakietów

Edycja pliku:
nano /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

aby działało przed restartem routera:

echo 1 > /proc/sys/net/ipv4/ip_forward

Prosty „Firewall”

W katalogu domowym roota tworzymy pliki:

touch firewall && chmod 755 firewall

wpisujemy zawartość:
#!/bin/bash
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
public=172.27.211.50
iptab=iptables
#Najpierw czyscimy
echo "Czyscimy i kasujemy wszystkie reguly"
$iptab -F
$iptab -X
$iptab -t nat -F
$iptab -t nat -X
echo "Blokujemy wszystko"
$iptab -P INPUT ACCEPT
$iptab -P OUTPUT ACCEPT
$iptab -P FORWARD ACCEPT
$iptab -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Postrouting"
$iptab -A POSTROUTING -t nat -o eth0 -j SNAT --to-source $public

ustawiamy serwis rc.local

nano /etc/systemd/system/rc-local.service
Tworzymy plik rc-local.service w lokalizacji /etc/systemd/system o zawartości:

[Install]
WantedBy=multi-user.target

[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

tworzymy plik rc.local w /etc o zawartości:
nano /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0

nadajemy uprawnienia do wykonywania rc.local i włączamy skrypt:

chmod +x /etc/rc.local
systemctl enable rc-local
systemctl start rc-local.service

edytujemy rc.local i dodajemy swoje ustawienia

Sprawdzamy czy nie ma błędów:
systemctl status rc-local.service

Do pliku /etc/rc.local dodajemy przed exit 0
# By default this script does nothing.
/root/firewall
exit 0

OpenVPN

touch makeopenvpn && chmod 755 makeopenvpn
wpisujemy zawartość:
#!/bin/bash
folder=/root/kluczeopenvpn
cd /usr/share/easy-rsa
source ./vars
./build-key $1
cp /usr/share/easy-rsa/keys/$1* /root/kluczeopenvpn/
cp $folder/wzor.ovpn $folder/$1.ovpn
echo cert $1.crt >> $folder/$1.ovpn
echo key $1.key >> $folder/$1.ovpn
zip -j $folder/$1.zip $folder/$1.*
zip -j $folder/$1.zip $folder/ca.crt

Tworzymy w katalogu domowy root folder kluczeopenvpn
mkdir kluczeopenvpn && cd kluczeopenvpn && touch wzor.ovpn
zawartość wzor.ovpn:
client
dev tun
proto udp
remote 172.27.211.50 1194
resolv-retry infinite
nobind
persist-key
ca ca.crt
ns-cert-type server
cipher BF-CBC
comp-lzo
verb 3

Instalujemy dodatkowe programy:
apt-get update
apt-get install iptraf nmap rcconf tcpdump zip

Instalacja i konfiguracja openvpn

apt-get install openvpn
przechodzimy do scieżki:
cd /usr/share/easy-rsa/

Kopiujemy plik:
root@wawa:/usr/share/easy-rsa# cp openssl-1.0.0.cnf openssl.cnf
dodatkowo zmodyfikować można plik vars o podanie prawidłowych danych:
export KEY_COUNTRY=”US”
export KEY_PROVINCE=”CA”
export KEY_CITY=”SanFrancisco”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”me@myhost.mydomain”
export KEY_OU=”MyOrganizationalUnit”
i wydajemy polecenia:
. ./vars
./clean-all
./build-ca

przykładowe dane:
/usr/share/easy-rsa# ./build-ca
Generating a 2048 bit RSA private key
…………+++
…+++
writing new private key to 'ca.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ’.’, the field will be left blank.
—–
Country Name (2 letter code) [US]:PL
State or Province Name (full name) [CA]:MA
Locality Name (eg, city) [SanFrancisco]:WARSAW
Organization Name (eg, company) [Fort-Funston]:NAZWA_FIRMY
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:BIURO
Common Name (eg, your name or your server’s hostname) [Fort-Funston CA]:NAZWA_FIRMY
Name [EasyRSA]:
Email Address [me@myhost.mydomain]:

Konfiguracja certyfikatu i klucza dla servera:
./build-key-server server

przykładowe dane:
/usr/share/easy-rsa# ./build-key-server server
Generating a 2048 bit RSA private key
………+++
…………….+++
writing new private key to 'server.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ’.’, the field will be left blank.
—–
Country Name (2 letter code) [US]:PL
State or Province Name (full name) [CA]:MA
Locality Name (eg, city) [SanFrancisco]:WARSAW
Organization Name (eg, company) [Fort-Funston]:NAZWA_FIRMY
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:BIURO
Common Name (eg, your name or your server’s hostname) [server]:NAZWA_FIRMY
Name [EasyRSA]:
Email Address [me@myhost.mydomain]:

Please enter the following 'extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’PL’
stateOrProvinceName :PRINTABLE:’MA’
localityName :PRINTABLE:’WARSAW’
organizationName :PRINTABLE:’Nazwa firmy’
organizationalUnitName:PRINTABLE:’BIURO’
commonName :PRINTABLE:’Nazwa firmy’
name :PRINTABLE:’EasyRSA’
emailAddress :IA5STRING:’me@myhost.mydomain’
Certificate is to be certified until May 18 09:23:10 2025 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Generate Diffie Hellman parameters
./build-dh

tworzymy i edytujemy plik konfiguracyjny:
nano /etc/openvpn/server.conf
o zawartości:

port 1194
proto udp
dev tun
topology subnet #istotne jeśli łączy się dużo klientów
server 10.9.8.0 255.255.255.0 # internal tun0 connection IP

ca /etc/openvpn/ca.crt # generated keys
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # keep secret
dh /etc/openvpn/dh2048.pem

ifconfig-pool-persist ipp.txt
push „route 172.28.181.0 255.255.255.0”
push „dhcp-option DNS 8.8.8.8”
push „dhcp-option DOMAIN nazwa_firmy.local”
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
#crl-verify crl.pem

Skopiwać klucze i certyfikaty do /etc/openvpn/:
cp /usr/share/easy-rsa/keys/* /etc/openvpn/
cp /usr/share/easy-rsa/keys/* /root/kluczeopenvpn/

wykonanie restartu servera:
reboot

Opcja SITEtoSITE

 

Mamy już wygenerowane certyfikaty dla serwera i klienta

Wirtualna sieć dla OpenVPN: 10.8.0.0/24

Serwer:

adresacja sieci lokalnej: 192.168.100.1/24
adres publiczny: 172.27.211.50

Klient:

adresacja sieci lokalnej: 192.168.200.1/24
adres publiczny: bez znaczenia

Pliki Konfiguracyjne

Serwer:

/etc/openvpn/server.conf

#
port 1194
proto udp
dev tun
server 10.8.0.0 255.255.255.0 # internal tun0 connection IP

ca /etc/openvpn/ca.crt # generated keys
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # keep secret
dh /etc/openvpn/dh2048.pem

client-config-dir ccd # folder /etc/openvpn/ccd ma zawierać pliki z konfiguracją poszczególnych klientów (konkretnie linijkę „iroute adres maska” z podsiecią u klienta – trasa dla openVPN
topology subnet # „nowa” topologia sieci – każdy klient dostaje jeden adres IP, zamiast marnować 4 sztuki
push „route 192.168.100.0 255.255.255.0” # wysyłam klientowi adresację podsieci po stronie serwera
route 192.168.200.0 255.255.255.0 # ustawienie trasy do sieci zdalnej (dla kernela)
keepalive 10 120 # keepalice co 10 sek. po 120 sek. uznaj połaczenie z martwe
comp-lzo # kompresja
user nobody
group nogroup
persist-key # persist-key i persist-tun są potrzebne, żeby nie-root mógł restartować połączenia (chyba tak to leciało)
persist-tun
status openvpn-status.log
cipher AES-256-CBC #Przyzwoite szyfrowanie (domyślne Blowfish-CBC jest słabe
verb 3 # 3 to zwykły poziom logów. Przy 4 i 5 jest za dużo informacji

#crl-verify crl.pem # sprawdzanie ważności/odwołań certyfikatów. Wymaga samodzielnego generowanie i kopiowania crl: openssl ca -config /usr/share/easy-rsa/openssl.cnf -gencrl -out /etc/openvpn/crl.pem

/etc/openvpn/ccd/abu – każdy klient musi mieć swój plik w folderze „CCD”. Tu wpisujemy tylko adresację sieci lokalnej po stronie klienckiej. Nazwa pliku zgodna z CN (common name) w certyfikacie klienta

iroute 192.168.200.0 255.255.255.0

Klient:

/etc/openvpn/abu.conf

#
client
remote 172.27.211.50
resolv-retry infinite
port 1194
proto udp
dev tun0

ca ca.crt
cert abu.crt
key abu.key

persist-tun
persist-key
comp-lzo
keepalive 10 120

cipher AES-256-CBC
user nobody
group nogroup
verb 3
status openvpn-status.log

Włączenie usługi podczas startu

systemctl enable openvpn@abu.service

Wystartowanie serwisu:
service openvpn@abu start

sprawdzenie statusu:
service openvpn@abu status

Trzeba jeszcze dodać routing po stronie serwera:
route add -net 192.168.100.0 netmask 255.255.255.0 gw 10.8.0.2 dev tun0
w firewallu clienta dodać:
iptables -t nat -o tun+ -A POSTROUTING -s 10.8.0.0/24 -d 172.28.181.0/24 -j SNAT --to-source 192.168.100.1

Odwołaj cert w folderze domowym root

zrobić skrypt odwolajcertyfikat o zawartości:
cd /usr/share/easy-rsa/
source ./vars
./revoke-full $1
cp /usr/share/easy-rsa/keys/crl.pem /etc/openvpn/
mv /root/kluczeopenvpn/$1* /root/odwolaneCertyfikaty/
nadanie uprawnień do wykonywania:
chmod 755 /root/odwolajcertyfikat
Aktualizacje CRL

Wpisać do pliku: /root/generujcrl.sh:

#!/bin/bash
cd /usr/share/easy-rsa
source ./vars
openssl ca -config /usr/share/easy-rsa/openssl.cnf -gencrl -out /etc/openvpn/crl.pem

Wykonać:

chmod +x /root/generujcrl.sh

cp /usr/share/easy-rsa/openssl-1.0.0.cnf /usr/share/easy-rsa/openssl.cnf

Dopisać do pliku/usr/share/easy-rsa/vars (niektóre wiersze już są, wystarczy poprawić wartości):

export KEY_COUNTRY=”PL”
export KEY_PROVINCE=”mazowieckie”
export KEY_CITY=”Warszawa”
export KEY_ORG=”Nazwa Firmy”
export KEY_EMAIL=”domyslny@adres.ip”
export KEY_OU=”IT”
export KEY_CN=”CommonName”
export KEY_ALTNAMES=”AltName”
export KEY_NAME=”KeyName”

uruchomić:

crontab -e:

i dopisać:

#Aktualizacja CRL dla OpenVPN:

0 1 * * * /root/generujcrl.sh

Stworzyć folder /root/odwolaneCertyfikaty

dopisać w /root/odwolajCert:

mv /root/kluczeopenvpn/$1* /root/odwolaneCertyfikaty/

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>