Próbowałem stworzyć podstawowy skrypt iptables serwera, który będzie działał w przypadku większości witryn z uruchomionym podstawowym serwerem WWW za pomocą HTTP (S) i SSH (porty 80, 443 i 22). W końcu większość VPS potrzebuje tylko tych początkowych reguł portów i może w razie potrzeby dodać porty poczty lub gier.
Do tej pory mam następujący zestaw reguł i zastanawiałem się, czy ktoś wie o lepszym skrypcie lub ulepszeniach, które można by dodać.
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections (only 4 attempts by an IP every 3 minutes, drop the rest)
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
iptables jest jedną z najważniejszych części zabezpieczania twojego urządzenia (patrz także fail2ban), a jednak wiele osób takich jak ja ma problemy ze zrozumieniem wszystkiego, co wymaga bezpiecznej podstawowej zapory ogniowej dla naszych serwerów.
Jaki jest najbezpieczniejszy sposób otwarcia tylko podstawowych portów potrzebnych do serwera WWW?
Aktualizacja: cyberciti.biz ma kolejny skrypt iptables, który wygląda całkiem nieźle.
Ponadto zamiast używać Denyhosts lub fail2ban, możesz użyć samego iptables do blokowania złych, powtarzających się prób SSH .
modprobe
nie zostanie zainstalowany (lub wystąpi inny błąd przed otwarciem portu 22), zablokujesz się na serwerze.