Návod z roku 2013. Příkazy a verze balíčků se od té doby změnily.
Když na Raspberry Pi provozujete web nebo jiné služby, je dobré vědět, jaká komunikace na něj chodí, a mít nasazený firewall. Kdo nikdy nepsal pravidla pro iptables, ten se s nimi docela natrápí. Právě na to je FERM, nadstavba nad iptables s mnohem jednodušším zápisem pravidel. V návodu nastavíme funkční firewall pro webový server a SSH na Raspbianu.
1. Aktualizace systému
root@raspberrypi:~# apt-get update && apt-get -y upgrade2. Instalace FERM a conntrack
root@raspberrypi:~# apt-get install ferm conntrack
Enable ferm on bootup: Yes3. SSH na jiný port
Port 22 patří k nejčastěji napadaným. V ukázce SSH přesuneme na port 63222. Číslo vyberte z neregistrovaného rozsahu 49152-65535.
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í spojení. Nejdřív otevřete nové a vyzkoušejte, že se na nový port připojíte.
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. Kontrola pravidel v iptables a aktuálních 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 destinationAktuální 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
Tohle je základní funkční firewall pro web na Raspberry Pi s Raspbianem. FERM umí víc: proměnné, složitější strukturu pravidel, názvy portů z /etc/services i přímo čísla portů. Další ukázky konfigurací najdete na internetu.
Zdroje: FERM, Debian Wiki