学习了基础知识后 ,下面开始正式的部署:
本机安装系统时关闭了防火墙,查看iptables 显示如下:
[root@client ~]# iptables -L -nv
Chain INPUT (policy ACCEPT 5368 packets, 476K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6426 packets, 501K bytes)
pkts bytes target prot opt in out source destination
如果你想配置属于自己的防火墙,那就清除现在filter的所有规则:
[root@client ~]# iptables -F 清除filter中的所有规则链的规则
[root@client ~]# iptables -X 清除filter中用户自定链中的规则
[root@client ~]# iptables -L -nv
Chain INPUT (policy ACCEPT 5490 packets, 486K bytes)
pkts bytes target prot opt in out source destination
此时,fileter表中的所有规则都没有了。想永久保存设置还需进行:
[root@client ~]# /etc/rc.d/init.d/iptables save 保存iptables配置
将当前规则保存到 /etc/sysconfig/iptables: [确定]
[root@client ~]# service iptables restart 重启服务
清除防火墙规则: [确定]
把 chains 设置为 ACCEPT 策略:nat filter [确定]
正在卸载 Iiptables 模块: [确定]
应用 iptables 防火墙规则: [确定]
载入额外 iptables 模块:ip_conntrack_netbios_ns [确定]
在正式设定iptables前要先把所有的从这台机器出去的OUTPUT都放了,没必要把每条链都DROP掉,需要控制的是进去的链,也就是INPUT链。INPUT链先设置为ACCEPT,把可以远程的机器的规则添加后,再DROP掉,否则,这里DROP,远程的22号端口立即就会中断。
[root@client ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT 开启22端口方便客户机SSH
[root@client ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT 开启web端口(本机是web服务器)
[root@client ~]# iptables -P INPUT DROP
[root@client ~]# iptables -P OUTPUT ACCEPT
[root@client ~]# iptables -P FORWARD DROP
新的问题出现了,WEB上所有从数据库读取的数据都显示不了,如果把INPUT ACCEPT就一切正常,猜想是WEB和数据库服务器的连接还需要增加ACCEPT端口。数据库服务器安装的是ORACLE数据库。一想到ORACLE数据库,就会想到1521端口,但是1521端口是数据库服务器上开放的服务端口,返回端口又是什么呢?查询ORACLE资料后才明白,network listener 只起一个中介作用,当客户连接它时,它根据配置寻找到相应的数据库实例进程,然后spawned一个新的数据库连接,这个连接端口由network listener传递给客户机,此后客户机就不再和打交道了,即使listener停止了工作。
这个新的连接端口是随机的,不可预知的。对于WEB服务器而言,数据库服务器是信任的机器,索性就把数据库服务器的IP全开吧。
[root@localhost ~]# iptables -A INPUT -s 192.168.0.3 -p tcp -j ACCEPT
现在测试,一切正常,打开WEB发现已经能够读取数据。
到此提供服务器的端口已经设置完毕了,还需要增加一些配置,比如允许ICMP等。
[root@localhost ~]# iptables -A INPUT -p icmp -j ACCEPT //允许ICMP
[root@localhost ~]# iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT //设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包
[root@localhost ~]# iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT //处理IP碎片数量,防止攻击,允许每秒100个
[root@localhost ~]# iptables -A INPUT -i lo -p all -j ACCEPT //允许loopback
最后别忘 保存 重启服务!!