Iptables防火墙 官网
Iptables是跟内核一起的,不用手动安装
Iptables防火墙可根据七层协议
表和链关系
表(table)是链(chains)的容器,链是规则(rules)的容器
默认的4个规则表
表都是小写
raw表:对数据包进行状态跟踪
mangle表:为数据包设置标记,流量控制类似于QOS
nat表:修改数据包中得源,目标IP地址和端口
filter表:数据包过滤 如果没有指定表的类型,默认指定filter表
-t参数来指定表的类型 table
默认的5中规则链
链都是大写
INPUT:进入的数据包 与本机有关的数据包,用于防护本机
OUTPU:出去的数据包 与本机有关的数据包,用于防护本机
FORWARD:转发数据包 与本机无关数据包,用于防护一个网络
POSTROUTING:路由选择后处理数据包
PREROUTING:路由选择前处理数据包
每一个链中默认都有一条缺省的策略
#iptables –L 列出所有的策略
(policy ACCEPT)就是默认的策略 政策接受
#iptables –t nat –L 查看nat表的链结构,可以看到有三个链。
数据包过滤的优先顺序
规则表之间的优先顺序流程
raw、mangle、nat、filter
规则链之间的优先顺序流程
入站数据:PREROUTING、INPUT
出站数据:OUTPUT、POSTROUTING
转发数据:PREROUTING、FOURWARD、POSTROUTING
数据包的动作
写动作的时候都是大写
ACCEPT 允许数据包通过
DROP 丢弃数据包,就好像该数据包没有被接受一样(直接丢弃)常用
LOG 把数据信息记录到syslog
REJECT 丢弃数据包,同时发送适当的响应报文(丢弃后并返回一个信息说为什么丢弃)
RETURN 在调用链中继续处理数据包
Iptables 命令的语法格式
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 动作]
如果不指定表名,默认是filter表
如果不指定表里的链,默认是所有链
iptables -A 在链尾创建一条规则
-D 删除一条规则
-I 在指定位置(不指定则在链首)插入一条规则
-F 清空所有规则
-P 设置指定链的默认策略
-p 指定协议
-s 源
-d 目标
-R 替换指定位置或内容的规则
-N 创建一条自定义规则链
-X 删除一条自定义规则链
端口匹配
--sport 源端口
--dprot 目标端口
-i 定义指定某网卡的进入 如-i ech0 多个网卡选择0网卡
-o 定义指定某网卡的出口
TCP标记匹配
使用--tcp-flags 如SYN(序列号),ACK(确认号),RST,
ICMP类型匹配
使用—icmp-type 如 echo-request ,echo-reply
显式条件匹配
-m
MAC地址匹配
-m mac –mac-source 00:00:00:00:00:00
多端口匹配
-m multiport –dport 20,21,25
多IP地址匹配
-m iprange --src-range 192.168.1.20-192.168.1.30
数据包状态匹配
-m state
NEW 新发起的链接
ESTABLISHED 服务器正常响应的数据包 established:成立
RELATED与已有连接相关性的数据包(如FTP上传/下载建立的数据连接,这个连接与之前的FTP控制连接存在相关性)related:相关
数据包控制
SNAT 修改数据包的源地址信息
DNAT 修改数据包的目标地址信息
#iptables –t filter –I INPUT –p icmp –s 0.0.0.0/0 –d 192.168.1.2/24 –j DROP
#iptables –t filter –I OUTPUT –p icmp –j DROP 都可以
#iptables –t filter –D INPUT 1 这个1是行号
#/etc/init.d/iptables save 永久保存iptables命令
保存到/etc/sysconfig/iptables文件里 ,不保存重启之后所有规则都没有了
列表查看规则
-L 列表查看各条规则信息
--line-numbers 查看规则时显示行号
-n 以数字显示IP地址,端口号等信息,和协议号
-v 显示数据包个数,字节数等信息
#iptables –L INPUT –line-numbers 查看filter表里的INPUT规则的行号
Iptables在实际应用中应该拒绝一切。不能进不能出
#iptables –P INPUT DROP 默认是policy ACCEPT
#iptables –P OUTPUT DROP
#iptables –P FORWARD DROP
查看协议
/etc/services 存放系统所支持的所有服务
/etc/protocols 存放系统所支持所有协议
#iptables –p icmp –help | less
防火墙规则
拒绝所有机器PING防火墙,允许防火墙PING所有机器
首先拒绝所有一切通信
#iptables –F 清空策略
#iptables –p icmp –help | more 查看icmp的类型
#iptables –A OUTPUT –p icmp --icmp-type echo-request –j ACCEPT 允许出去的请求包
#iptables –A INPUT –p icmp –icmp-tyep echo-reply –j ACCEPT 允许回来的回复的包
#iptables-save 保存
指定协议时也可以指定它的协议号,icmp协议号是1在/etc/protocols文件里可查看
允许使用SSH连接
在指定端口的时候必须先指定协议
#iptables –A OUTPUT –p tcp --sport 22 –s 172.16.1.200 –d 172.16.1.100 –j ACCEPT
#iptables –A INPUT –p tcp –dport 22 –s 172.16.1.100 –d 172.16.1.200 –j ACCEPT
允许本机127.0.0.1回环地址 保证一些服务的正常运行
#iptables –A INPUT –s 127.0.0.1 –d 172.0.0.1 –j ACCEPT
#iptables –A OUTPUT –s 127.0.0.1 –d 127.0.0.1 –j ACCEPT
MAC地址匹配
#iptables –A FORWARD –m mac –macc-source 00:00:00:00:00:00 –j DROP
多端口匹配
以逗号区分端口号
#iptables –A INPUT –p tcp –m multiprot –dport 20,21,25,1250-1260 –j ACCEPT
多IP地址匹配
#iptables –A FORWARD –p tcp –m iprange --src-range 192.168.1.20-192.168.1.30 –j DROP
数据包状态匹配
-m state
#iptables –A FORWARD –p tcp –m state --state NEW ! --syn –j DROP
NEW 新发起的一个连接
! 非(不是)
--syn TCP连接的第一个握手数据包
#iptables –A INPUT –p tcp –m state --state NEW –j DROP 丢弃TCP发起的连接包
#iptables –A INPUT –p tcp –m state --state ESTABLISHED,RELATED –j ACCEPT
只允许 ESTABLISHED,RELATED数据包状态,(拒绝TCP进入)
SNAT策略
局域网主机共享一个公网IP地址接入INTERNET
SNAT修改数据包的源IP地址
实验一
SNAT source
三台虚拟机,外网的WWW服务,iptables防火墙,内网xp客户端
WWW服务
搭建外网的WWW服务,apache课件有讲
Iptables防火墙
#iptables –F 清空所有策略
#iptables –P INPUT DROP 拒绝所有一切
#iptables –P OUTPUT DROP
#iptables –P FORWARD DROP
#iptables –A INPUT –s 127.0.0.1 –d 127.0.0.1 –j ACCEPT 允许本地回环地址
#iptables –A OUTPUT –s 127.0.0.1 –d 127.0.0.1 –j ACCEPT
#iptables –I INPUT –p tcp --dport 22 –s 0.0.0.0/0 –d 61.233.154.1 –j ACCEPT
#iptables –I OUTPUT –p tcp --sport 22 –s 61.233.154.1 –d 0.0.0.0/0 –j ACCEPT
上面基本环境搭好
#vi /etc/sysclt.conf
net.ipv4.ip_forward = 1 开启ipv4的路由转发功能
1 表示开启
0表示关闭
#iptables –A FORWARD –s 172.16.0.0/16 –j ACCEPT 设置转发链,进入和出去
#iptables –A FORWARD –d 172.16.0.0/16 –j ACCEPT
#iptables –t nat –I POSTROUTING –s 172.16.0.0/16 –o eht1 --to-source 61.233.154.1
POSTROUTING 路由后规则
-s 局域网内网段
-o eth1 从eth1网卡出去 (可不指定)
--to-source 指定外网地址
XP客户端
访问外网WWW服务器,成功
可以在XP上抓下包,抓到包源地址都是61.233.154.1地址,说明SNAT做对了
使用地址伪装.如果外网地址不是固定IP地址,经常改动(ADSL),如果是ADSL接入外网的,那么外网接口名称就是ppp0,ppp1
把以上-j SNAT –to-source 改成 –j MASQUERADE
#iptables –t nat –A POSTROUTING –s 172.16.0.0/16 –o ppp0 –j MASQUERADE
实验二
DNAT destination
通常用于往外网发布局域网内的服务器
#iptables –t nat –A PREROUTING –i eth1 –d 61.233.154.1 –p tcp –dport 80 \
-j DNAT --to-destination 172.16.1.2
客户端
访问公司外网地址
成功
WWW服务器查看访问记录
#tail /var/log/httpd/access_log
61.233.154.2主机访问过。