Linux posiada legendarny firewall, używamy go poleceniem iptables (dawno temu ipchains) zabezpieczając serwer warto z niego skorzystać.

Po pierwsze serwer stoi za routerem, który przekierowuje na niego tylko niektóre porty, ale jako że lepiej dmuchać na zimne w pliku /etc/rc.local uruchamianym na końcu procedury uruchamiania można zablokować wszystkie porty, oprócz tych używanych:

1
2
3
4
5
6
7
8
9
10
11
iptables -A INPUT --match state --state RELATED,ESTABLISHED -j ACCEPT --match comment --comment "Ruch przychodzacy."
iptables -A INPUT -p icmp -j ACCEPT --match comment --comment "Przepusc ping"
iptables -A INPUT -p tcp --dport 22 -j ACCEPT --match comment --comment "Pozwol SSH"
iptables -A INPUT -p tcp --dport 80 -j ACCEPT --match comment --comment "Pozwol HTTP"
iptables -A INPUT -p tcp --dport 443 -j ACCEPT --match comment --comment "Pozwol SSL"
iptables -A INPUT --in-interface lo -j ACCEPT --match comment --comment "Pusc caly ruch localhost"
# logowanie prób ominięcia firewalla:
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
#resztę blokujemy
iptables -P INPUT DROP
iptables -P FORWARD DROP

Uwaga, jeśli grzebiemy w ustawieniach SSH przez SSH nie używajmy polecenia iptables –flush (czyszczenie), przynajmniej jeśli Policy = DROP. 🙂

Drugi bardziej elegancki sposób, jeśli posiadasz plik /etc/iptables/rules.v4
możesz w nim dodać analogiczne wpisy bez słowa „iptables” np.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT --match state --state RELATED,ESTABLISHED -j ACCEPT --match comment --comment "Ruch przychodzacy."
-A INPUT -p icmp -j ACCEPT --match comment --comment "Przepusc ping"
-A INPUT -p tcp --dport 20 -j ACCEPT --match comment --comment "Pozwol FTP"
-A INPUT -p tcp --dport 21 -j ACCEPT --match comment --comment "Pozwol FTP"
-A INPUT -p tcp --dport 22 -j ACCEPT --match comment --comment "Pozwol SSH"
-A INPUT -p tcp --dport 80 -j ACCEPT --match comment --comment "Pozwol HTTP"
-A INPUT -p tcp --dport 443 -j ACCEPT --match comment --comment "Pozwol SSL"
-A INPUT --in-interface lo -j ACCEPT --match comment --comment "Pusc caly ruch localhost"
# logowanie prób ominięcia firewalla:
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
#resztę blokujemy
-P INPUT DROP
-P FORWARD DROP

COMMIT