Lokalna konfiguracja routera do pracy w innej sieci (iptables, vpn, dhcp)

Konfiguracja serwerów, usług, itp.
Awatar użytkownika
sector
Beginner
Posty: 113
Rejestracja: 28 kwietnia 2010, 10:48
Lokalizacja: Kraków

Lokalna konfiguracja routera do pracy w innej sieci (iptables, vpn, dhcp)

Post autor: sector »

Parę dni temu dostałem nowe zadanie w pracy - chodziło o skonfigurowanie dla jakiegoś człowieka/znajomego szefa komputera, który będzie działał u niego jako router/firewall. W sumie pierwszy raz konfiguruje w firmie komputer, który będzie działał jako wyżej wymienione urządzenie w innej firmie. Zawsze wolałem robić to na miejscu, ale mniejsza z tym. Chciałbym jedynie, żeby ktoś rzucił okiem na moją konfigurację i może powiedział mi czy czegoś nie robię źle.

Po pierwsze schemat "sieci" i rola serwera.

Obrazek

Więc jak widać. Serwer posiada dwie karty sieciowe.
[INDENT]eth0 - 192.168.0.1 - na niej odpalone jest dhcp. Przez eth0 użytkownicy sieci wychodzą do internetu.
eth1 - zew. ip (ustawione na dhcp) - ip przydzielany przez modem.[/INDENT]

Ustawienia /etc/network/interfaces

Kod: Zaznacz cały

#DHCP
allow-hotplug eth0
iface eth0 inet static
      address 192.168.0.1
      netmask 255.255.255.0

#MODEM
allow-hotplug eth1
iface eth1 inet dhcp
W związku z tym, że w sieci jest parę urządzeń, które coś tam robią (serwer Windows z udostępnianiem plików i możliwe, że coś jeszcze) a ja nie wiem, jak przydzielane IP one mają, to postanowiłem rozpocząć adresacja dhcp od numeru 100.

I tak przedstawia się konfiguracja /etc/dhcp3/dhcpd.conf:

Kod: Zaznacz cały

ddns-update-style none;
option domain-name-servers 8.8.8.8, 194.204.152.34;

default-lease-time 86400;
max-lease-time 604800;

authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
      range 192.168.0.100 192.168.0.240
      option subnet-mask 25.255.255.0;
      option broadcast-address 192.168.0.255;
      option routers 192.168.0.1;
}
Teraz zabezpieczenia. Ponieważ komputer ten ma pełnić w jakimś stopniu rolę firewalla to postanowiłem zablokować wszystkie porty, oprócz dwóch.
Otwarte porty to 1337 - ssh i 1194 0 openvpn. SSH jest odblokowane na wypadek gdyby padł VPN. Na dodatek ma zablokowane logowanie się konto roota.
Co do samego VPN-a to adresowanie sieci VPN jest 192.168.150.0. W konfigu dodatkowo, aby była możliwość podłączenia się do komputerów w sieci lokalnej dodana jest linijka:

Kod: Zaznacz cały

push "route 192.168.0.0 255.255.255.0"
VPN hula na protokole TCP i tak jak wspomniałem wcześniej porcie 1194.

Teraz chyba najważniejsze. Konfiguracja firewalla. Stworzyłem skrypt, który uruchamia się przy starcie systemu i uruchamia konfigurację iptables. Sama konfiguracja iptables, prezentuje się następująco.

Kod: Zaznacz cały

# CZYSZCZENIE WPISOW
iptables -F
iptables -X

# DOMYSLNA POLITYKA
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

# DOPUSZCENIE ISTNIEJACYCH JUZ POLACZEN
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# IP FORWARDING
echo 1 > /proc/sys/net/ipv4/ip_forward

# FORWARDOWANIE IP Z 192.168.0.0 DO INTERNETU
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

# FORWARDOWANIE IP Z 192.168.150.0 (VPN)
iptables -A FORWARD -s 192.168.150.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.150.0/24 -j MASQUERADE

# DOPUSZCZENE RUCHU WYCHODZACEGO Z LAN BEZ OGRANICZEN
iptables -t filter -A FORWARD -i eth1 -s 192.168.0.0/24 -d 0/0 -j ACCEPT

# _______________
# ETH1 - INTERNET

# SSH
iptables -A INPUT -i eth1 -p tcp --dport 1337 -j ACCEPT

# OPENVPN
iptables -A INPUT -i eth1 -p tcp --dport 1194 -j ACCEPT

# DOPUSZCZENIE PING
iptables -A INPUT -i eth1 -p icmp -j ACCEPT

# ______________
# LO - LOCALHOST
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT

# ___________________
# ETH0 - SIEC LOKALNA
iptables -A INPUT -i eth0 -p tcp -j ACCEPT
iptables -A INPUT -i eth0 -p udp -j ACCEPT

# ______________
# TUN0 - OPENVPN
iptables -A INPUT -i tun0 -p tcp -j ACCEPT
iptables -A INPUT -i tun0 -p udp -j ACCEPT
Czy nie zepsułem czegoś w konfiguracji? Szczerze mówiąc wydaje mi się, że mniej więcej jest dobrze, ale byłbym spokojniejszy gdyby ktoś jeszcze rzucił okiem na konfiguracja choćby iptables. Skromną bo skromną, ale powinna spełniać swoją rolę.
Cyphermen
Beginner
Posty: 426
Rejestracja: 24 maja 2009, 10:56
Lokalizacja: cze-wa

Post autor: Cyphermen »

Teoretycznie nie masz nigdzie zablokowanego łańcucha ,,FORWARD'' więc nie wiem czy potrzebne są reguły związane z nim.
Awatar użytkownika
grzesiek
Junior Member
Posty: 932
Rejestracja: 06 stycznia 2008, 10:41
Lokalizacja: Białystok

Post autor: grzesiek »

sector - doliczyłem się chyba 3 przekleństw.
Po pierwsze jak zostało napisane powyżej oraz przepuszczasz ruch wychodzący - mało to ma wspólnego z zasadą blokowania wszystkiego oprócz niezbędnych usług.
Reguły typu:

Kod: Zaznacz cały

iptables -A INPUT -i eth0 -p tcp -j ACCEPT
są mało precyzyjne i mało bezpieczne, można przejść na eth0 z innego interfejsu, zdarzają się takie przypadki.
Jeżeli już chodzi Ci o naprawdę szczelną zaporę to przedstaw wydruk z polecenia

Kod: Zaznacz cały

iptables -L -nxv --line-numbers 
łatwiej się analizuje.
Awatar użytkownika
sector
Beginner
Posty: 113
Rejestracja: 28 kwietnia 2010, 10:48
Lokalizacja: Kraków

Post autor: sector »

Grzesiek, chodziło mi o nie przepuszczanie niczego oprócz niezbędnych usług. Wychodzić niech wychodzi co chcą. Sami dokładnie nie wiedzą czego będą używać ;)

Co do tego wydruku firewall'a na chwile obecna dziwnie to wygląda, bo mam ustanowione jakieś połączenia teraz i pokazuje jakby wszystko przepuszczał. Postaram się wkleić jutro po restarcie, zwłaszcza, że komputera nie mam w domu.

Czy na chwile obecną możecie zasugerować jakieś poprawki?

Wklejam.

Kod: Zaznacz cały

Chain INPUT (policy DROP 11 packets, 2248 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         
1         455    36730 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2           2      164 ACCEPT     tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:1337 
3           0        0 ACCEPT     tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:1194 
4           0        0 ACCEPT     icmp --  eth1   *       0.0.0.0/0            0.0.0.0/0           
5           2      120 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
6           0        0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           
7           2      455 ACCEPT     udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           
8           0        0 ACCEPT     tcp  --  tun0   *       0.0.0.0/0            0.0.0.0/0           
9           0        0 ACCEPT     udp  --  tun0   *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         
1           0        0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2           0        0 ACCEPT     all  --  *      *       192.168.0.0/24       0.0.0.0/0           
3           0        0 ACCEPT     all  --  *      *       192.168.150.0/24     0.0.0.0/0           
4           0        0 ACCEPT     all  --  eth1   *       192.168.0.0/24       0.0.0.0/0           
5           0        0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 261 packets, 33022 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         
1          24     2634 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           
Cyphermen
Beginner
Posty: 426
Rejestracja: 24 maja 2009, 10:56
Lokalizacja: cze-wa

Post autor: Cyphermen »

No to ci zasugerowałem. Nie Blokujesz FORWARD, a masz reguły, które niby odblokowują ten łańcuch. A tak na dobrą sprawę cały ruch wewnątrz LAN jest dozwolony. Czyli nie ma żadnego bezpieczeństwa.
Tak jak grzesiek napisał, niby blokujesz politykę domyślna INPUT DROP, a jednocześnie pozwalasz na cały ruch tcp co pozwala dosłownie na wszystko.
Zablokuj też może flagi SYNC itd.
ODPOWIEDZ