- 了解iptables的基本知识和工作原理
- 掌握iptables的基本语法结构
- 掌握常见的iptables规则配置
-
一、防火墙介绍
防火墙分类和作用
- 硬件防火墙
- 软件防火墙
- 硬件防火墙
- iptables处于传输层
- iptables是表(4张)的集合,表是链(5条)的集合,链是规则的集合
- 查看filter(nat表,mangle表,raw表)表内的链,
iptables -t filter/nat -L
- 查看filter(nat表,mangle表,raw表)表内的链,
功能:
iptables -L
-
filter表
1.全部允许/拒绝/丢弃
iptables -t filter -A INPUT -j DROP
在filter表中的INPUT链上,添加规则,丢弃所有进来的数据包iptables -t filter -A INPUT -j ACCEPT
添加规则,允许所有进来的数据包iptables -t filter -I INPUT 2 -j REJECT
指定位置插入规则,拒绝所有进来的数据包为第2条规则- -R 可以用来覆盖第几条规则 release
iptables -t filter -P INPUT DROP
修改链上的默认规则iptables -t filter -A INPUT -j LOG
第一条规则匹配的是写日志,然后接着往下匹配-
2.根据源地址和目标地址匹配
iptables -t filter -R INPUT 1 -i lo -j ACCEPT
从lo(网卡接口)进入的数据包iptables -t filter -A OUTPUT -o eth0 -j DROP
output从eth0出去的数据包,拒绝,ping测试iptables -t filter -P INPUT DROP
iptables -t filter -A INPUT -s 10.1.1.2 -j ACCEPT
只允许10.1.1.2主机来访问本机iptables -nL
不需要解析,查看规则(或是在hosts里面添加上ip10.1.1.2的信息)iptables -t filter -A INPUT -s 10.1.1.0/24 -j ACCEPT
允许整个网段来访问
iptables -t filter -P OUTPUT DROP
iptables -t filter -A INPUT -s 10.1.1.2 -j ACCEPT
允许源地址为10.1.1.2的数据包通过iptables -t filter -A OUTPUT -d 10.1.1.2 -j ACCEPT
目标为10.1.1.2的出去的包被允许通过- 这样就可以ping通10.1.1.2
iptables -t filter -A INPUT -p tcp -s 10.1.1.2 -j DROP
拒绝来自10.1.1.2的访问,比如不让他访问网站服务或ssh到你的主机iptables -t filter -A INPUT -p tcp --dport 22 -s 10.1.1.2 -j DROP
拒绝访问当前服务器的22端口的服务(ssh)echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
这个配置文件,也可以达到效果
需求1:只允许自己ping通别人,不允许别人ping通自己
iptables -t filter -A INPUT/DROP -j DROP
全部都拒绝,哪个是允许的,那下面对应的那条规则就不需要配了iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT
需求2:只允许自己和10.1.1.2相互ping通,其他人不能ping通自己,但是允许自己ping通别人
iptables -A INPUT -s 10.1.1.2 -p icmp --icmp-type 8 -j ACCEPT
- INPUT 和 OUTPUT默认都是DROP的状态,否则:
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -t filter -A OUTPUT -d 10.1.1.2 -p icmp --icmp-type 0 -j ACCEPT
4.根据端口匹配过滤
iptables -A INPUT -s 10.1.1.2 -p tcp --dport 20:80 -j ACCEPT
iptables -A OUTPUT -d 10.1.1.2 -p tcp --sport 20:80 -j ACCEPT
iptables内置模块
-m参数+<模块>,multiport 多端口,
- 指定多个不连续的端口,减少iptables的条目,达到优化效果
iptables -t filter -I INPUT -s 10.1.1.2 -m multiport -p tcp --dports 20:22,80 -j ACCEPT
- 指定多个不连续的端口,减少iptables的条目,达到优化效果
iptables -m range --help
指定ip范围iptables -t filter -I INPUT -m iprange --src-range 10.1.1.2-10.1.1.10 -p tcp --dport 80 -j ACCEPT
state 连接状态, 目的:根据连接请求的状态进行数据过滤
公司内部员工访问互联网SNAT
- 需要中间件,也就是交换机,路由器
- 需要中间件,也就是交换机,路由器
-
地址转换原理
源地址转换(SNAT)
source-IP源IP
d-IP目标IP 源地址的转换,是在路由之后做的,也就是在 POSTROUTING 这条链上
目标地址转换(DNAT)
地址转换应用
源地址转换—SNAT
环境:
client:10.1.1.2
nat-server:10.1.1.1(eth0) 和 2.2.2.1(eth1)
web-server:2.2.2.2
需求:
client是私有IP,想要访问互联网中的web服务
步骤:
- client:设置自己的默认路由(网关),指向nat-server服务器
route add default gw 10.1.1.1
- nat-server:开启路由转发功能并添加防火墙规则
echo 1 > /proc/sys/net/ipv4/ip_forward
重启失效iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to 2.2.2.1
- 转换成自己的公网地址2.2.2.1
- 转换成自己的公网地址2.2.2.1
- 意思是,让nat-server服务器来代替client去上网
iptables -nL
- web-server:搭建web服务
echo "this is snat test page" >> /var/www/html/index.html
service httpd restart
netstat -nltp | grep 80
route -n
- client测试验证:client端10.1.1.2是否可以访问web-server端2.2.2.2的web服务
思考:家里实现上网和上面哪里不同?
家里的路由,是获取的动态的公网地址,不固定 地址伪装
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE
- 这样就不担心当中间件的公网IP变化时,访问不到外网的情况
总结:
- SNAT源地址转换目的实现私网地址可以访问互联网
- NAT设备可以是硬件防火墙、路由器等物理设备,但都得具有路由和地址转换功能
- 当请求发送到NAT设备后,NAT设备首先查看自己的路由表,
- 然后进行地址转换。所以应该在nat表的POSTROUTING 链上进行源地址转换
- 然后进行地址转换。所以应该在nat表的POSTROUTING 链上进行源地址转换
- 对于nat表和filter表,数据包进来先经过nat表的PREROUTING链,再经过路由表,再选择不同的路出去
目标地址转换—DNAT
- 从右往左看,例如,内部服务器要发布一个网站到公网上
环境:
web-sertver:10.1.1.3
nat-server:10.1.1.1和2.2.2.1
client:2.2.2.2
需求:公网用户client访问私网服务器提供的web服务
步骤:
- web-server:10.1.1.3上搭建web服务
route add default gw 10.1.1.1
这样,回包的时候,就会发送到nat-server上去
- nat-server:10.1.1.1、2.2.2.1开启路由转发功能,并添加DNAT规则
echo 1 > /proc/sys/net/ipv4/ip_forward
开启了路由转发iptables -t nat -A PREROUTING -d 2.2.2.1 -p tcp --dport 80 -j DNAT --to 10.1.1.3
iptables -t nat -nL
- client:客户端测试验证