Strona 1 z 1

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

: 28 października 2010, 17:52
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ę.

: 28 października 2010, 19:57
autor: Cyphermen
Teoretycznie nie masz nigdzie zablokowanego łańcucha ,,FORWARD'' więc nie wiem czy potrzebne są reguły związane z nim.

: 28 października 2010, 20:15
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.

: 28 października 2010, 21:14
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           

: 29 października 2010, 10:06
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.