Bl.a. i forbindelse med at sikre min egen VPS røg jeg ind i et par IPtables fejl og erkendelser omkring Virtual Environments (VE). Det jeg i udgangspunkt forsøgte var:
(1) Opret en gruppe over godkendte IP først:
iptables -N SSH_WHITELIST(2) tilføj herefter hvilken somhelst host(s):
iptables -A SSH_WHITELIST -s IPADRESSE -m recent --remove --name SSH -j ACCEPT
Med andre ord. Jeg har oprettet en Whitelist og vil nu tilføje et par IPer over godkendte hosts, der kan lave SSH til VPSen, og her støder jeg ind i iptables: No chain/target/match by that name.
Problemmet er; -m recent ikke er supporteret i Virtual Environments. Sætningen skal derfor se således ud:
iptables -A SSH_WHITELIST -s IPADRESSE -j ACCEPT
Men du skal være opmærksom på at droppe listen SSH_WHITELIST, oprette den igen og derefter tilføje din(e) host(s).
Efter ovenstående var ideen at få implementeret nedenstående - der dog ikke lader sig gøre i Virtual Environments desværre - derfor benytter jeg d.d. bare blockhosts - der via cron sætter IPer i karantæne via IPtables når en orm (10.000 login forsøg på 2 minutter), eller en hacker forsøger sig adgang:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
IPtables kan sættes op således at det kan bruges til at blokke SSH angreb. Følgende reglsæt har jeg fundet på en blog af Andrew Pollock og det tillader max 3 connections pr. minut fra hvilken som helst host. Overskrides disse regler blokkes den host i et minut.
Typiske brute force angreb, når man kigger i sin log fil, er jo 100 forsøg med gennemsnitligt et sekund mellem hvert, så nedenstående tillader 3 og så lukkes der - 98% af tilfældene smutter hackeren eller ormen, det kan man vel egentlig også kalde hackeren for, igen. Læs mere her, omkring opsæt, og ip reglerne.