如果你的iptables基础知识还不了解,建议先去看看.
开始配置
我们来配置一个filter表的防火墙.
(1)查看本机关于iptables的设置情况
[root@tp ~]# iptables -l -n
chain input (policy accept)
target prot opt source destination
chain forward (policy accept)
target prot opt source destination
chain output (policy accept)
target prot opt source destination
chain rh-firewall-1-input (0 references)
target prot opt source destination
accept all — 0.0.0.0/0 0.0.0.0/0
accept icmp — 0.0.0.0/0 0.0.0.0/0 icmp type 255
accept esp — 0.0.0.0/0 0.0.0.0/0
accept ah — 0.0.0.0/0 0.0.0.0/0
accept udp — 0.0.0.0/0 224.0.0.251 udp dpt:5353
accept udp — 0.0.0.0/0 0.0.0.0/0 udp dpt:631
accept all — 0.0.0.0/0 0.0.0.0/0 state related,established
accept tcp — 0.0.0.0/0 0.0.0.0/0 state new tcp dpt:22
accept tcp — 0.0.0.0/0 0.0.0.0/0 state new tcp dpt:80
accept tcp — 0.0.0.0/0 0.0.0.0/0 state new tcp dpt:25
reject all — 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
如果你在安装linux时没有选择启动防火墙,是这样的
[root@tp ~]# iptables -l -n
chain input (policy accept)
target prot opt source destination
chain forward (policy accept)
target prot opt source destination
chain output (policy accept)
target prot opt source destination
什么规则都没有.
(2)清除原有规则.
不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.
[root@tp ~]# iptables -f 清除预设表filter中的所有规则链的规则
[root@tp ~]# iptables -x 清除预设表filter中使用者自定链中的规则
我们在来看一下
[root@tp ~]# iptables -l -n
chain input (policy accept)
target prot opt source destination
chain forward (policy accept)
target prot opt source destination
chain output (policy accept)
target prot opt source destination
什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置ip一样,重起就会失去作用),怎么保存.
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
现在iptables配置表里什么配置都没有了,那我们开始我们的配置吧
(3)设定预设规则
[root@tp ~]# iptables -p input drop
[root@tp ~]# iptables -p output accept
[root@tp ~]# iptables -p forward drop
上面的意思是,当超出了iptables里filter表里的两个链规则(input,forward)时,不在这两个规则里的数据包怎么处理呢,那就是drop(放弃).应该说这样配置是很安全的.我们要控制流入数据包
而对于output链,也就是流出的包我们不用做太多限制,而是采取accept,也就是说,不在着个规则里的包怎么办呢,那就是通过.
可以看出input,forward两个链采用的是允许什么包通过,而output链采用的是不允许什么包通过.
这样设置还是挺合理的,当然你也可以三个链都drop,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做web服务器.还是推荐三个链都是drop.
注:如果你是远程ssh登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.
怎么办,去本机操作呗!
(4)添加规则.
首先添加input链,input链的默认规则是drop,所以我们就写需要accetp(通过)的链
为了能采用远程ssh登陆,我们要开启22端口.
[root@tp ~]# iptables -a input -p tcp –dport 22 -j accept
[root@tp ~]# iptables -a output -p tcp –sport 22 -j accept (注:这个规则,如果你把output 设置成drop的就要写上这一部,好多人都是望了写这一部规则导致,始终无法ssh.在远程一下,是不是好了.
其他的端口也一样,如果开启了web服务器,output设置成drop的话,同样也要添加一条链:
[root@tp ~]# iptables -a output -p tcp –sport 80 -j accept ,其他同理.)
如果做了web服务器,开启80端口.
[root@tp ~]# iptables -a input -p tcp –dport 80 -j accept
如果做了邮件服务器,开启25,110端口.
[root@tp ~]# iptables -a input -p tcp –dport 110 -j accept
[root@tp ~]# iptables -a input -p tcp –dport 25 -j accept
如果做了ftp服务器,开启21端口
[root@tp ~]# iptables -a input -p tcp –dport 21 -j accept
[root@tp ~]# iptables -a input -p tcp –dport 20 -j ac