当前位置:文档之家› exe_07_iptables

exe_07_iptables

Iptables
1、包过滤防火墙
根据数据包的源端口、目的端口、源IP、目的IP、协议等过滤(四层防火墙)
2、应用代理防火墙
工作在应用层,能够检测数据包的内容时候合法,但处理效率比较慢
3、状态检测防火墙
Iptables的两个组件:
netfilter \ iptables
判断操作系统是否支持iptables的防护:
/lib/iptables/
/lib/modules/2.6.18-128.el5/kernel/net/netfilter/
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/netfilter/
基本概念
表: filter , nat ,mangle , raw 针对不同的处理需求定义了不同的表
filter 主要用来过滤数据包 : INPUT,OUTPUT,FORWARD
nat 专门是用网络地址转换 : PREROUTING,OUTPUT,POSTROUTING
mangle 专门用于数据包标志 : 所有的链
raw 对原始数据包的处理 :PREROUTING,OUTPUT
规则: 定义什么样的数据包,什么样的连接能够通过或者不能通过
链: 把多个处理相同类型的规则组合在一起
PREROUTING 处理路由前的数据包
INPUT 处理传输给本身的数据包,方向是传入
FORWARD 处理不是发给本身的数据包,这些数据包是传输给别的主机的
OUTPUT 处理传出的数据包
POSTROUTING 处理路由之后的数据包
拦截的动作
ACCEPT , DROP ,REJECT , LOG ,SNAT ,MASQUERADE , DNAT
编写规则的常用参数
iptables
-L 列出所有的规则
-n 以数值的方式显示规则
-A 追加一条新的规则,默认就是在最后追加
-I 插入一条新的规则,默认就是在最前面插入一条规则
-D 删除一条规则
-v 显示统计数据,一般结合 -L使用
清空规则
-X 删除自定义的链
-Z 清空统计数据
-P 定义默认策略
-t 指定添加的规则处理哪个表
-F 清空某个表的所有规则,但不会改变默认策略
实例1、
显示所有规则
# iptables -L -n
# iptables -L -n -v
实例2、禁止ping的数据包通过(禁止ping别人,也禁止别人ping你)
# iptables -t filter -A INPUT -p icmp -j DROP
-p 指定数据包的协议类型
-j 后面指定处理的动作
为了允许ping 127.0.0.1能够成功,添加一下规则:
# iptables -t filter -A INPUT -p icmp -i lo -j ACCEPT

你会发现最终还是无法ping通,这是因为规则是分先后的,先匹配最上面的规则,一匹配就停止继续往下匹配,我们要这样处理:
先删除不起作用的规则:
# iptables -t filter -D INPUT -p icmp -i lo -j ACCEPT 《---最笨的方法
或者
# iptables -L -n --line-number
# iptables -D INPUT 2
重新把规则放到正确的位置
# iptables -t filter -I INPUT -p icmp -i lo -j ACCEPT
实例3、规则管理
保存规则
service iptables save
/etc/sysconfig/iptables
清空规则
iptables -F 默认清空filter表的规则,下面的所有命令只是临时清空规则,不会更改/etc/sysconfig/iptables的规则数据
iptables -t filter -F
iptables -F
iptables -Z
iptables

-X
ipables -t nat -F
iptables -t nat -Z
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z
iptables -t raw -F
iptables -t raw -X
iptables -t raw -Z
实例4、允许ping 127.0.0.1 和 允许 ping 10.1.1.0/24,其他服务都拒绝
(1)[root@dns ccna]# iptables -A INPUT -i lo -p icmp -j ACCEPT
(2)[root@dns ccna]# iptables -A INPUT -p icmp -s 10.1.1.0/255.255.255.0 -j ACCEPT
(3)[root@dns ccna]# iptables -A INPUT -j DROP
实例5、在上一个例子的基础上,对外开放web服务器
要求把规则插入到第三位
[root@dns ccna]# iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT
实例6、从上面的例子中引出默认策略
iptables -P INPUT DROP
实例6、只允许访问本机的ssh服务,其他服务都拒绝
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP
当前的规则还不能让自己ssh到自己的

实例7、定义连续端口
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp --dport 20:100 -j ACCEPT
实例8、定义多端口,引出“模块”的概念
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -m multiport --dport 22,80,110 -j ACCEPT
实例9、允许内网(10.1.1.0/24)的客户与我本机所有的通信,别的都拒绝
# iptables -P INPUT DROP
# iptables -A INPUT -p ALL -s 10.1.1.0/255.255.255.0 -j ACCEPT
实例10、拒绝本机访问色情网站https://www.doczj.com/doc/9616345630.html,
# iptables -P INPUT ACCPET
# iptables -A INPUT -p tcp --sport 80 -s https://www.doczj.com/doc/9616345630.html, -j DROP
<<<<<<<<
假如本机机器作为网关,或者代理服务器,需要拒绝客户访问https://www.doczj.com/doc/9616345630.html,
iptabls -A OUTPUT -p tcp --dport 80 -d https://www.doczj.com/doc/9616345630.html, -j DROP
>>>>>>>>
实例11、通过硬件地址实现拦截
# iptables -P INPUT ACCEPT
# iptables -A INPUT -m mac --mac-source 00:25:86:8e:aa:4e -p tcp --dport 80 -j DROP
默认策略什么时候用DROP,什么时候用ACCEPT?
如果规则里面都是一些允许访问的规则(-j ACCEPT),为了实现只开放某个些服务的目标,这个时候使用的默认策略 DROP

相反,就选取ACCEPT
实例12、定义连续IP
# iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 10.1.1.140-10.1.1.254 -j DROP
使用到了 iprange的模块
实例13、记录日志,把远程登录到本机的信息都记录到/var/log/messages
# iptables -A INPUT -p tcp --dport 22 -j LOG --log-level notice --log-prefix "Iptables : "
# iptables -A INPUT -p tcp --dport 22 -j DROP <---先记录日志再拒绝访问
实例14、
实现只开放ssh服务
[root@dns 12]# iptables -P INPUT DROP
[root@dns 12]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@dns 12]# iptables -A INPUT -i lo -j ACCEPT
实现是开放ssh服务的同时,能够远程登录别人的电脑
方法一:
继续添加一条规则
[root@dns 12]# iptables -A INPUT -p tcp --sport 22 -j ACCEPT
方法二:
[root@dns 12]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
数据包的四种状态
NEW 新的数据包,也就

是想要建立连接所发送的第一个数据包
ESTABLISHED 已经建立通讯的数据包,数据包是完整有效。
RELATED 在已经建立的通讯的基础上相关的数据包。
INVALID 无效的数据包
引入状态检测规则的好处:
1、能够让本机成为各种服务的客户端
2、提高iptables工作效率
实例15、本机只开发web服务,其他服务一概拒绝,但本机可以访问外部一些资源,例如,本机可以访问外部的互联网,可以远程登录别人的电脑等等。允许本机lo的所有通信。
[root@dns 12]# iptables -P INPUT DROP
[root@dns 12]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@dns 12]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@dns 12]# iptables -A INPUT -i lo -j ACCEPT
16、只允许本机查询外部的DNS服务器,别的服务都不允许
[root@dns 12]# iptables -P INPUT DROP
[root@dns 12]# iptables -A INPUT -p udp --sport 53 -j ACCEPT
[root@dns 12]# iptables -A INPUT -p tcp --sport 53 -j ACCEPT
17、开放工作在主动模式下的ftp服务
主动模式: 控制命令的数据包传输使用21端口,普通数据的数据包传输的时候,就是ftp服务器使用20端口主动连接客户端的>1024的端口。
被动模式:控制命令的数据包传输使用21端口,普通数据的数据包传输的时候,就是客户端主动告诉服务器打开某个端口(>1024),然后客户端主动连接服务器的这个端口。
1187 iptables -P INPUT DROP
1188 iptables -A INPUT -p tcp --dport 21 -j ACCEPT
1189 iptables -A INPUT -p tcp --dport 20 -j ACCEPT
18、开放工作在被动模式下的ftp服务
[root@dns 12]# modprobe ip_conntrack_ftp
[root@dns 12]# iptables -P INPUT DROP
[root@dns 12]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@dns 12]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@dns 12]# iptables -A INPUT -i lo -j ACCEPT
综合实例:
本机需要开放的服务有: ssh 、 web 、 ftp (被动模式) 、DNS 、能够接受邮件、能够发送邮件。
其中web、ftp 、pop3 、pop3s 、 IMAP 、IMAPS 允许所有网络的人访问;
ssh 只允许本地局域网的某个MAC地址访问;
只允许本地局域网的用户连接服务器发送邮件;
只接受本地局域网的客户的DNS查询请求。
# modprobe ip_conntrack_ftp
# iptables -P INPUT DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -p tcp -m multiport --destination-ports 20,21,80,110,143,993,995 -j ACCEPT
# iptables -A INPUT -m mac --mac-source 00:25:86:8E:AF:C8 -p tcp -s 10.1.1.0/24 --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --dport 25 -s 10.1.1.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 53 -s 10.1.1.0/24 -j ACCEPT
# iptables -A INPUT -p udp --dport 53 -s 10.1.1.0/24 -j ACCEPT
作业:
1、通过脚本,把连续3次尝试ssh登录失败的IP

放到Iptables进行DROP掉
2、把netstat -nt状态中属于SYN_RECV的IP放到防火墙进行DROP,规则保留3天,不能有重复的规则,3天后把对应的规则删除 (IP重复3次以上的都放到iptables进行拦截)
syn.txt
答案参考这两个脚本:
dos_attach.sh dos_unattach.sh
禁止登录QQ
实现思路:把所有的QQ的登录服务器都屏蔽 qq.txt
===============================================================
源地址映射 SNAT
例子1:
内部网络 | 互联网
[vm1_client] eth0 172.16.254.129 <-----> 172.16.254.1 vmnet1 [真实机] eth0 192.168.20.20
需要让vm1上网的基本步骤:
1、配置正确IP
2、配置正确的网关
gw 172.16.254.1
3、配置正确的DNS
192.168.20.1
真实机需要配置成一个路由器的角色
1、修改内核参数,启用路由转发的功能
# echo "1" > /proc/sys/net/ipv4/ip_forward
永久生效:
[root@dns 12]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@dns 12]# sysctl -p
2、配置Iptables
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.20.20
例子2:
host-only (内网) | 外网,模拟互联网
[vm2] eth0 <---> eth0 [vm1_Router] eth1 <---> eth0 [真实机]
172.16.254.128 172.16.254.129 10.1.1.21 10.1.1.20
实现目标: vm2能够使用http://10.1.1.20访问 真实机的web服务
vm2需要设定的:
gw : 172.16.254.129
vm1_Router需要设定的:
1、启用路由转发
[root@vm2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@vm2 ~]# sysctl -p
2、配置iptables,实现snat
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 10.1.1.21
===================================================
目标地址映射 DNAT
vm1和vm2都是桥接网络
(内网) | 外网,模拟互联网
[vm2_web] eth0 <---> eth0 [vm1_Router] eth1 <---> eth0 [真实机]
192.168.8.2 192.168.8.1 10.1.1.21 10.1.1.20
实现的目标: 互联网的机器10.1.1.20能够使用http://10.1.1.21 访问vm2_web的web服务
vm2_web的配置:
1、默认网关
# route -n
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 eth0
2、配置web服务
互联网的机器,真实机的配置:
1、默认网关
[root@dns 12]# route -n
0.0.0.0 10.1.1.21 0.0.0.0 UG 0 0 0 eth0
vm1_Router的配置
1、启用路由转发
2、配置iptables,使其支持DNAT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -d 10.1.1.21 -j DNAT --to 192.168.8.2
==================================================
练习
Server(web,ftp)172.16.254.128 ----\
172.16.254.1 ----> vmnet1 [Router 真实机] eth0 (10.1.1.20)
Client-172.16.254.129------------/
实现:
Server服务器提供ftp/web服务,其中ftp仅仅供内部网络的客户访问,web服务器可以让互联网的用户访问(DNAT)
所有的员工只允许访问互联网web服务,已经收发邮件
禁止所有员工使用QQ聊天工具
管理员可以远程登录 Router进行

管理,其他对于router直接操作都禁止掉
安全要求:
防止CC攻击服务器的web服务,每个IP最多允许建立15个连接,超过就丢弃
connlimit

防止轻量级的DOS攻击SYN洪水攻击,每秒服务器最多处理100个连接
limit
Server的配置:
[root@vm2 ~]# route add default gw 172.16.254.1
Client的配置:
[root@vm1 ~]# route add default gw 172.16.254.1
Router的配置:
1、清空原有的规则
2、定义默认策略
# iptables -t filter -P FORWARD DROP
# iptables -t filter -P INPUT DROP
其他默认策略就是ACCEPT
3、允许本地测试通讯
# iptables -A INPUT -i lo -j ACCEPT
4、为了提高效率,增加状态跟踪规则
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEP
# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
5、禁止员工登录QQ
#!/bin/bash
for a in $(cat ./qq.txt | awk -F: '{print $1}' )
do
iptables -t filter -A FORWARD -d $a -j DROP
done
6、允许内部员工访问互联网的web服务
# iptables -t filter -A FORWARD -p tcp --dport 80 -j ACCEPT
7、间接告诉我们,需要开放dns的通讯
[root@dns 12]# iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT
[root@dns 12]# iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT
8、允许员工收发邮件
/etc/services
25 110 143 993 995
[root@dns 12]# iptables -t filter -A FORWARD -p tcp -m multiport --destination-ports 25,110,143,993,995 -j ACCEPT
[root@dns 12]# iptables -t filter -A FORWARD -p udp -m multiport --destination-ports 25,110,143,993,995 -j ACCEPT
9、允许管理员ssh到router
[root@dns 12]# iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
10、SNAT
[root@dns 12]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.1.1.20
11、DNAT

[root@dns 12]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -d 10.1.1.20 -j DNAT --to 172.16.254.128


相关主题
文本预览
相关文档 最新文档