################################################################################ # Variablen, die in den Regeln per ${varname} genutzt werden koennen. Sollten # immer IP-Adressen bzw. NIC-names sein, ansonsten erzeigt der ipfilter beim # Start evtl. falsche Regeln (z.B. 0.0.0.0 == any, wenn FQDN nicht aufloesbar). ################################################################################ VNIC0='hostname0'; DONTROUTE='pool/200'; ADMINHOSTS='pool/1'; MAIL_SERVER='pool/25'; DNS_SERVER='pool/53'; HTTP_SERVER='pool/80'; NFS_SERVER='pool/2049'; #BACKUP_SERVER='pool/13782'; #FRIENDLY_CLIENTS='pool/2'; #HTTP_CLIENTS='pool/10080'; #NFS_CLIENTS='pool/12049'; #SNMP='pool/161'; #PRINTER='pool/9100'; #SMB_SERVER='pool/137'; #LDAP_SERVER='pool/389'; #SVN_SERVER='pool/3690'; #HG_SERVER='pool/8000'; #GIT_SERVER='pool/9418'; #FTP_SERVER='pool/21'; #NNTP_SERVER='pool/119'; #VNC_SERVER='pool/5901'; #RDP_SERVER='pool/3389'; #AI_SERVER='pool/5555'; #AI_CLIENTS='pool/15555'; ################################################################################ # GLOBALE Regeln (implizit Gruppe 0 -> werden als @0:n gelogged). # # # INFO: Wenn anstelle einer Adresse der NIC name angegeben wird (z.B. bge0), # # ersetzt ipfilter beim Parsen den Namen mit der ersten nicht-link-lokal IP # # des NIC, was bei 'on NIC0[,NIC1]' oder '{in-via|out-via} NIC2[,NIC3]' # # angegeben ist (first match wins in der angegebenen Reihenfolge) und setzt # # fr->fr_ipf->fri_sifpidx = dynamic = entsprechende NIC nummer statt -1 sowie # # fr->fr_satype = ifpflag = FRI_DYNAMIC statt FRI_NORMAL|FRI_LOOKUP|... # # Existiert kein solches NIC, wird stattdessen ein hostname lookup gemacht und # # diese Adresse (0.0.0.0/0 - d.h. any - falls nicht auflösbar) verwendet! # # MATCH = (ip2check & ruleIPMask == ruleIPAddr) # ################################################################################ #------------------------------------------------------------------------------- # loopback Interface: alles rein und rauslassen. # ACHTUNG: # Per default wird in Solaris loopback traffic und traffic zwischen SHARED-IP # Zonen untereinander sowie globaler Zone NICHT gefiltert! Soll es das tun, muß # die unten stehende 'set' Direktive aktiviert werden, die immer als erstes in # der ipf.conf auftauchen muß (d.h. vor allen Regeln)! #------------------------------------------------------------------------------- #set intercept_loopback true; pass in quick on lo0 all pass out quick on lo0 all #------------------------------------------------------------------------------- # illegale/kaputte Pakete blocken #------------------------------------------------------------------------------- block in quick all with short block in quick all with ipopts block in quick all with lowttl # Ebenso Zeux, was von eigentlich "ungerouteten" aka private networks kommt # Falls das Interface zum 'nem private network gehört, dann entsprechendes # network aus dem ip pool rausnehmen. block in quick on ${VNIC0} from ${DONTROUTE} #------------------------------------------------------------------------------- # SSH #------------------------------------------------------------------------------- pass in quick proto tcp from ${ADMINHOSTS} to port = ssh flags S keep state pass out quick proto tcp from port = ssh flags S keep state #------------------------------------------------------------------------------- # ICMP: die wichtigsten Sachen wie ping und traceroute rein und raus erlauben. #------------------------------------------------------------------------------- # ping: echo request (8/0) # mit keep state lassen wir das echo reply (0/0) raus/rein pass in quick proto icmp all icmp-type echo keep state pass out quick proto icmp all icmp-type echo keep state # traceroute -I (ICMP-Variante): wie ping plus time exceeded (11/0) # mit keep state lassen wir das destination unreachable (3/3) raus/rein pass in quick proto icmp all icmp-type (timex unreach) keep state pass out quick proto icmp all icmp-type (timex unreach) keep state #----------------------------------------------------------------------------- # Alles, was nicht an die IP von ${VNIC0} geht bzw. von dort kommt ignorieren. # ACHTUNG: D.h auch broad- und multicasts! Falls irgendwelche davon durch- # gelassen werden sollen, VOR diesen Regel einfügen! #----------------------------------------------------------------------------- block in quick on ${VNIC0} from any to !${VNIC0} block out quick on ${VNIC0} from !${VNIC0} # DNS client pass out quick proto tcp/udp to ${DNS_SERVER} port = domain keep state # NFSv4 (inkl. Oracle Update Service) #pass in quick proto tcp from ${NFS_CLIENTS} to port = nfsd flags S/SA keep state pass out quick proto tcp to ${NFS_SERVER} port = nfsd flags S/SA keep state # Oracle Update Service via HTTP (siehe pkg publisher) pass out quick proto tcp to ${HTTP_SERVER} port = (http https) flags S keep state # Mail rauslassen pass out quick proto tcp to ${MAIL_SERVER} port = smtp flags S keep state # Veritas NetBackup client connections #pass in quick proto tcp from ${BACKUP_SERVER} to port = bpcd flags S keep state # iperf #pass out quick proto tcp to port = 5001 flags S keep state #pass out quick proto udp to port = 5001 keep state #pass in quick proto tcp from ${FRIENDLY_CLIENTS} to port = 5001 flags S keep state #pass in quick proto udp from ${FRIENDLY_CLIENTS} to port = 5001 keep state # damit die ssh Verbindung nicht zusammenbricht, wenn der ipfilter neu gestartet # wird (is blöd, wenn man gerade was editiert). Sollte sicher sein, solange auch # ein sshd am entsprechenden Port unserseits lauscht. pass in quick proto tcp from ${ADMINHOSTS} to port = ssh flags A/ARFS pass out quick proto tcp from port = ssh flags A/ARFS # NFS blockt auch, wenn der ipfilter neu gestartet wird, falls wir folgende # Pakete nicht durchlassen pass in quick proto tcp from ${NFS_SERVER} port = nfs flags A/ARFS pass in quick proto tcp from ${NFS_SERVER} port = nfs flags R/ARFS pass in quick proto tcp from ${NFS_SERVER} port = nfs flags AF/ARFS pass out quick proto tcp to ${NFS_SERVER} port = nfs flags A/ARFS pass out quick proto tcp to ${NFS_SERVER} port = nfs flags R/ARFS pass out quick proto tcp to ${NFS_SERVER} port = nfs flags AF/ARFS #------------------------------------------------------------------------------- # Alles andere blocken. Bei TCP/UDP antworten wir mit einem Reset bzw. port # unreachable Paket, was das ganze für externe aussehen läßt, als ob kein # firewall aktiv ist, aber hier am entsprechenden Port nichts lauscht/aktiv ist. #------------------------------------------------------------------------------- block return-rst in quick log proto tcp all block return-icmp-as-dest(port-unr) in quick log proto udp all block in quick log all block return-rst out quick log proto tcp all block return-icmp-as-dest(port-unr) out quick log proto udp all block out quick log all # vim:ts=4 filetype=ipfilter