iptables是管理netfilter的唯一工具;(netfilter是网络过滤器,或者网页内容过滤器),netfiletr直接嵌套在linux的内核上面。netfilter在内核中过滤,没有守护进程。它的过滤速度非常快,因为只读取数据包头,不会给信息流量增加负担,也无需进行验证。
netfiletr提供一系列的表(tables),每个表有若干个链组成,每条链可以有若干个规则(rules)组成。可以简单的说:netfilter是表的容器,表是链的容器,链是规则的容器。
表分为3个分别为:filter表 , nat表 , mangle表;
filter表包含INPUT链,FORWARD链,OUTPUT链;
nat表包含INPUT链,OUTPUT链,PREROUTING链,POSTROUTING链;
mangle表包含INPUT链,OUTPUT链,PREROUTING链,POSTROUTING链 ,INPUT链,OUTPUT链,PREROUTING链,POSTROUTING链;
注意:filter表主要执行数据包过滤;nat表主要进行网络地址转换;mangle表用于修改一些特殊规则;
PREROUTING链:路由之前刚达到的数据包; INPUT链:通过路由,目的地为本机的数据包; FORWARD链:需要通过本地系统进行转发的数据包; OUTPUT链:由本机产生,向外转发,处于postrouting之前的数据包; POSTROUTING链 :通过路由后,即将离开系统的数据包;
IPtables的基本语法:
1.iptables的服务
关闭防火墙服务,冻结防火墙服务;
开启iptables服务,设置开机自启;
vim /etc/sysconfig/iptables ####编辑iptables文件进行设置;保存iptables设置,对iptables规则编辑后一定要保存;
保存设置以后需要重新启动否则相关设置不会生效;
2,iptables的基本命令
iptables 有三张表,-t 参数来设置是哪张表生效,如果没有参数,系统默认对filter表进行操作;
iptables -L #####显示filter表中的规则,后面需要指定表,否则默认为filter表;
iptables -t nat -L ####显示nat表的所有规则;
iptables -F #####删除默认filter表的所有规则;
iptables -t nat -F #####删除nat表的所有规则;
####为了方便我们在nat表里面添加了一条规则;
iptables -t nat -F PSOTROUTING ####删除nat表中PSOTROUTING链的所有规则;
iptables -t nat -F PSOTROUTING 2 ####删除nat表中PSOTROUTING链的第二条规则;
注意:有时我们进行添加或者删除,不一定会立刻生效,我们需要保存service iptables save 保存设置来生效;
-A ####在规则列表的最后增加1条规则
iptables -A INPUT -s 192.168.88.132 -j DROP
####丢弃来自192.168.88.132的数据包,默认为filter表;
注意:保存设置重新启动服务,该条规则在所有规则后面,则iptables的匹配是由顺序的;
-I (注意是大写的i) ######在指定位置插入一条规则;
-P 分配链接策略;P 是大写的;
iptables -P INPUT DROP #### 禁止任何输入的数据包;
iptables -P OUTPUT ACCEPT ####允许所有输出的数据包;
-D 删除某条规则;
iptables -t nat -D OUTPUT 2 ####删除nat 表里OUTPUT链的第二条规则;
-R ######替换规则列表中的某条规则
iptables -R INPUT 1 -s 192.168.88.129 -p tcp --dport 80 -j ACCEPT
####替换filter表INPUT链里面的第二条规则为允许192.168.88.129客户端通过80端口进行访问;
3.iptables匹配选项
-i ####指定数据包从哪个网络接口进入
-o ######指定数据包从哪个网络接口输出
-p #####指定数据包的匹配协议
-s ####指定数据包的匹配源地址
--sport<源端口号> ####指定数据包匹配的源端口号;
-d <目标地址或者子网> ####指定数据包的匹配目标地址;
--dport目标端口号 ####指定数据包匹配的目标端口号;
iptables -A INPUT -p tcp -s 192.168.88.132/24 -dport 22 -j ACCEPT
-p protocol ######匹配网络协议,我们匹配的是tcp协议;
-s IP地址或者网段 ######匹配源ip地址或者网段;
! -s ip地址或者网段 ######除了这个ip地址或者网段的所有网段;
-j ACCESPT/DROP/REJECT #####后面添加执行的动作,接受,丢弃,拒绝;
####允许192.168.88.132的主机通过22端口访问该主机;
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT ####开放ftp的20和21端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #####开放http服务的80端口;
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #####开放ssh服务的80端口
NAT(netwoek address translation)网络地址转换器 是将一个地址域映射到另外一个地址域的标准方法。他是根据rfc1631开发的IETE标准,允许一个ip地址以一个公有的ip地址出现在网络上。nat可以将内部网络的所有节点的地址转换成一个ip地址。
目的地 NAT(DNAT):DNAT修改包的目的地位置,必须在包即将被送到本机行程之前,或是要被转送其它电脑之前;所以,使用DNAT为目标的规则,必须设置于nat表格的PREROUTING链结。
源NAT(SNAT):SNAT必须在封包即将离开核心的前一刻,即时修改其来源位址(或通讯端口),所以SNAT规则的设置地点必须是在nat表格的POSTROUTING链结。
设置iptables FORWARE规则
开启转发功能:编辑/etc/sysctl.conf文件
net.ipv4.ip_forward = 1 #####开启内核的转发功能;
sysctl -p #####使得上面参数生效;
NAT转发功能
1. 在虚拟主机里面添加一块网卡设置两个不同的网段,例如:192.168.88.132和192.168.66.132
2.打开nat的转发功能;
sysctl -p ####也可以查询转发功能打开没有
3.服务端添加地址转换
iptables -t nat -A PREROUTING -i eno16777736 -j DNAT --to-dest 192.168.66.132
iptables -t nat -A POSTROUTING -o eno16777736 -j SNAT --to-source 192.168.88.132
4.客户端测试;
####登录时显示地址已经转换;