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=”[email protected]”
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 [[email protected]]:
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 [[email protected]]:
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:’[email protected]’
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=”[email protected]”
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/