首页 > 代码库 > iptables基本操作

iptables基本操作

    iptables实际上是Linux内置模块netfilter的管理程序,netfilter才是真正意义上起到防火墙作用的内核模块,并且工作在内核空间,而管理程序iptables则工作在用户空间。作为用户无法直接操作内核模块,因此需要通过iptables去编写防火墙规则。

    在生产环境中,大多数都使用硬件防火墙,较少使用Linux服务器作为网关设备。我们就以iptables作为“主机型防火墙”(即主要对本机进行保护的防火墙)来了解其编写规则。

    iptables采用了“表”和“链”的分层结构,如下图所示:

技术分享

    由图可知,iptables主要包含了四表五链,每张表可以理解为一个容器,每张表中有不同的链,而每条链中又包含了若干的规则,而这些规则正是实现防火墙的策略。

    基本格式:iptables [-t 表名] 管理选项 [链名] [匹配条件] -j [动作]

管理选项:

-A:在指定链的末尾添加一条新的规则。

-D:删除指定链中的某条规则,可以指定规序号或具体内容

-I:在指定链中插入一条新的规则,未指定序号时默认作为第一条规则。

-L:列出指定链中所有规则。

-P:设定默认规则。

-F:清空指定链中的所有规则,未指定具体链,则清空表中所有链。

-n:使用数字形式显示输出结果。

-v:查看规则时显示详细信息。

--line-numbers:查看规则列表时,同时显示在规则中的序号。

动作:

ACCEPT:允许数据包通过。

DROP:直接丢弃数据包。

匹配条件:

匹配条件具有很大的灵活性,常见的有以下几种:

-s:源地址匹配

-d:目标地址匹配

-p:协议匹配

--sport:源端口匹配

--dport:目标端口匹配

    示例:

1 设置默认规则:

iptables -P OUTPUT ACCEPT

iptables -P INPUT DROP

2 开放80和22号端口:

iptables -I INPUT -d 本机IP -p tcp --dport 80 -j ACCEPT

iptables -I INPUT -d 本机IP -p tcp --dport 22 -j ACCEPT

3 拒绝IP为192.168.1.0/24网段的数据包进入本机:

iptables -I INPUT -s 192.168.1.0/24 -j DROP 

4 查看防火墙规则:

iptables -L -n --line-numbers

Chain INPUT (policy DROP)

num  target     prot opt source               destination         

1    DROP       all  --  192.168.154.156      0.0.0.0/0           

2    ACCEPT     tcp  --  0.0.0.0/0            192.168.154.160     tcp dpt:8080 

3    ACCEPT     tcp  --  0.0.0.0/0            192.168.154.160     tcp dpt:80 

4    ACCEPT     tcp  --  192.168.154.161      0.0.0.0/0           tcp dpt:873 

5    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 

6    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           

7    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 

9    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

10   DROP       all  --  192.168.154.156      0.0.0.0/0           

11   DROP       all  --  192.168.154.156      0.0.0.0/0           

12   DROP       all  --  192.168.154.156      0.0.0.0/0           

13   DROP       all  --  192.168.154.156      0.0.0.0/0           


Chain FORWARD (policy ACCEPT)

num  target     prot opt source               destination         

1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 


Chain OUTPUT (policy ACCEPT)

num  target     prot opt source               destination         

5 保存防火墙规则:

service iptables save

把防火墙规则保存到文件中:

iptables-save > a.txt

从文件中恢复防火墙规则:

iptables-restore < a.txt

备注:通常情况下,如果前端有硬件防火墙,则关闭内网所有的iptables;如果服务器有公网IP,直接面向公网,则设置INPUT链的默认规则为DROP,并且开放必要的端口,如Web服务器的80端口。OUTPUT链的默认规则可以设置为ACCEPT。

iptables基本操作