基于linux内核的防火墙iptables功能强大,可以抵挡来自网络层的大部分攻击.今天写一个入门级的iptables脚本,以备日后查阅修改之用,也希望对刚接触iptables的新手有点借鉴意义.
系统环境:单网卡主机,RHEL4,iptables系统内带无须安装.下面是脚本内容及说明.
#vi /root/scirpts/iptables.sh #脚本路径及名称均可自定
-----------------------------------------------------------------------------------------------------------------
#!/bin/bash
#脚本的基本思路是先拒绝所有的请求再允许特定的请求.
#脚本通过测试,可以直接使用
PATH=/sbin:/usr/sbin:/bin:/usr/bin; export PATH #设置脚本命令路径
# 加载相关模块:
modprobe ip_tables
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
# 清空所有规则:
iptables -F
iptables -X
iptables -F
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
# 设置默认规则:
iptables -P INPUT DROP #默认拒绝所有进入的请求
iptables -P OUTPUT ACCEPT #默认允许所有出去的请求
iptables -P FORWARD ACCEPT #默认允许所有转发的请求
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT #默认允许所有nat的请求
# 允许所有进出回环口的请求
iptables -A INPUT -i lo -j ACCEPT
# 允许特定端口(对应服务)的请求
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #ssh
iptables -A INPUT -p tcp --dport 21 -j ACCEPT #ftp
iptables -A INPUT -p tcp --dport 20 -j ACCEPT #ftp
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #www
# 以上仅开放ssh(远程登陆)、ftp及www服务,开放更多服务参照增加即可
#保存防火墙配置、重启服务
/etc/init.d/iptables save
/etc/init.d/iptables restart
#关于规则表、规则链在此不做说明,如需了解请google、baidu
#部分iptables命令参数的说明如下:
#[-t]指定规则表(后接filter、nat、mangle,如不指定默认为filter)
#[-F] [-X] [-Z]清除规则表、规则链、规则
#[-P] 设置默认规则DROP还是ACCEPT
#[-A] 增加规则
#[-p] 指定协议
#[--dport]指定目标端口 [--sport]指定源端口
#[-j]规则动作DROP还是ACCEPT
#[-i]指定进入的网卡 [-o]指定出去的网卡
#[-s]指定ip源,如-s 192.168.1.0/24 -s 10.10.10.1/32
--------------------------------------------------------------------------------------------------------------------
以上脚本只是最简单的针对web server类的入门级iptables设置,更高级的功能将在后续文章补充。由于本人自身知识匮乏,以上所述难免有不当之处,还望批评指正,将不甚感谢。