Baza wiedzy - Konfiguracja firewalla apf na Linuxie (Debian/Ubuntu/CentOS)

Konfiguracja firewalla apf na Linuxie (Debian/Ubuntu/CentOS)

Instalacja

Każdy system powinien posiadać zainstalowany i uruchomiony firewall. Pozostawienie serwera z dostępem dla wszystkich może spowodować włamanie lub ciągłe ataki, które zmniejszą wydajność serwera. Podstawową zasadą ustawienia firewalla jest blokada wszystkiego i odblokowanie tylko potrzebnych portów/aplikacji. Dobrą praktyką jest też ustawienie dostępu do serwera dla ssh lub panelu zarządzania tylko na własny adres IP.
Instalacja firewalla apf jest zależna od systemu. Niektóre systemy posiadają domyślnie zainstalowanego firewalla, jednak czasem nie chcemy mieć w każdym systemie innego rozwiązania.
W przypadku systemu Debian wykonujemy komendę:
apt-get install apf-firewall net-tools

Dla systemu CentOS lub Ubuntu natomiast trzeba ściągnąć paczkę i zainstalować ręcznie.
yum -y install net-tools
wget http://www.rfxn.com/downloads/apf-current.tar.gz
tar -xvf apf-current.tar.gz
cd apf-1.7.5/
./install.sh

Pliki konfiguracyjne znajdują się w przypadku Debiana w katalogu:
/etc/apf-firewall
A w przypadku Ubuntu lub CentOS:
/etc/apf
W przypadku systemu Debian należy jeszcze zmienić wpis w pliku:
/etc/default/apf-firewall
z no na yes:
RUN="yes"

Konfiguracja

Ten wpis obejmuje konfigurację następujących plików w folderze:
conf.apf – główny plik konfiguracyjny
allow_hosts.rules – lista dozwolonych hostów, które mogą połączyć się do serwera
deny_hosts.rules – lista zablokowanych hostów, które nie mogą połączyć się do serwera

Komendy

Komendy wykonujemy w konsoli, należy pamiętać o przeładowaniu firewalla po zmianach:
apf -r
Możemy również tymczasowo zatrzymać go:
apf -f
A później uruchomić ponownie:
apf -s

conf.apf

Najważniejsze ustawienie to czy firewall ma pracować w trybie dev, czyli wyłączać się po określonej liczbie minut, ma to nas uchronić przed zabraniem sobie dostępu do serwera.
DEVEL_MODE="0"
Ustawiamy 1 w przypadku, gdy zabieramy się za zmianę ustawień i 0 jak jesteśmy pewni, że wszystko działa. Następnie podstawowym ustawieniem są porty, na których pracują usługi mające być widoczne z zewnątrz.
IG_TCP_CPORTS="22,80,443"
W powyższym przykładzie otwieramy porty od ssh oraz www na zewnątrz. Gdy mamy więcej portów wszystkie oddzielamy przecinkami.
IG_UDP_CPORTS=""
Powyższe ustawienie służy do otwierania portów UDP (np. w przypadku serwera ts3 lub serwerów gier). Warto również ustawić pobieranie blacklist (czyli predefiniowanych wpisów blokujących niebezpieczne hosty z sieci). Robimy to ustawiając poniższe klucze na wartość 1.
DLIST_ECNSHAME="1"
DLIST_RESERVED="1"
DLIST_DSHIELD="1"
DLIST_SPAMHAUS="1"
DLIST_PHP="1"

allow_hosts.rules

Plik ten służy tworzeniu bardziej zaawansowanych reguł dostępu do serwera. Wpisy dodajemy na końcu pliku. Przykładowy wpis dodający dostęp do ssh dla serwera z naszego adresu IP.
tcp:in:d=22:s=192.168.2.1

Oraz wpis pozwalający na cały ruch z naszego adresu IP:
192.168.2.1

deny_hosts.rules Plik działa tak samo jak powyższy z tym, że wpisy z nim zrobione oznaczają blokowanie. Możemy na przykład zablokować całą podklasę, z której atakują nas boty:
10.0.0.0/23