一、基础命令

1、iptables -t 表名 -L
-L 表示列出所有规则,后面可接具体的链
-nL 进制反向域名解析
iptables -t 表名 -v -Liptables -t 表名 -n -L
iptables -t 表名 -nvL
-v 具体信息 会看到每个规则默认的策略
-n 禁止反向解析域名

2、iptables --line-numbers -t 表名 -L
可以看到规则的序列号 --line-numbers可以简写为 --line

3、iptables -t 表名 -F 链名
-F 删除 若-F后面没有规则 则默认删除全部链

4、添加规则
(1)命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作
示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP
(2)命令语法:iptables -t 表名 -I 链名 匹配条件 -j 动作
示例:iptables -t filter -I INPUT -s 192.168.1.146 -j ACCEPT
(3)命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作
示例:iptables -t filter -I INPUT 5 -s 192.168.1.146 -j REJECT
**注意:-I优先于-A(附加)每-I一个规则都会在序列号第一位

5、命令语法:iptables -t 表名 -P 链名 动作
示例:iptables -t filter -P FORWARD ACCEPT

6、删除规则
命令语法:iptables -t 表名 -D 链名 规则序号
示例:iptables -t filter -D INPUT 3

命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作
示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP
删除记得保存规则,service iptables save (centos6中)

7、修改规则
命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作
示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT
命令语法:iptables -t 表名 -P 链名 默认策略
示例:iptables -t filter -P FORWARD ACCEPT

8、常见的选项
-s 源地址

iptables -t filter -I INPUT -s 192.168.1.111,192.168.1.118 -j DROP
 iptables -t filter -I INPUT -s 192.168.1.0/24 -j ACCEPT
 iptables -t filter -I INPUT ! -s 192.168.1.0/24 -j ACCEPT


-d 目标地址 和-s用法一样
-p 匹配报文协议类型

iptables -t filter -I INPUT -p tcp -s 192.168.1.146 -j ACCEPT
 iptables -t filter -I INPUT ! -p udp -s 192.168.1.146 -j ACCEPT


-i 报文从哪个网卡接口流入本机 -o 相反流出

iptables -t filter -I INPUT -p icmp -i eth4 -j DROP
 iptables -t filter -I OUTPUT -p icmp ! -o eth4 -j DROP

9、扩展匹配条件,扩展模块这里我就不细说了,个人觉得信息量太大有兴趣的小伙伴可以百度下

**

二、iptables黑白名单制

这里先说下白名单吧,更为安全,一般被选用

白名单:如下图默认的策略是DROP 而其中的规则动作是ACCEPT,也就是说除了符合下面的规则会被“放行”,其他都会被“丢弃”。

iptables 引流 iptables -v_centos

但是这样是不保险的 如果我们没有事先把80端口放行的话,我所用的ssh将会连接失败,下图就是很好的例子:

iptables 引流 iptables -v_白名单_02

所以为了保险起见我们一般都会把默认策略设置为ACCEPT列出所有白名单规则之后我们会在最后追加一行

iptables -A INPUT -j REJECT

下图才是一个完整的白名单例子哦

iptables 引流 iptables -v_centos_03


那么黑名单就反之了,反正用得少我就不具体解释了,你们都是聪明滴!

三、iptables-网络防火墙

如果想要iptables作为网络防火墙,iptables所在主机开启核心转发功能,以便能够转发报文。 使用如下命令查看当前主机是否已经开启了核心转发,0表示为开启,1表示已开启

cat /proc/sys/net/ipv4/ip_forward
使用如下两种方法均可临时开启核心转发,立即生效,但是重启网络配置后会失效。
方法一:echo 1 > /proc/sys/net/ipv4/ip_forward
方法二:sysctl -w net.ipv4.ip_forward=1
使用如下方法开启核心转发功能,重启网络服务后永久生效。
配置/etc/sysctl.conf文件(centos7中配置/usr/lib/sysctl.d/00-system.conf文件),在配置文件中将 net.ipv4.ip_forward设置为1

由于iptables此时的角色为"网络防火墙",所以需要在filter表中的FORWARD链中设置规则。
可以使用"白名单机制",先添加一条默认拒绝的规则,然后再为需要放行的报文设置规则。
配置规则时需要考虑"方向问题",针对请求报文与回应报文,考虑报文的源地址与目标地址,源端口与目标端口等。

示例为允许网络内主机访问网络外主机的web服务与sshd服务。

iptables -A FORWARD -j REJECT
 iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
 iptables -I FORWARD -d 10.1.0.0/16 -p tcp --sport 80 -j ACCEPT
 iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT
 iptables -I FORWARD -d 10.1.0.0/16 -p tcp --sport 22 -j ACCEPT

可以使用state扩展模块,对上述规则进行优化,使用如下配置可以省略许多"回应报文放行规则"。

iptables -A FORWARD -j REJECT
 iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
 iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT
 iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

四、防火墙在centos6与centos7的区别

1、centos6是依靠“四表五链”来实践的,而centos7是依靠九个区域。
2、centos6是在输入时拦截的,而centos7是在输出时拦截报文的
3、centos6:iptables centos7:firewalld

五、补充知识点

1、在使用–sport --dport 时前面必须添加协议 -p
2、自定义链 先取个名字
#示例:在filter表中创建IN_WEB自定义链
iptables -t filter -N IN_WEB
#示例:在INPUT链中引用刚才创建的自定义链
iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB
#示例:将IN_WEB自定义链重命名为WEB
iptables -E IN_WEB WEB
删除自定义链
如果被引用时先删除被引用的,再-X

注意了,防火墙我一共归纳了两篇博客,其中细节的东西很多,需要引起重视,好好细读都会有收获的。