Hi, I have a firewall running on a Fedora Core 4 (STentz) with iptables. The Guy Who installed it left our company some months ago. I spent some years far from iptables, now i have to migrate this firewall to PF. THere are some 'special' features on this firewall, i need some documentation or help about implementing this features at new firewall ( PF ).
This is the iptables scripts: #!/bin/bash FW=/sbin/iptables LOAD=/sbin/modprobe #__________________________________________________________________________ # Carregando Modulo do IPTABLES . /etc/rc.d/init.d/prodata/fw_modulos # Carregando Variaveis . /etc/rc.d/init.d/prodata/fw_variaveis if [ $KERNEL = "sim" ] then . /etc/rc.d/init.d/prodata/fw_kernel fi #___________________________________________________________________________ # Cria politicas de LOGs #___________________________________________________________________________ if [ $LOGS = "sim" ] then . /etc/rc.d/init.d/prodata/fw_politicas fi Normal rules here #################################################################### EOF /etc/rc.d/init.d/prodata/fw_modulos #$LOAD nfnetlink $LOAD ip_conntrack $LOAD ip_conntrack_ftp #$LOAD ip_conntrack_pptp ## #$LOAD ip_conntrack_netlink ## #$LOAD ip_conntrack_tftp ## #$LOAD ip_nat $LOAD ip_nat_ftp $LOAD ip_gre #$LOAD ip_nat_pptp ## #$LOAD ip_nat_tftp ## $LOAD ip_queue ## $LOAD ip_tables $LOAD iptable_filter $LOAD iptable_nat $LOAD iptable_mangle $LOAD ipt_helper $LOAD ipt_LOG $LOAD ipt_limit $LOAD ipt_state #$LOAD ipt_layer7 ## $LOAD ipt_MASQUERADE $LOAD ipt_multiport #$LOAD ipt_string $LOAD ipt_tcpmss $LOAD ipt_TCPMSS ######################################################### EOF /etc/rc.d/init.d/prodata/fw_kernel #___________________________________________________________________________ # Protecao do KERNEL #___________________________________________________________________________ #Enable forwarding in kernel echo 1 > /proc/sys/net/ipv4/ip_forward #Disabling IP Spoofing attacks. if [ $IPSEC = "sim" ] then for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f done else for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 2 > $f done fi #Don't respond to broadcast pings (Smurf-Amplifier-Protection) echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts #Block source routing echo 1 > /proc/sys/net/ipv4/conf/all/accept_source_route #Kill timestamps echo 0 > /proc/sys/net/ipv4/tcp_timestamps #Enable SYN Cookies #echo 1 > /proc/sys/net/ipv4/tcp_syncookies #Kill redirects echo 1 > /proc/sys/net/ipv4/conf/all/accept_redirects #Enable bad error message protection echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses #Log martians (packets with impossible addresses) echo 1 > /proc/sys/net/ipv4/conf/all/log_martians #Set out local port range echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range #Reduce DoS'ing ability by reducing timeouts echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout echo 2400 > /proc/sys/net/ipv4/tcp_keepalive_time echo 0 > /proc/sys/net/ipv4/tcp_window_scaling echo 0 > /proc/sys/net/ipv4/tcp_sack ################################################################### EOF /etc/rc.d/init.d/prodata/fw_politicas #___________________________________________________________________________ # LOG - Politica de Negacao de frames #___________________________________________________________________________ LOGLIMIT="2/s" LOGLIMITBURST="10" # Overall Limit for TCP-SYN-Flood detection TCPSYNLIMIT="5/s" # Burst Limit for TCP-SYN-Flood detection TCPSYNLIMITBURST="10" # Overall Limit for Ping-Flood-Detection PINGLIMIT="5/s" # Burst Limit for Ping-Flood-Detection PINGLIMITBURST="1" $FW -N LOG_DROP $FW -A LOG_DROP -p tcp -m limit --limit $LOGLIMIT --limit-burst $LOGLIMITBURST -j LOG --log-prefix "fp=TCP:1 a=DROP " $FW -A LOG_DROP -p udp -m limit --limit $LOGLIMIT --limit-burst $LOGLIMITBURST -j LOG --log-prefix "fp=UDP:2 a=DROP " $FW -A LOG_DROP -p icmp -m limit --limit $LOGLIMIT --limit-burst $LOGLIMITBURST -j LOG --log-prefix "fp=ICMP:3 a=DROP " $FW -A LOG_DROP -p 47 -m limit --limit $LOGLIMIT --limit-burst $LOGLIMITBURST -j LOG --log-prefix "fp=VPN:4 a=DROP " $FW -A LOG_DROP -f -m limit --limit $LOGLIMIT --limit-burst $LOGLIMITBURST -j LOG --log-prefix "fp=FRAGMENT:5 a=DROP " $FW -A LOG_DROP -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "fp=NEW nao SYN: " $FW -A LOG_DROP -j DROP #___________________________________________________________________________ # LOG - Politica de Liberacao de frames #___________________________________________________________________________ $FW -N LOG_OK $FW -A LOG_OK -m limit --limit $LOGLIMIT --limit-burst $LOGLIMITBURST -j LOG --log-level 3 --log-prefix "fp=LOG_OK:3 a=ACCEPT " $FW -A LOG_OK -j ACCEPT #___________________________________________________________________________ # LOG - Politica de Negacao TCP-SYN-Flood #___________________________________________________________________________ $FW -N LSYNFLOOD $FW -A LSYNFLOOD -m limit --limit $LOGLIMIT --limit-burst $LOGLIMITBURST -j LOG --log-prefix "fp=SYNFLOOD:1 a=DROP " $FW -A LSYNFLOOD -j DROP #___________________________________________________________________________ # TCP - Politica para Aceitar conexoes TCP verificando SYN-Floods #___________________________________________________________________________ $FW -N TCPACCEPT $FW -A TCPACCEPT -p tcp --syn -m limit --limit $TCPSYNLIMIT --limit-burst $TCPSYNLIMITBURST -j ACCEPT $FW -A TCPACCEPT -p tcp -m state --state ESTABLISHED,RELATED --syn -m limit --limit $TCPSYNLIMIT --limit-burst $TCPSYNLIMITBURST -j ACCEPT $FW -A TCPACCEPT -p tcp --syn -j LSYNFLOOD $FW -A TCPACCEPT -p tcp ! --syn -j ACCEPT #___________________________________________________________________________ # SMB - Rejeita frames SMB (Netbios) #___________________________________________________________________________ $FW -N SMB $FW -A SMB -p tcp --dport 137 -j DROP $FW -A SMB -p tcp --dport 138 -j DROP $FW -A SMB -p tcp --dport 139 -j DROP $FW -A SMB -p tcp --dport 445 -j DROP $FW -A SMB -p udp --dport 137 -j DROP $FW -A SMB -p udp --dport 138 -j DROP $FW -A SMB -p udp --dport 139 -j DROP $FW -A SMB -p udp --dport 445 -j DROP $FW -A SMB -p tcp --sport 137 -j DROP $FW -A SMB -p tcp --sport 138 -j DROP $FW -A SMB -p tcp --sport 139 -j DROP $FW -A SMB -p tcp --sport 445 -j DROP $FW -A SMB -p udp --sport 137 -j DROP $FW -A SMB -p udp --sport 138 -j DROP $FW -A SMB -p udp --sport 139 -j DROP $FW -A SMB -p udp --sport 445 -j DROP #___________________________________________________________________________ # ICMP/TRACEROUTE (IN) #___________________________________________________________________________ #Logging of possible Ping-Floods $FW -N LPINGFLOOD $FW -A LPINGFLOOD -m limit --limit $LOGLIMIT --limit-burst $LOGLIMITBURST -j LOG --log-prefix "fp=PINGFLOOD:1 a=DROP " $FW -A LPINGFLOOD -j DROP #___________________________________________________________________________ $FW -N ICMPINBOUND #Ping Flood protection. Accept $PINGLIMIT echo-requests/sec, rest will be logged/dropped $FW -A ICMPINBOUND -p icmp --icmp-type echo-request -m limit --limit $PINGLIMIT --limit-burst $PINGLIMITBURST -j ACCEPT $FW -A ICMPINBOUND -p icmp --icmp-type echo-request -j LPINGFLOOD #Block ICMP-Redirects (Should already be catched by sysctl-options, if enabled) $FW -A ICMPINBOUND -p icmp --icmp-type redirect -j LOG_DROP #Block ICMP-Timestamp (Should already be catched by sysctl-options, if enabled) $FW -A ICMPINBOUND -p icmp --icmp-type timestamp-request -j LOG_DROP $FW -A ICMPINBOUND -p icmp --icmp-type timestamp-reply -j LOG_DROP #Block ICMP-address-mask (can help to prevent OS-fingerprinting) $FW -A ICMPINBOUND -p icmp --icmp-type address-mask-request -j LOG_DROP $FW -A ICMPINBOUND -p icmp --icmp-type address-mask-reply -j LOG_DROP #Allow all other ICMP in $FW -A ICMPINBOUND -p icmp -j ACCEPT #___________________________________________________________________________ # ICMP/TRACEROUTE (OUT) #___________________________________________________________________________ $FW -N ICMPOUTBOUND #Block ICMP-Redirects (Should already be catched by sysctl-options, if enabled) $FW -A ICMPOUTBOUND -p icmp --icmp-type redirect -j LOG_DROP #Block ICMP-TTL-Expired #MS Traceroute (MS uses ICMP instead of UDp for tracert) $FW -A ICMPOUTBOUND -p icmp --icmp-type ttl-zero-during-transit -j LOG_DROP $FW -A ICMPOUTBOUND -p icmp --icmp-type ttl-zero-during-reassembly -j LOG_DROP #Block ICMP-Parameter-Problem $FW -A ICMPOUTBOUND -p icmp --icmp-type parameter-problem -j LOG_DROP #Block ICMP-Timestamp (Should already be catched by sysctl-options, if enabled) $FW -A ICMPOUTBOUND -p icmp --icmp-type timestamp-request -j LOG_DROP $FW -A ICMPOUTBOUND -p icmp --icmp-type timestamp-reply -j LOG_DROP #Block ICMP-address-mask (can help to prevent OS-fingerprinting) $FW -A ICMPOUTBOUND -p icmp --icmp-type address-mask-request -j LOG_DROP $FW -A ICMPOUTBOUND -p icmp --icmp-type address-mask-reply -j LOG_DROP ##Accept all other ICMP going out $FW -A ICMPOUTBOUND -p icmp -j ACCEPT #___________________________________________________________________________ # PING Server - Libera ICMP #___________________________________________________________________________ $FW -N icmp_packets $FW -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT $FW -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT #___________________________________________________________________________ # PING Client - Libera ICMP #___________________________________________________________________________ $FW -N icmp_ping $FW -A icmp_ping -p ICMP --icmp-type 8 -j ACCEPT $FW -A icmp_ping -p ICMP --icmp-type 11 -j ACCEPT