С большим удовольствием почитал сайт. Спасибо автору за его статьи - полезные и интересные.
Может подскажет кто по следующему вопросу. А то мечтаю решить эту проблему уже несколько лет, а всё никак.
FreeBSD 8.2, работает гейтом и сервером.
При текущей настройке правил ping из локальной сети проходит, а из Интернета пропинговать сервер не получается.
Если после правила
${fwcmd} add nat 123 all from any to any via ${ext_if}
добавить правило с разрешением для icmp, получится ровно наоборот.
Можно убрать ключ "deny_in" из параметров nat и добавить после правила
${fwcmd} add nat 123 all from any to any via ${ext_if}
правило
${fwcmd} add allow icmp from any to any
все ping'и проходят. Но мне кажется, что это несекьюрно.
Очевидно, надо как-то отличить пакет, идущий к серверу от того, который пришел в ответ на ping изнутри сети и который надо про-nat-ить. С TCP/UDP такое же получается, а с ICMP возможно?
И вообще любые комментарии и советы по правилам горячо приветствуются.
==== Begin rc.conf ====
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig_rl1="inet 111.1.111.11 netmask 255.255.255.128"
int_if="rl0" # Inside interface
ext_if="rl1" # Outside interface
firewall_enable="YES"
firewall_logging="YES"
firewall_script="/usr/local/etc/ipfw.rules"
firewall_coscripts="/usr/local/etc/ipfw.smtp-servers /usr/local/etc/ipfw.users"
gateway_enable="YES"
firewall_nat_enable="YES"
icmp_drop_redirect="YES" # Set to YES to ignore ICMP REDIRECT packets
icmp_log_redirect="YES" # Set to YES to log ICMP REDIRECT packets
==== End rc.conf ====
==== Begin ipfw.rules ====
### Suck in the configuration variables ############################
if [ -z "${source_rc_confs_defined}" ]; then
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
source_rc_confs
elif [ -r /etc/rc.conf ]; then
. /etc/rc.conf
fi
fi
### Set some variables #############################################
int_ip=`ifconfig ${int_if}|grep inet|awk '{print $2}'` # Inside ip
int_net=`ifconfig ${int_if}|grep inet|awk '{print $2 ":" $4}'` # Inside network and netmask
ext_ip=`ifconfig ${ext_if}|grep inet|awk '{print $2}'` # Outside ip
ext_net=`ifconfig ${ext_if}|grep inet|awk '{print $2 ":" $4}'` # Outside network and netmask
### Set quiet mode if requested ####################################
case ${firewall_quiet} in [Yy][Ee][Ss])
fwcmd="/sbin/ipfw -q"
;;
*)
fwcmd="/sbin/ipfw"
;;
esac
### Flush out the list before we begin #############################
${fwcmd} -f flush
### Rules ##########################################################
# Check dynamic rules
${fwcmd} add check-state
# Stop spoofing
${fwcmd} add deny log ip from ${int_net} to any in via ${ext_if}
${fwcmd} add deny log ip from ${ext_net} to any in via ${int_if}
# Rules for lo0
${fwcmd} add allow ip from any to any via lo0
# Rules for VPN
${fwcmd} add allow gre from any to any keep-state
# Rules for ppp0
#${fwcmd} add allow ip from any to any via ppp0 keep-state
# Allow all outgoing from server
${fwcmd} add allow ip from ${ext_ip} to any keep-state
${fwcmd} add allow ip from ${int_ip} to any keep-state
# Allow access to our services
${fwcmd} add allow ip from any to ${ext_ip} ftp\\-data,ftp,ssh,1022,smtp,smtps,domain,http,https,pop3,pop3s,ntp,imap,imaps,l2tp,pptp,xmpp\\-client,xmpp\\-server,5280,24554 keep-state
${fwcmd} add allow ip from any to ${int_ip} ftp\\-data,ftp,ssh,1022,smtp,smtps,domain,http,https,pop3,pop3s,ntp,imap,imaps,3306, xmpp\\-client,xmpp\\-server,5280,24554 keep-state
# Block some ICMP packets
${fwcmd} add deny log icmp from any to any icmptype 5,9,13,14,15,16,17
### Rules for gateway only #########################################
case ${firewall_nat_enable} in [Yy][Ee][Ss])
# Disallow users access to our proxy
${fwcmd} add deny ip from not table\(0\) to ${int_ip} 3128
# Disallow users access to our NAT service
${fwcmd} add deny ip from not table\(0\) to any in via ${int_if}
# Block access to foreign smtp
${fwcmd} add deny log ip from ${int_net} to not table\(1\) smtp
# Network Address Translation
${fwcmd} nat 123 config if ${ext_if} log deny_in same_ports
${fwcmd} add nat 123 all from any to any via ${ext_if}
# Rules for NATed packets
${fwcmd} add allow ip from ${ext_ip} to any
# Allow users to have Internet
${fwcmd} add allow ip from ${int_net} to any
${fwcmd} add allow ip from any to ${int_net}
esac
# Drop all connections w/out logging: on netbios ports
${fwcmd} add deny ip from any to any 135,137,138,139,microsoft\\-ds
# Drop all connections w/out logging: broadcast
${fwcmd} add deny ip from any to 255.255.255.255
# Drop any other packets & log it
${fwcmd} add deny log ip from any to any
==== End ipfw.rules ====