iptables 防火墙策略(一)

iptables 防火墙策略
防火墙是指在内部网和外网之间,专业网和公共网之间的界面上构造的保护屏障,使 INTERNET INTERNET 之间建立一个安全网关,从而保护内部网络免受非法入侵,防火墙主要由服务访问规则,验证工具,包过滤和应用网关 4 个部分。
现在有两种功能的防火墙:
包过滤防火墙,该防火墙工作网络层,在 linux 系统下包过滤是内建于 linux 内核路由功能至上的防火墙类型,具体的讲它针对每一个数据报的报头,按照包过滤规则进行判断,与规则相匹配的包浆依照路由信息继续转发,否则就丢弃。数据包过滤是通过对数据包的 IP 头和 TCP 头或 UDP 头的检查来实现的。
代理防火墙,也叫应用层的网关防火墙( Application Gateway )这种防火墙通过一种代理( Proxy )技术参与到一个 TCP 连接的全过程。从内部发出的数据包经过这样的防火墙处理后,就好像是源于防火墙外部网卡一样,从而可以达到隐藏内部网结构的作用。可以改变数据包的 ip 信息。
 
代理防火墙非常安全但是效率较低,所以现在一般把上述两种防火墙一起使用。主机发送信息,先经过包过滤防火墙,检查成功后在把包发给网关防火墙,若不成功直接将包丢弃。
 
典型的防火墙设置有两种网卡:一个流入,一个流出。 iptables 读取流入和流出数据包的报头,将它们与设定规则相比较,将可接受的数据包从一个网卡转发至另一个网卡,对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。
现在我们学习使用 iptables 命令
Neitfiler Framework/iptables
Neitfiler Framework 是网络控制框架, iptables 是规则,防火墙布过滤数据,依靠规则过滤, iptables 放在防火墙上二者结合使用。
iptables 命令的格式是
#iptables �Ct table COMMAND  Chains[num]  match condition  �Cj action
-t table 先指定表 (注:若不指定默认为 filter 过滤表); command chains 再指定链与相应的参数; match conditions 做命令匹配条件; -j cation 指定动作(可以不指)
 
首先我们要理解 iptables 的五个内置默认键;即五个链,
1.INPUT  进入过滤点
2.OUTPUT  出去过滤点
3.FORWARD  转发过滤点,
4.PREROUTING  路由前过滤点,
5.POSTROUTING    路由后过滤点,
 
table: 表(功能)
1.          filter 过滤功能   (可以经过 INPUT, FORWARD, OUTPUT
2.          nat 端口地址转换 SNAT 源地址转换; DNAT 目的地址转换)
nat 和路由一样都做地址转换,但是 nat 改变源地址,路由不改变。(可以经过 OUTPUT, PREROUTING, POSTROUTING
3.                   mangle 改变数据特征,与路由没有关系,优先级高,当有多个功能表时,优先 ( 全部点都能经过 )
4.                   raw
下面开始匹配规则
匹配规则可以分为通用匹配和扩展匹配,扩展匹配又可以分为隐式扩展和显示扩展
1.     通用匹配
-p 指定协议   -P { tcp udp icmp}
-s 匹配原地址
-d 匹配目的地址
-i   指定数据包从哪个网卡接口进来的 若是防火墙多网卡指定 in_interface
-o 指定数据包通过哪个网卡接口出去
2 .扩展匹配
1 隐含扩展
基于 tcp
--dport 匹配目标端口
--sport 匹配源端口
--tcp-flags 标示位
--syn  = --tcp-flags SYN,RST,ACK,FIN,SYN
基于 udp
--dport
--sport
基于 icmp �Cicmp-type
8 ping 请求 echo-request
0 响应 echo-reply
3 目标不可达 destination unreachable
2 显示扩展   -m
-m state �Cstate
-m multiport �Climit
-m string �Cstring 字符串匹配
-j
DROP 丢弃
REJECT 明确拒绝
ACCEPT 允许通过
SNAT 源地址转换 �Cj SNAT �Cto-source IP
DNAT 目的地址转换   -j DNAT �Cto-dest IP
LOG 记入日志
MASQERADE 地址伪装
 
Rules 对规则管理
-A 添加一条新规则 在链的尾部追加
-I n 插入一条新规则,如不指明行数默认为插入第一行,指明行数为插入为第几行
-R n 修改第 n 条规则
-D n 删除第 n 也可不指行数指明特征与动作
 
Chains 对链的管理
-F 清空一条链 若不指明链则默认为把表中的链全部清空
-P 默认处理动作,默认策略
-N 用户自定义生成一条新的规则链
-X 删除用户自定义的空链
-E 把用户自定的名字重命名
-Z  清零 zero
 
Show 查看 iptables 规则
-L 查看某条链中的所有规则
 -L 有子命令: �Cn 不做名称解析; �Cv 显示详细信息; �Cx 不做单位换算,直接显示精确值; �Cline-numbers 给规则编号
#iptables �Ct filter �CnvL �Cline-numbers
-S 打印指定链中的规则
 
下面我们做几个小实验 练习一下 iptables 命令
1.          现有主机 192.168.0.71 不允许 192.168.0.40ping 本机
[root@station71 ~]# iptables -t filter -A INPUT -s 192.168.0.40 -d 192.168.0.71 -p icmp --icmp-type 8 -j DROP
指定表为过滤表,在目的地址 INPUT      DROP 掉源主机 0.40 向目的主机的 0.71 发出的 ping
测验一下
[root@station40 ~]# ping 192.168.0.71
PING 192.168.0.71 (192.168.0.71) 56(84) bytes of data.
[root@station71 ~]# ping 192.168.0.40
PING 192.168.0.40 (192.168.0.40) 56(84) bytes of data.
64 bytes from 192.168.0.40: icmp_seq=1 ttl=64 time=1.80 ms
该规则也可以写为
[root@station71 ~]# iptables -A OUTPUT -s 192.168.0.71 -d 192.168.0.40 -p icmp --icmp-type 0 -j DROP
不允许本机响应 0.40 主机,响应数据出去当然在 OUTPUT 处过滤(因为默认表是 filter ,若表为 filter 时,则可不指明)
2 现在让 0.71 也不能 ping 0.40
[root@station71 ~]# iptables -A OUTPUT -s 192.168.0.71 -d 192.168.0.40 -p icmp --icmp-type 8 -j REJECT
验证 ping 0.40
From 192.168.0.71 icmp_seq=1 Destination Port Unreachable
From 192.168.0.71 icmp_seq=1 Destination Port Unreachable
From 192.168.0.71 icmp_seq=1 Destination Port Unreachable
From 192.168.0.71 icmp_seq=1 Destination Port Unreachable
 
--- 192.168.0.40 ping statistics ---
0 packets transmitted, 0 received, +14651 errors
当然该规则也可以写成
[root@station71 ~]# iptables -A INPUT -s 192.168.0.40 -d 192.168.0.71 -p icmp --icmp-type 0 -j REJECT
2 不允许 0.40ssh 访问本机 0.71 ssh 22 端口)
[root@station40 ~]# ssh [email protected]
[email protected]'s password:
Last login: Fri Feb 26 16:25:29 2010
[root@station71 ~]#
现在写一个规则
[root@station71 ~]# iptables -A INPUT -s 192.168.0.40 -d 192.168.0.71 -p tcp --dport 22 -j DROP
再次登录就发现不 ssh0.71
3 要求只让 0. 段内的主机 ssh 连接 0.71 主机, 0.71 主机也有且只能能 ssh0 网段内的任一主机
先清空下 iptables 规则,定义规则 0 网段可以访问 71 主机
 
[root@station71 ~]# iptables -F
[root@station71 ~]# iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.71 -p tcp --dport 22 -j ACCEPT
定义规则 0.71 可以通过本机 22 端口 ssh0.0 网段内的任一主机 ( 注意端口为源端口 )
 [root@station71 ~]# iptables -A OUTPUT -s 192.168.0.71 -d 192.168.0.0/24 -p tcp --sport 22  -j ACCEPT
iptables �CL 一下会看到链 INPUT ,FORWARD,OUTPUT 后都有( policy ACCEPT )它表示若是找不到匹配规则,则默认为 ACCEPT ,所以我们还要对 0 网段以外的网段做拒绝规则,忘了没有 -P 是修改规则的默认策略
[root@station71 ~]# iptables -t filter -P INPUT DROP
[root@station71 ~]# iptables -t filter -P OUTPUT DROP
[root@station71 ~]# iptables -t filter -P FORWARD DROP
但是大家发现没有上述策略中 71 主机就不能 ping 通自己了
所以我们再给它加两天规则
[root@station71 ~]# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
[root@station71 ~]# iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
现在大家想一个问题,我们把 PORWARD 也该为了默认 DROP ,但是现在为什么不给 PORWARD 也做一个类似上面两个的策略呢?对了,因为 PORWARD    数据转发过滤点, ping 命令过滤就不经过这一过滤点   。测验一下吧
4 现在有一个防火墙的外网网关像外部声称有 web 服务器,实际没有当有外网主机访问 web 服务器时,它就做转发到内网 web 服务器上现在我们写下这个地址转换
 

 
这是外网访问内网是做目的地址转换
用三台虚拟机一台模拟内网,一台模拟外网,一台加一块网卡模拟防火墙
在防火墙主机上配置路由
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl �Cp  执行命令使路由生效
cat /proc/sys/net/ipv4/ip_forward
1                   出现 1 为配置正确
让外网和内网的主机分别指向其相对的防火墙网卡
[root@station10~]#iptables -t nat -A PREROUTING -s 192.168.10.0/24 -d 192.168.10.10 -p tcp --dport 80 -j DNAT --to-dest 192.168.100.101 现在条件改变,若是外网存在 web 服务器,现在想内网主机访问外网服务器
[root@station10~]#iptables -t nat -A POSTOUTING -s 192.168.100.0/24 -d 192.168.10.0/24 -p tcp --sport 80 -j SNAT --to-source 192.168.10.10
 
 
 

你可能感兴趣的:(linux,职场,iptables,休闲)