防火墙iptables

Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤
的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。

iptables是linux2.4及2.6内核中集成的服务。
iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制

 

 

iptables---表---链---规则
/etc/sysconfig/iptables 

  

规则:防火墙一条一条安全策略
防火墙匹配规则流程:参见防火墙工作流程图
1.	防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2.	如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则。
3.	如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,
	向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4.	防火墙的默认规则是所有规则执行完才执行的。

4表5链

Filter 
防火墙安全过滤功能
· INPUT 对于指定到本地套接字的包,即到达本地防火墙服务器的数据包 外面---->(门)房子iptables · FORWARD 路由穿过的数据包,即经过本地防火墙服务器的数据包 外面-----(前门)房子(后门)---房子 · OUTPUT 本地创建的数据包 外面<-----(门)房子iptables
NAT
实现将数据包中IP地址或者端口信息,内网到外网进行改写/外网到内网进行改写
· PREROUTING     一进来就对数据包进行改变             在路由之前,进行数据包IP地址或端口信息的转换           
· OUTPUT	     本地创建的数据包在路由之前进行改变   本地防火墙要出去的流量进行相应转换(了解)
· POSTROUTING	 在数据包即将出去时改变数据包信息     在路由之后,进行数据包IP地址或端口信息的转换
Managle
对数据进行标记
raw
 忽略不计

 

防火墙的时序表

 

 

 

 

 操作练习

iptables防火墙配置初始化
/etc/init.d/iptables start
chkconfig iptables on
iptables -F              --- 清除防火墙默认规则(清除filter)
iptables -X              --- 清除防火墙自定义链(清除filter)
iptables -Z              --- 清除防火墙计数器信息(清除filter)
iptables防火墙信息查看方法  
/etc/init.d/iptables status
iptables -L              --- -L 以列表形式显示所有规则信息
iptables -L -n           --- -n 以数字形式显示IP地址或端口信息,不要转换为字符串显示
iptables -t nat -L -n    --- -t 表示指定查看或者配置相应的表
iptables -L -n -v        --- -v 表示显示详细规则信息,包含匹配计数器数值信息
iptables -L -n --line-number      --- --line-number 显示规则序号信息
iptables防火墙端口规则配置

 实践01:阻止用户访问服务器的22端口

iptables -t filter -A INPUT -p tcp --dport 22 -j DROP   --- -A 表示添加规则到相应链上,默认表示添加规则到结尾
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP   --- -D 表示删除规则从相应链上。
iptables -t filter -D INPUT 规则序号
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP   --- -I 表示插入规则到相应链上,默认表示插入规则到首部
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP --- 指定规则插入位置
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP   --- -R 指定将配置好的规则信息进行替换

实践02:10.0.0.0/24 -- 22端口(阻止)阻止相应网段主机访问服务端指定端口服务

iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP   
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j DROP 
iptables -t filter -A INPUT -i eth0 -s 10.0.0.9 -p tcp --dport 22 -j DROP 

总结参数信息:
-p   --- 指定相应服务协议信息(tcp udp icmp all)
	--dport    --- 表示指定目标端口信息
	--sport    --- 表示指定源端口号信息
-j   --- 指定对相应匹配规则执行什么操作(ACCEPT DROP  REJECT)
-s   --- 指定匹配的源地址网段信息,或者匹配的主机信息
-d   --- 指定匹配的目标地址网段信息,或者匹配的主机信息
-i   --- 指定匹配的进入流量接口信息 只能配置在INPUT链上
-o   --- 指定匹配的发出流量接口信息 只能配置在OUTPUT链上

实践03:除了某个地址可以访问22端口之外,其余地址都不能访问

iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP 

iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j DROP
通过利用 !进行规则取反,进行策略控制

实践04:指定阻止访问多个端口服务

22--80 22,24,25
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP    --- 匹配连续的端口号访问
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP   --- 匹配不连续的端口号访问

总结参数信息:
iptables本身不支持匹配不连续的端口号
-m   --- 指定应用扩展模块参数
	multiport   --- 可以匹配多个不连续端口信息

实践05: 通过防火墙实现禁ping功能

实现ping功能测试链路是否正常,基于icmp协议实现的
icmp协议有多种类型:
icmp-type 8:请求类型  icmp-type 0:回复类型	   

情况一:实现禁止主机访问防火墙服务器(禁ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP

情况二:实现禁止防火墙访问主机服务器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j DROP

默认情况:所有icmp类型都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP

实践06:实现防火墙状态机制控制

NEW: 发送数据包里面控制字段为syn=1,发送第一次握手的数据包
ESTABLISHED: 请求数据包发出之后,响应回来的数据包称为回复的包
RELATED: 基于一个连接,然后建立新的连接
INVALID: 无效的的数据包,数据包结构不符合正常要求的

iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

 

 防火墙nat表的配置实践

 

nat表 就两个链常用
01. postrouting(内网---外网-NAT  源私网IP地址---源公网IP地址)
    路由之后,进行地址映射转换,把源地址进行转换(源私网地址==>源公网地址)
02. prerouting(外网---内网-NAT  目标公网IP地址---目标私网IP地址  映射目标端口)
    路由之前,进行地址映射转换,把目标地址进行转换(目标公网地址==>目标变为私网地址)

iptables实现共享上网方法(postrouting)

1、配置内网服务器,设置网关地址

/etc/init.d/iptables stop    --- 内网服务器停止防火墙服务
ifdown eth0                  --- 模拟关闭内网服务器外网网卡
setup                        --- 修改内网网卡网关和DNS地址信息
[root@oldboyedu42-lnb-02 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         172.16.1.7      0.0.0.0         UG    0      0        0 eth1

2、配置共享上网服务器,开启共享上网服务器路由转发功能

vim /etc/sysctl.conf 
sysctl -p
net.ipv4.ip_forward = 1

3、配置共享上网服务器,实现内网访问外网的NAT映射

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7
-s 172.16.1.0/24		  --- 指定将哪些内网网段进行映射转换
-o eth0				  --- 指定在共享上网哪个网卡接口上做NAT地址转换
-j SNAT                --- 将源地址进行转换变更
-j DNAT                --- 将目标地址进行转换变更
--to-source ip地址         --- 将源地址映射为什么IP地址
--to-destination ip地址    --- 将目标地址映射为什么IP地址

扩展如果开启:forward默认drop策略,如果配置forward链
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT

网络数据包传输过程一定是有去有回的

iptables实现共享上网方法(postrouting)

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE		<- 伪装共享上网
说明:在企业中如何没有固定外网IP地址,可以采取以上伪装映射的方式进行共享上网

总结:配置映射方法
01. 指定哪些网段需要进行映射    -s 172.16.1.0/24 
02. 指定在哪做映射               -o eth0
03. 用什么方法做映射             -j SNAT/DNAT
04. 映射成什么地址               --to-source  ip地址/--to-destination ip地址

iptables实现外网IP的端口映射到内网IP的端口

需求:将网关的IP和9000端口映射到内网服务器的22端口
端口映射 10.0.0.7:9000 -->172.16.1.8:22  
实现命令:
iptables -t nat -A PREROUTING -d 10.0.0.7  -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:22

(1)-d 10.0.0.8目标地址。
(2)-j DNAT 目的地址改写。

 

 企业应用中防火墙配置

  1. 保存防火墙配置文件信息
    cp /etc/sysconfig/iptables{,.bak}
  2. 清除配置规则
    iptables -F    <- 清空iptables所有规则信息(清除filter)
    iptables -X    <- 清空iptables自定义链配置(清除filter)
    iptables -Z    <- 清空iptables计数器信息(清除filter)
  3. 别把自己踢出到门外
    iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT
  4. 配置防火墙filter上各个链的默认规则
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    -P   --- 指定相应链的默认规则策略,是允许还是阻止
  5. 允许iptables服务端ping自己的网卡地址
    iptables -A INPUT -i lo -j ACCEPT   --- 让自己可以ping自己
    		  loopback
  6.  指定外网可以访问的端口信息
    iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT 
  7.  企业中内网之间不要配置防火墙策略
    iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT  --- 允许架构内部服务进行访问
  8.  企业之间有合作关系的,不要将友商的网络禁止(主要经常改动)
    iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT    --- 允许一些合作企业的外网服务器进行访问
    iptables -A INPUT -s 10.0.2.0/24 -j ACCEPT
  9.  如果防火墙上配置了FTP服务,需要配置网络状态机制
    iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT  --- 允许web服务与ftp服务器建立连接
  10.  实现iptables策略配置永久保存
    ①. 利用防火墙启动脚本命令参数,实现永久保存
    /etc/init.d/iptables save
    
    ②. 利用防火墙配置信息保存命令,实现永久保存
    iptables-save >/etc/sysconfig/iptables
    

      

posted @ 2019-04-27 17:32  慕沁  阅读(192)  评论(0)    收藏  举报