一点一滴学Linux

    返回首页    发表留言
本文作者:李德强
          第三节 iptables防火墙
 
 

        iptables防火墙的功能非常强大,它可以控制网络端口,限制IP访问,阻止IP地址欺骗等等。我们先使用iptables -L -n来看看目前防火墙的规则:

iptables -L -n 
Chain INPUT (policy DROP)
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           
ACCEPT     47   --  0.0.0.0/0            0.0.0.0/0           
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            tcp dpt:20
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:21
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpts:2100:2199
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3690
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:1372
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:445
Chain FORWARD (policy DROP)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

        可以看到iptables打开了20、21、22、80、8080、3690、1372、445和2100~2199这些网络端口。下面我们就来一步一步的学习如何配置防火墙。

        首先使用iptables -F命令来清除预设表filter中的所有规则链的规则,再通过iptables -X来清除预设表filter中使用者自定链中的规则:

iptables -F
iptables -X
iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination        
Chain FORWARD (policy DROP)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

        可以看到,使用了iptables -F和iptables -X之后,预设表中没有任何规则。再来看下面的3条命令:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

        iptables -P INPUT DROP的意思是:当对于“流入(INPUT)”的网络数据包不在预设表规则中时采用的默认处理为“丢弃(DROP)”,也就是说所有入访的数据包都丢弃可以说是非常安全的了,但是在实际情况中我们需要让特定网络端口的数据流入,也就是说要打开指定的端口,这一功能我们将在下面学习。

        iptables -P OUTPUT DROP的意思是:当对于“流出(OUTPUT)”的网络数据包不在预设表规则中时采用的默认处理为“丢弃(DROP)”。对于本机向外发送的数据包不需要做相应的处理,也就是没有任何规则。

        iptables -P FORWARD DROP的意思是:当对于“转发(FORWARD)”的网络数据包不在预设表规则中时采用的默认处理为“丢弃(DROP)”。

        接下来为“流入”的网络数据包加入特定规则。打开22端口(22端口为Linux的SSH服务端口,为客户端访问Linux服务器提供服务):

        因为我们对外“流出”的规则设定为ACCEPT所以这里不需要再设定OUTPUT规则。当然,如果在前面使用了iptables -P OUTPUT DROP的话,就需要打开流出规则的22端口:

iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

        同理,我们可以打开20、21、80、8080端口:

iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

        如果我们需要打开一段连续的端口,比如2000~2199可以使用“:”打开它们:

iptables -A INPUT -p tcp --dport 2000:2199 -j ACCEPT

        允许icmp包通过,也就是允许ping:

iptables -A INPUT -p icmp -j ACCEPT

        只允许IP地址为172.16.1.23的计算机入访:

iptables -A INPUT -s 172.16.1.23 -p tcp --dport 22 -j ACCEPT

        不允许IP地址为172.16.1.24的计算机入访:

iptables -A INPUT -s 172.16.1.24 -p tcp --dport 22 -j DROP

        如果要允许或限制一段IP地址可用 172.16.1.0/24 表示172.16.1.1 ~ 255端的所有IP。例如:

iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 22 -j DROP

        在Linux中1024以下的端口默认只能被root用户所绑定,如果我们使用一个普通用户启动了一个tomcat的web服务并想让其绑定到http的默认端口80上,实际上这是不行的,我们只能让其绑定到8080端口,并通过iptables做一下端口映射,所有访问80端口均被映射到8080端口上:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

        阻止访问 101.10.25.192地址的21端口:

iptables -t nat -A PREROUTING -p tcp --dport 21 -d 101.10.25.192 -j DROP

        这些命令与ifconfig命令一样,执行之后只是在临时生效,当服务器重启后就不再生效。想要让其永久生效可以使用下面命令来将iptables的所有规则保存到配置文件中:

iptables save

        iptables的配置文件存放在/etc/sysconfig/iptables中,可以使用vi/vim来对其进行编辑:

vim /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Tue May  5 04:11:17 2015
*filter
:INPUT DROP [7818:685458]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [236299:11556976]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p gre -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2100:2199 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3690 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1372 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
COMMIT
# Completed on Tue May  5 04:11:17 2015

        当然,我们在熟悉了iptables规则之后就可以直接修改这个配置文件来修改iptables的相关内容,在修改完毕之后需要重启iptables服务:

service iptables restart

 

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号