Jak jednoduše nakonfigurovat FERM firewall

Když provozujete na Raspberry Pi webové stránky, nebo jiné aplikace, je vždy dobré mít přehled o síťové komunikaci a nasazený firewall. Pro ty kteří se úplně nevyznají v iptables parametrech je vcelku složité zprovoznit slušný firewall. Právě pro tyto účely existuje FERM Firewall. Jedná se o komplexní wrapper, který výrazně zjednodušuje syntaxi psaní pravidel. V této ukázce si předvedeme jak ve FERMu jednoduše nakonfigurovat plně funkční firewall pro váš web server a ssh na Raspbianu.

1. Update/upgrade.

root@raspberrypi:~# apt-get update && apt-get -y upgrade

2. Instalace balíčku FERM firewall a conntrack

root@raspberrypi:~# apt-get install ferm conntrack
Enable ferm on bootup: Yes

3. Doporučuji změnit defaultní SSH port 22 na jiný, v naší ukázce ho změníme na 63222. Nejlepším řešením je zvolit si číslo v neregistrovaném rozsahu portů (49152-65535).

Port 22 je jeden z nejvíce napadaných portů !!!

root@raspberrypi:~# nano /etc/ssh/sshd_config
...
# What ports, IPs and protocols we listen for
Port 63222    #default 22
...
root@raspberrypi:~# service ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.

!!! Po restartu ssh nezavírejte aktuální konzoli !!! Otevřete nejdříve novou a otestujte připojení k serveru s novým portem !

Reklama:

Potřebujete větší výkon než zvládne RPi?

4. Konfigurace firewallu.

root@raspberrypi:~# nano /etc/ferm/ferm.conf
# -*- shell-script -*-
#
#  Example for ssh(63222), http, https and IPv6
#
 
table filter {
    chain INPUT {
        policy DROP;
 
        # connection tracking
        mod state state INVALID DROP;
        mod state state (ESTABLISHED RELATED) ACCEPT;
 
        # allow local packet
        interface lo ACCEPT;
 
        # respond to ping
        proto icmp ACCEPT;
 
        # snmp - if you need for monitoring as CACTI, ICINGA, ...
        proto udp dport snmp ACCEPT;
 
        # allow tcp SSH, FTP, HTTP, HTTPS, ...
        proto tcp dport (63222 http https) ACCEPT;
    }
 
    # outgoing connections are not limited
    chain OUTPUT {
        policy ACCEPT;
    }
 
    # only for a router
    chain FORWARD {
        policy DROP;
    }
}
 
# IPv6 rules
#domain ip6 table filter {
#    chain INPUT {
#        policy DROP;
 
        # connection tracking
#        mod state state INVALID DROP;
#        mod state state (ESTABLISHED RELATED) ACCEPT;
 
        # allow local connections
#        interface lo ACCEPT;
 
        # allow ICMP (for neighbor solicitation, like ARP for IPv4)
#        proto ipv6-icmp ACCEPT;
 
        # allow tcp connections
#        proto tcp dport (http https) ACCEPT;
 
#    }
 
    # outgoing connections are not limited
#    chain OUTPUT policy ACCEPT;
 
    # only for a router
#    chain FORWARD policy DROP;
#}
root@raspberrypi:~# service ferm restart
[ ok ] Reloading Firewall configuration....

5. Vypíšeme si pravidla v iptables a pro zajímavost také probíhající spojení

root@raspberrypi:~# iptables -nvL
Chain INPUT (policy DROP 43 packets, 5669 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            state INVALID
   27  1772 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:161
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:63222
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
 
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 
Chain OUTPUT (policy ACCEPT 23 packets, 2164 bytes)
 pkts bytes target     prot opt in     out     source               destination

výpis aktuálních spojení

root@raspberrypi:~# conntrack -L
tcp      6 299 ESTABLISHED src=192.168.252.119 dst=192.168.252.120 sport=51374 dport=63222 src=192.168.252.120 dst=192.168.252.119 sport=63222 dport=51374 [ASSURED] mark=0 use=1
tcp      6 431957 ESTABLISHED src=192.168.252.120 dst=192.168.252.119 sport=22 dport=50941 src=192.168.252.119 dst=192.168.252.120 sport=50941 dport=22 [ASSURED] mark=0 use=1
conntrack v1.2.1 (conntrack-tools): 2 flow entries have been shown.

6. Hotovo!

Samozřejmě fantazii se meze nekladou a na internetu naleznete další ukázky konfigurací FERMu. Tato stránka slouží jako ukázka základního a funkčního firewallu na Raspberry Pi s Raspbianem pro vaše www stránky. Ve FERMu lze samozřejmě vytvářet složitější konstrukce, definovat proměnné, používat názvy portů z /etc/services stejně jako v ukázce nebo přímo čísla porů, atd.

Zdroje: FERM Projects, Sigterm, Debian Wiki