Fortigate – VPN IPSec PSK XAuth z Android’a 4.x

Do niedawna na moim telefonie VPN’ami były: PPTP lub L2TP – oba niespecjalnie mi się podobały. Ale od wersji 4-tej pojawiły się dwa nowe tryby: IPSec Xauth PSK i IPSec Xauth RSA. W pierwszym autoryzacja wykorzystuje login i hasło, w drugim certyfikaty.

Tryb IPSec Xauth PSK jest bardzo wygodny bo łatwo można połączyć go z zewnętrznymi mechanizmami uwierzytelniającymi np. LDAP, Active Directory, itp.

Pokażę jak skonfigurować swojego Fortigate’a by umożliwić połączenie z telefonów i tabletów na Androidzie 4.x do “Intranetu”. Większość konfiguracji można przeprowadzić tylko w trybie CLI – zakładam że wiesz jak to zrobić. To co wygodniej można zrobić w trybie WWW to głównie tworzenie reguł dostępu na zaporze.

P.S. Teoretycznie powinno to też zadziałać na IPhone’ach/IPad’ach itp., przy czym udało mi się to zestawić na 4GS ale na 5-ce już nie – nie miałem tych aparatów na tyle długo by dokładniej to zbadać.

Na początek konfigurujemy fazę pierwszą – ja lubię interface mode ale oczywiście będzie to działać również w trybie policy (trzeba będzie nieco polecenia zmienić).

config vpn ipsec phase1-interface
  edit "vpn-android"
    set type dynamic
    set interface "port1"
    set dhgrp 2
    set peertype one
    set xauthtype auto
    set mode aggressive
    set mode-cfg enable
    set proposal aes128-sha1 aes128-md5 3des-sha1
    set negotiate-timeout 15
    set peerid "jakis-mobilny-identyfikator"
    set authusrgrp "grupa-ludzikow"
    set psksecret haslo
    set unity-support enable
    set ipv4-start-ip 172.16.0.5
    set ipv4-end-ip 172.16.0.100
    set ipv4-netmastk 255.255.255.0
    set ipv4-dns-server1 172.16.0.1
    set ipv4-dns-server2 8.8.8.8
  next
end

Jedna ciekawostka – opcja unity-support domyślnie jest ustawiana na enable i proponuję ją tak zostawić – dzięki temu ta sama konfiguracja będzie działać na urządzeniach z iOS’e i OS X, wystarczy skonfigurować VPN jako Cisco 🙂

No to faza druga:

config vpn ipsec phase2-interface
  edit "mobile-vpn-p2"
    set keepalive enable
    set pfs disable
    set phase1name "vpn-android"
    set proposal aes128-sha1 aes128-md5 3des-sha1
    set keylifeseconds 3600
  next
end

Kilka ustawień na interfejsie:

config system interface
  edit "vpn-android"
    set ip 172.16.0.1 255.255.255.255
    set allowaccess ping
    set type tunnel
    set remote-ip 139.x.x.10
    set interface "port1"
  next
end

Włączymy sobie serwer DNS na interfejsie VPN:

config system dns-server
  edit "vpn-android"
  next
end

No to teraz trzeba utworzyć co najmniej jedną regułę na zaporze zezwalającą na dostęp z interfejsu vpn-android (z adresów tej sieci) do jakiejś sieci intranetowej (np. wewnętrznego serwera WWW), na odpowiednich portach.

Ponadto jeśli chcemy móc korzystać z cache DNS’a na interfejsie vpn-android to musimy umożliwić do niego dostęp tworząc regułę z interfejsu vpn-android (z adresów przydzielanych przez mode-cfg) do vpn-android (przynajmniej do DNS’a – 172.16.0.1).

Jeżeli chcemy by urządzenia mobilne mogły łączyć się do zewnętrznych usług przez tunel VPN (co w niektórych przypadkach może być bardzo cenne) to musimy też utworzyć regułę z interfejsu vpn-android do któregoś z interfejsów WAN’owskich.

VPN Screenshot
A tak należy to wyklikać na telefonie

http://kb.fortinet.com/kb/viewContent.do?externalId=FD31619&sliceId=1

Fortigate: Warning: SQL Logging is not enabled

Jeśli po aktualizacji firmware na swoim firewall’u do wersji MR3 natrafisz na komunikat Warning: SQL Logging is not enabled przy dostępie do logów to prawdopodobnie musisz zmienić źródło logów dla interfejsu gui. Poniżej polecenie CLI i możliwe opcje:

config log gui
    set logdevice {memory | disk | fortianalyzer}
end

Ja potrzebowałem ustawić tę opcję na fortianalyzer by uzyskać dostęp do moich logów.

Sniffowanie w FortiOS

Zawsze gdy potrzebuję zesniffować coś na żywo na Fortigate’ach muszę przeszukać Knowledge Base by przypomnieć sobie wszystkie polecenia do tego potrzebne. Tym razem robię notatki 🙂

Sniffowanie

diagnose debug enable
diagnose debug flow filter
 addr      ip address
 clear     clear filter
 daddr     dest ip address
 dport     destination port
 negate    inverse filter
 port      port
 proto     protocol number
 saddr     source ip address
 sport     source port
 vd        index of virtual domain

# np.
diagnose debug flow filter saddr 10.10.80.3
diagnose debug flow filter daddr 8.8.8.8
diagnose debug flow filter dport 53

# wyświetl wyniki na konsoli
diagnose debug flow show console enable

# opcjonalne: wyświetla nazwy funkcji np. odwołania do routingu, itp
diagnose debug flow show function-name enable

# uruchomienie sniffowania - warto podać na końcu jakaś wartość
# by sniffowanie zakończyło się po takiej liczbie pakietów
# w przeciwnym wypadku wyniki będą się wypisywać na konsoli
# aż uda nam się na oślep wyłączyć sniffowanie
diagnose debug flow trace start 100

# zresetowanie filtrowania flow
diagnose debug reset

# wyłączenie sniffowania
diagnose debug disable

Diagnostyka tuneli IP-Sec

# tutaj jest dużo prościej, najpierw włączamy debuga
diagnose debug enable

# a potem
diagnose debug application ike 2

# lub dla bardzo, bardzo szczegółowych logów
diagnose debug application ike -1

Niestety nie ma tutaj możliwości filtrowania (albo jeszcze o tym nie wiem), więc jeśli mamy dużo aktywnych tuneli to najlepiej zbierać wypisywane komunikaty do pliku i dopiero przeglądać.

Konfiguracja modemu USB iPlus na urządzeniach FortiGate

Zdarzyło mi się bawić sprzętowymi Firewallami firmy Fortigate – chcąc sprawdzić działanie pewnych funkcji potrzebowałem uruchomić dwa/trzy pudełka na osobnych łączach. Pomysł polegał na próbie zmuszenia pudełek do współpracy z modemem iPlus na USB.

Drugim fajnym zastosowaniem tego triku jest możliwość wykorzystania iPlusa jako “zapasowego łącza” w przypadku awarii głównego.

Dzięki pomocy inżyniera Fortigate szybko udało mi się zebrać potrzebne do działania parametry, które należy uruchomić poprzez command line (telnet/ssh).

Jeżeli chcemy uruchomić modem dla konkretnego vdom’u to należy go najpierw wybrać, np:

config vdom
edit root

Jeśli nie korzystamy z vdom’ów to krok ten możemy pominąć. Dalej:

config system modem
    set status enable
    set pin-init at+cpin=xxxx
    set auto-dial enable
    set idle-timer 6
    set redial 2
    set phone1 *99#
    set username1 ppp
    set passwd1 ppp
    set extra-init1 at+cgdcont=1,\"IP\",\"www.plusgsm.pl\"
end

Przy czym w opcji pin-init zamiast xxxx należy podać PIN karty SIM.

Na koniec potrzebny jest restart urządzenia:

execute reboot

Po restarcie będziemy mieć do dyspozycji nowy interfejs (modem). Automatycznie zostanie ustawione dns proxy.

Testowałem to na modemach Huawei E156G i Huawei E173 i różnych urządzeniach FortiGate z firmware w wersji MR2.