iptalbes的三个表
-
filter 这个表主要用于过滤包的,是系统预设的表,这个表也是阿铭用的最多的。内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。
-
nat 主要用处是网络地址转换,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。用的不多,但有时候会用到。
-
mangle 这个表主要是用于给数据包打标记,然后根据标记去操作哪些包。这个表几乎不怎么用。除非你想成为一个高级网络工程师,否则你就没有必要花费很多心思在它上面。
查看规则以及清除规则
- 打印filter表的相关信息:
iptables -nvL
- 打印nat表的相关信息:
iptables -t nat -nvL
> 其中:-t 后面跟表名,--nvL 即查看该表的规则,其中-n表示不针对IP反解析主机名;-L表示列出的意思;而-v表示列出的信息更加详细。如果不加-t ,则打印filter表的相关信息。
关于清除规则
[root@localhost ~]# iptables -F [root@localhost ~]# iptables -Z
不加-t默认是针对表filter来操作的,-F 表示把所有规则全部删除;-Z表示把包以及流量计数器置零。 -F 是把当前规则清除,但这个只是临时的,重启系统或者重启 iptalbes 服务后还会加载已经保存的规则,所以需要使用 /etc/init.d/iptables save 保存一下规则
增加/删除一条规则
# iptables -A INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP
> 这就是增加了一条规则,省略-t所以针对的是filter表。-A 表示增加一条规则,另外还有-I 表示插入一条规则,-D删除一条规则;后面的INPUT即链名称,还可以是OUTPUT或者FORWORD;-s 后跟源地址;-p 协议(tcp,udp,icmp); --sport/--dport 后跟源端口/目标端口;-d 后跟目的IP(主要针对内网或者外网);-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)。这样讲可能很乱,那阿铭多举几个例子来帮你理解:
-
iptables -I INPUT -s 1.1.1.1 -j DROP
:插入一条规则,把来自1.1.1.1的所有数据包丢掉。 -
iptables -D INPUT -s 1.1.1.1 -j DROP
: 删除刚刚插入的规则。注意要删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I 和-D不一样外,其他地方都一样。 -
iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP
:上例表示把来自2.2.2.2 并且是tcp协议到本机的80端口的数据包丢掉。这里要说的是,--dport/--sport 必须要和-p选项一起使用,否则会出错。 -
iptables -I OUTPUT -p tcp --dport 22 -d 10.0.2.34 -j DROP
:这条规则表示,把发送到10.0.2.34的22端口的数据包丢掉。-I :插入一条规则,其实跟-A的效果一样;
-p :指定协议,可以是tcp,udp或者icmp;
--dport :跟-p一起使用,指定目标端口;
--sport :跟-p一起使用,指定源端口;
-s :指定源IP(可以是一个ip段);
-d :指定目的IP(可以是一个ip段);
-j :后跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包;
-i :指定网卡(不常用,但有时候能用到);
有时候你的服务器上iptables过多了,想删除某一条规则时,又不容易掌握当时创建时的规则。其实有一种比较简单的方法:
[root@localhost ~]# iptables -nvL --line-numbers Chain INPUT (policy ACCEPT 133 packets,9740 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- eth0 * 192.168.1.0/24 0.0.0.0/0
删除某一条规则使用如下命令:
[root@localhost ~]# iptables -D INPUT 1
iptables还有一个选项经常用到,-P(大写)选项,表示预设策略。用法如下: [root@localhost ~]# iptables -P INPUT DROP
-P后面跟链名,策略内容或者为DROP或者为ACCEPT,默认是ACCEPT。注意:如果你在连接远程服务器,千万不要随便敲这个命令,因为一旦你敲完回车你就会断掉。
这个策略一旦设定后,只能使用 iptables -P INPUT ACCEPT 才能恢复成原始状态,而不能使用-F参数。下面阿铭针对一个小需求讲述一下这个iptables规则如何设定。
实战演示
需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.137.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。这个需求不算复杂,但是因为有多条规则,所以最好写成脚本的形式。脚本内容如下:
[root@localhost ~]# cat /usr/local/sbin/iptables.sh #! /bin/bash ipt="/sbin/iptables" $ipt -F $ipt -P INPUT DROP $ipt -P OUTPUT ACCEPT $ipt -P FORWARD ACCEPT $ipt -A INPUT -s 192.168.137.0/24 -p tcp --dport 22 -j ACCEPT $ipt -A INPUT -p tcp --dport 80 -j ACCEPT $ipt -A INPUT -p tcp --dport 21 -j ACCEPT