学习了基础知识后 ,下面开始正式的部署:

本机安装系统时关闭了防火墙,查看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


最后别忘 保存 重启服务!!