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 !

Advertisement:

Do you need more power than 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