Spis treści
Udostępniając pewne usługi dla świata trzeba przewidzieć sytuację w której ktoś zechce zaatakować nasz serwer. Wszechobecne boty skanują znane porty, zbierają informację o naszym systemie, czy też próbują się do niego włamać. Dobrym pomysłem jest limitowanie połączeń dla każdej usługi na firewall’u. Na przykład jeżeli dany host (adres IP) będzie próbował nawiązać 20 połączeń na sekundę na porcie 80, możemy być pewni że nie jest to „normalny” ruch. Co najgorsze taki atak może uniemożliwić innym dostęp do usługi.
Zabezpieczenie portów 25 i 110 w Packet Filter
Załóżmy, że chcemy zabezpieczyć nasz serwer poczty przed atakami DoS. Jeżeli jakiś host próbuje nawiązać więcej niż 15 połączeń na minutę, zostanie od automatycznie dodany do tablicy blocked_ips
:
$WAN_IF="vr0" $MAILSERVER_IP="x.x.x.x" block drop in log quick on $WAN_IF proto {tcp, udp} from <blocked_ips> to $MAILSERVER_IP pass in log quick on $WAN_IF proto tcp from any to $MAILSERVER_IP port {25,110} keep state \ (max-src-conn 25, max-src-conn-rate 15/60, overload <blocked_ips> flush
Reguła blokująca powinna być na początku firewall’a. Listę zablokowanych adresów IP można zobaczyć używając polecenia pfctl
:
root@fw-m:/>pfctl -t blocked_ips -T show 1.2.3.4
Chcemy też, aby hosty, które są zablokowane dłużej niż 10 minut, zostały automatycznie usunięte z tablicy:
/sbin/pfctl -t blocked_ips -T expire 600
Ponieważ polecenie te musielibyśmy wpisywać za każdym razem sami, dodamy je do cron'a
:
*/2 * * * * /sbin/pfctl -t blocked_ips -T expire 600 > /dev/null 2>&1
Zabezpieczenie portów 25 i 110 w iptables
Taki sam efekt można osiągnąć używając iptables
z modułem recent.
#MAILSERVER_IP="x.x.x.x" #port 25 iptables -A INPUT -i eth0 -p tcp -d x.x.x.x --dport 25 -m state --state NEW -m recent --set --name PORT_25 iptables -A INPUT -i eth0 -p tcp -d x.x.x.x --dport 25 -m state --state NEW -m recent --update --seconds 60 --hitcount 15 --rttl --name PORT_25 -j DROP #port 110 iptables -A INPUT -i eth0 -p tcp -d x.x.x.x --dport 110 -m state --state NEW -m recent --set --name PORT_110 iptables -A INPUT -i eth0 -p tcp -d x.x.x.x --dport 110 -m state --state NEW -m recent --update --seconds 60 --hitcount 15 --rttl --name PORT_110 -j DROP
Dodatkowo moduł ten tworzy pliki w katalogu /proc/net/ipt_recent
, w których możemy zobaczyć listę śledzonych adresów IP:
cat /proc/net/ipt_recent/PORT_25 src=1.1.1.1 ttl: 118 last_seen: 15208768 oldest_pkt: 1 15208768 src=2.2.2.2 ttl: 58 last_seen: 15409111 oldest_pkt: 1 15409111 src=3.3.3.3 ttl: 54 last_seen: 15376952 oldest_pkt: 6 15374675, 15375305, 15375684, 15376048, 15376514, 15376952
Witam
Mam takie pytanie jak skonfigurować ossec i PF aby PF mógł korzystać z jego rejestru logów ??