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

