FreeBSD操作系统本身带有二种内置的IP信息包检查机制:ipfw和ipfilter。在创建决定允许哪些信息包进入系统、哪些信息包会被拒之系统门外的规则集方面,二种机制各有自己独特的语法。而在这里我们将使用ipfw配置FreeBSD系统的防火墙。
IPFW本身是FreeBSD内置的,要使用IPFW设置防火墙需要重新编译FreeBSD内核。注意,因为在编译后IPFW默认拒绝所有网络服务,包括对系统本身都会拒绝,所以在配置过程中一定要小心谨慎。
1.对IPFW的一些基本参数进行配置:
2.编译系统内核:
3.加入系统启动项
重启之后,你就可以用SSH登录你的服务器了,之后你可以在/etc/ipfw.conf中添加过滤规则来防止入侵了。
4.加入规则
下面的规则只是一个例子。
5.常用命令
6.ipfw生效
此文章有ArthurXF倾情奉献,谢谢支持!
现在ArthurXF本人正在搞PHP等技术培训,如果想学习的人可以跟我联系。另外培训的招生简章在这个网址,想了解的可以去看看。加我QQ:29011218交流也可。
PHP培训招生简章
IPFW本身是FreeBSD内置的,要使用IPFW设置防火墙需要重新编译FreeBSD内核。注意,因为在编译后IPFW默认拒绝所有网络服务,包括对系统本身都会拒绝,所以在配置过程中一定要小心谨慎。
1.对IPFW的一些基本参数进行配置:
引用
#cd /sys/i386/conf
//如果没有这个目录,说明你的系统没有安装Ports服务,要记得装上。
#cp GENERIC ./ArthurXF_IPFW
用 vi 打开ArthurXF_IPFW文件,在文件未尾加入以下个行
options IPFIREWALL //通知操作系统的内核检查每个IP数据包,将它们与规则集进行比较
options IPFIREWALL_FORWARD
options IPDIVERT //启用由ipfw divert使用的转向IP套接字。这一选项需要与natd联合使用。
options IPFIREWALL_VERBOSE //启用通过Syslogd记录日志;如果没有指定这个选项,即使你在过滤规则中指定了记录包,也不会真的记录它们。
options IPFIREWALL_VERBOSE_LIMIT=10 //限制通过Syslogd记录的每项包规则的记录条数。如果你受到了大量的攻击,想记录防火墙的活动,但又不想由于Syslog洪水一般的记录将你淹没,那么这个选项将会很有用。当使用了这条规则,当规则链中的某一项达到限制数值时,它所对应的日志将不再记录下来。
options IPSTEALTH //启动支持秘密转发的代码,这一选项在使防火墙不被traceroute和类似工具发现时很有用。
options IPFIREWALL_DEFAULT_TO_ACCEPT //注意,关键地方了,本句把默认的规则动作从“deny”改成“allow”了,作用是在默认状态下IPFW将会接受任何的数据。
options ACCEPT_FILTER_DATA
options ACCEPT_FILTER_HTTP //接受过滤器中的静态连接
options ICMP_BANDLIM //ICMP_BANDLIM根据带宽限制产生icmp错误。一般情况下我们需要这个选项,它有助于你的系统免受D.O.S.攻击。
另外提供一些优化参数,可以不加的,仅供参考
options PQ_HUGECACHE //为1024k二级缓存的CPU提供支持
options PQ_LARGECACHE //为512k二级缓存的CPU提供支持
options PQ_MEDIUMCACHE //为256k二级缓存的CPU提供支持
options PQ_SMALLCACHE //为128k二级缓存的CPU提供支持
options CPU_ATHLON_SSE_HACK
options CPU_ENABLE_SSE //为Athlon系列CPU提供SSE支持
options CPU_SUSP_HLT //打开CPU空闲节能。
options CPU_UPGRADE_HW_CACHE
options CPU_WT_ALLOC
options NO_MEMORY_HOLE
上面有些参数,不是每个系统都会通过编译的,如果哪条出错了,就把哪条删除即可。
输入完成后,保存,并退出。
//如果没有这个目录,说明你的系统没有安装Ports服务,要记得装上。
#cp GENERIC ./ArthurXF_IPFW
用 vi 打开ArthurXF_IPFW文件,在文件未尾加入以下个行
options IPFIREWALL //通知操作系统的内核检查每个IP数据包,将它们与规则集进行比较
options IPFIREWALL_FORWARD
options IPDIVERT //启用由ipfw divert使用的转向IP套接字。这一选项需要与natd联合使用。
options IPFIREWALL_VERBOSE //启用通过Syslogd记录日志;如果没有指定这个选项,即使你在过滤规则中指定了记录包,也不会真的记录它们。
options IPFIREWALL_VERBOSE_LIMIT=10 //限制通过Syslogd记录的每项包规则的记录条数。如果你受到了大量的攻击,想记录防火墙的活动,但又不想由于Syslog洪水一般的记录将你淹没,那么这个选项将会很有用。当使用了这条规则,当规则链中的某一项达到限制数值时,它所对应的日志将不再记录下来。
options IPSTEALTH //启动支持秘密转发的代码,这一选项在使防火墙不被traceroute和类似工具发现时很有用。
options IPFIREWALL_DEFAULT_TO_ACCEPT //注意,关键地方了,本句把默认的规则动作从“deny”改成“allow”了,作用是在默认状态下IPFW将会接受任何的数据。
options ACCEPT_FILTER_DATA
options ACCEPT_FILTER_HTTP //接受过滤器中的静态连接
options ICMP_BANDLIM //ICMP_BANDLIM根据带宽限制产生icmp错误。一般情况下我们需要这个选项,它有助于你的系统免受D.O.S.攻击。
另外提供一些优化参数,可以不加的,仅供参考
options PQ_HUGECACHE //为1024k二级缓存的CPU提供支持
options PQ_LARGECACHE //为512k二级缓存的CPU提供支持
options PQ_MEDIUMCACHE //为256k二级缓存的CPU提供支持
options PQ_SMALLCACHE //为128k二级缓存的CPU提供支持
options CPU_ATHLON_SSE_HACK
options CPU_ENABLE_SSE //为Athlon系列CPU提供SSE支持
options CPU_SUSP_HLT //打开CPU空闲节能。
options CPU_UPGRADE_HW_CACHE
options CPU_WT_ALLOC
options NO_MEMORY_HOLE
上面有些参数,不是每个系统都会通过编译的,如果哪条出错了,就把哪条删除即可。
输入完成后,保存,并退出。
2.编译系统内核:
引用
#cd /usr/src
#make kernel KERNCONF=ArthurXF_IPFW
//开始编译内核。
#make kernel KERNCONF=ArthurXF_IPFW
//开始编译内核。
3.加入系统启动项
引用
#vi /etc/rc.conf
加入如下参数:
firewall_enable="YES"
//激活Firewall防火墙
firewall_script="/etc/rc.firewall"
//Firewall防火墙的默认脚本
firewall_type="/etc/ipfw.conf"
//Firewall 自定义脚本
firewall_quiet="NO"
//启用脚本时是否显示规则信息;假如你不再修改防火墙脚本,那么可以把这里设成“YES“。
firewall_logging_enable="YES"
#vi /etc/syslog.conf 文件,在文件最后加入:
!ipfw
*.* /var/log/ipfw.log
//这行的作用是将IPFW的日志写到/var/log/ipfw.log/文件里。你可以为日志文件指定其它路径。
最后,重启服务器。
加入如下参数:
firewall_enable="YES"
//激活Firewall防火墙
firewall_script="/etc/rc.firewall"
//Firewall防火墙的默认脚本
firewall_type="/etc/ipfw.conf"
//Firewall 自定义脚本
firewall_quiet="NO"
//启用脚本时是否显示规则信息;假如你不再修改防火墙脚本,那么可以把这里设成“YES“。
firewall_logging_enable="YES"
#vi /etc/syslog.conf 文件,在文件最后加入:
!ipfw
*.* /var/log/ipfw.log
//这行的作用是将IPFW的日志写到/var/log/ipfw.log/文件里。你可以为日志文件指定其它路径。
最后,重启服务器。
重启之后,你就可以用SSH登录你的服务器了,之后你可以在/etc/ipfw.conf中添加过滤规则来防止入侵了。
4.加入规则
下面的规则只是一个例子。
引用
vi /etc/ipfw.conf
将下面的内容复制进去
#!/bin/sh
fwcmd="/sbin/ipfw"
#${fwcmd} -f flush
######### TCP ##########
${fwcmd} add 001 deny tcp from any to any in tcpflags syn,fin
######### DNS ##########
${fwcmd} add 100 pass all from any to any via lo0
${fwcmd} add 110 deny all from any to 127.0.0.0/8
${fwcmd} add 120 deny ip from 127.0.0.0/8 to any
${fwcmd} add 130 pass all from me to me
${fwcmd} add 1000 allow all from me to 202.96.209.5
${fwcmd} add 1000 allow all from me to 202.96.209.133
${fwcmd} add 1000 allow all from 202.96.209.5 to me
${fwcmd} add 1000 allow all from 202.96.209.133 to me
######### www ssh ftp mail ##########
${fwcmd} add 500 check-state
${fwcmd} add 10000 pass tcp from any to me 80 in setup keep-state
${fwcmd} add 10000 pass tcp from any to me 443 in setup keep-state
${fwcmd} add 10002 allow tcp from any to me 22 in setup keep-state
${fwcmd} add 10003 pass all from any to me 21 in setup keep-state
${fwcmd} add 10004 pass all from me to any 21 out setup keep-state
${fwcmd} add 10005 pass tcp from any to me 25 in setup keep-state
${fwcmd} add 10006 pass tcp from me to any 25 out setup keep-state
################################
${fwcmd} add 20000 allow all from any to any 53 setup keep-state
${fwcmd} add 20001 allow tcp from me to any out setup keep-state
${fwcmd} add 20002 allow all from me to any out setup keep-state
${fwcmd} add 20003 allow all from any to me in setup keep-state
######### ICMP #################
${fwcmd} add 30000 allow icmp from any to any icmptypes 3
${fwcmd} add 30001 allow icmp from any to any icmptypes 4
${fwcmd} add 30002 allow icmp from any to any icmptypes 8 out
${fwcmd} add 30003 allow icmp from any to any icmptypes 0 in
${fwcmd} add 30004 allow icmp from any to any icmptypes 11 in
${fwcmd} add 50000 deny all from any to any
中间那些80,443等都是服务的端口号,可以根据需要修改的。
将下面的内容复制进去
#!/bin/sh
fwcmd="/sbin/ipfw"
#${fwcmd} -f flush
######### TCP ##########
${fwcmd} add 001 deny tcp from any to any in tcpflags syn,fin
######### DNS ##########
${fwcmd} add 100 pass all from any to any via lo0
${fwcmd} add 110 deny all from any to 127.0.0.0/8
${fwcmd} add 120 deny ip from 127.0.0.0/8 to any
${fwcmd} add 130 pass all from me to me
${fwcmd} add 1000 allow all from me to 202.96.209.5
${fwcmd} add 1000 allow all from me to 202.96.209.133
${fwcmd} add 1000 allow all from 202.96.209.5 to me
${fwcmd} add 1000 allow all from 202.96.209.133 to me
######### www ssh ftp mail ##########
${fwcmd} add 500 check-state
${fwcmd} add 10000 pass tcp from any to me 80 in setup keep-state
${fwcmd} add 10000 pass tcp from any to me 443 in setup keep-state
${fwcmd} add 10002 allow tcp from any to me 22 in setup keep-state
${fwcmd} add 10003 pass all from any to me 21 in setup keep-state
${fwcmd} add 10004 pass all from me to any 21 out setup keep-state
${fwcmd} add 10005 pass tcp from any to me 25 in setup keep-state
${fwcmd} add 10006 pass tcp from me to any 25 out setup keep-state
################################
${fwcmd} add 20000 allow all from any to any 53 setup keep-state
${fwcmd} add 20001 allow tcp from me to any out setup keep-state
${fwcmd} add 20002 allow all from me to any out setup keep-state
${fwcmd} add 20003 allow all from any to me in setup keep-state
######### ICMP #################
${fwcmd} add 30000 allow icmp from any to any icmptypes 3
${fwcmd} add 30001 allow icmp from any to any icmptypes 4
${fwcmd} add 30002 allow icmp from any to any icmptypes 8 out
${fwcmd} add 30003 allow icmp from any to any icmptypes 0 in
${fwcmd} add 30004 allow icmp from any to any icmptypes 11 in
${fwcmd} add 50000 deny all from any to any
中间那些80,443等都是服务的端口号,可以根据需要修改的。
5.常用命令
引用
加载规则 sh /etc/ipfw.conf
显示规则 ipfw show
显示规则 ipfw show
6.ipfw生效
引用
要让ipfw自启动生效,就需要修改一下。
#vi /etc/rc.conf
修改为
firewall_script="/etc/ipfw.conf"
firewall_quiet="YES" //安静模式
重起就好了。
#vi /etc/rc.conf
修改为
firewall_script="/etc/ipfw.conf"
firewall_quiet="YES" //安静模式
重起就好了。
此文章有ArthurXF倾情奉献,谢谢支持!
现在ArthurXF本人正在搞PHP等技术培训,如果想学习的人可以跟我联系。另外培训的招生简章在这个网址,想了解的可以去看看。加我QQ:29011218交流也可。
PHP培训招生简章