aelius Posted January 11, 2012 Report Posted January 11, 2012 (edited) Mai jos puteti vedea un firewall minimal pentru Linux, care face urmatoarele lucruri:- Seteaza politica default cu drop (nu accepta niciun pachet, atat pe INPUT, FORWARD cat si pe OUTPUT).- Blocheaza pachetele TCP cu flag-uri invalide.- Blocheaza OS Fingerprint (detectarea sistemului de operare cu nmap sau alte tool-uri pentru os-fingerprint)- Permite icmp echo requests (ping) catre host.- Permite pachetele UDP venite de la nameserverele setate in "/etc/resolv.conf" (Source port 53)- Accepta conexiuni ssh doar de la surse bine stabilite (exemplu: de la office / home) . In acest fel suntem siguri ca daca ne stie cineva parola de la un utilizator, nu va putea intra. Este o buna masura de precautie impotriva scanning-ului.- Permite rularea serviciilor pe porturile standarde pentru: ftp, smtp, web, pop3 si https.Alte note:- EXTDEV reprezinta interfata externa de retea.- In sectiunea SECSHELL se pun adresele IP de unde dorim sa avem acces SSH.- NU folositi comanda "iptables -F" sau "iptables --flush"; politica default este DROP! (daca doriti sa scoateti firewall-ul din functiune, dati stop la el)- In sectiunea SERVICES sunt definite porturile pentru servicii: ftp, smtp, web, pop3 si https.- In acest exemplu minimal, nu exista reguli pe FORWARD. Daca serverul este folosit ca router, nu va functiona. Este necesar sa adaugati reguli pentru forward/nat- Nu folositi acest script inainte de a va da seama ce face exact, in special, nu folositi acest script pe servere la care nu aveti acces fizic, daca nu stiti ce face.- Scriptul se executa impreuna cu un argument: start, stop sau status.#!/bin/sh# Descriere: Firewall minimal pentru linux.## -- ConstanteEXTDEV="eth0"SECSHELL="4.2.2.2 8.8.8.8 5.5.5.5"SERVICES="20 21 25 80 110 443"firewall_start () { echo "apply rules ...."## -- Sterge orice regula prezentaiptables -Fiptables -Ziptables -Xiptables -F -t natiptables -Z -t natiptables -Z -t natiptables -F -t mangleiptables -Z -t mangleiptables -X -t mangle## -- Politica defaultiptables --policy INPUT DROPiptables --policy OUTPUT DROPiptables --policy FORWARD DROP## -- Permite trafic nelimitat pe localhostiptables -I INPUT -d 127.0.0.0/8 -j ACCEPTiptables -I OUTPUT -s 127.0.0.0/8 -j ACCEPT## -- Accepta orice conexiune care este stabilizata in momentul initializarii firewall-ului.iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT## -- Permite orice pachet catre OUT.iptables -I OUTPUT -p all -j ACCEPT## -- Accepta sursele definite in SECSHELL pentru a se conecta la serviciul SSH.for i in $SECSHELL;do iptables -I INPUT -p tcp -s $i --dport 22 -j ACCEPT;done## -- Accepta orice icmp echo (ping)iptables -I INPUT -p icmp --icmp-type 8 -j ACCEPT## -- Blocheaza pachetele invalideiptables -I INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROPiptables -I INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROPiptables -I INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROPiptables -I INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROPiptables -I INPUT -p tcp --tcp-flags SYN,ACK NONE -j DROPiptables -I INPUT -p tcp --tcp-flags RST,FIN RST,FIN -j DROPiptables -I INPUT -p tcp --tcp-flags SYN,URG SYN,URG -j DROPiptables -I INPUT -p tcp --tcp-flags ALL SYN,PSH -j DROPiptables -I INPUT -p tcp --tcp-flags ALL SYN,ACK,PSH -j DROP## -- Accepta orice port listat in SERVICES (pe tcp)for i in $SERVICES;do iptables -I INPUT -p tcp --dport $i -j ACCEPT;done## -- Accepta orice pachet de la DNS-uri (port sursa 53) - doar cele listate in "/etc/resolv.conf"cat /etc/resolv.conf | \awk '/^nameserver/ {print $2}' | \xargs -n1 iptables -I INPUT -p udp --sport 53 -j ACCEPT -secho "done, fw active." return 0}firewall_status () { echo "fw status: " iptables -L -n -vreturn 0}firewall_stop () { echo "ok. fw stop, clearing rules."iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -Z iptables -X iptables -F -t nat iptables -Z -t nat iptables -Z -t nat iptables -F -t mangle iptables -Z -t mangle iptables -X -t manglereturn 0}case "$1" in start) firewall_start ;; stop) firewall_stop ;; status) firewall_status ;; *) echo "Folosire: $0 {start|status|stop}" exit 1esacexit 0-------------------------------Daca doriti sa puneti tutorialul pe un alt site, va rog sa specificati sursa: https://rstcenter.com/forum/46641-firewall-minimal-pentru-linux.rst"Avem a multumi" Edited January 11, 2012 by aelius formatare text 1 Quote