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 !
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.