iptables防火墙
一、防火墙概述:
什么是防火墙:
> 一道保护性的安全屏障
--做网络之间的隔离、保护
二、Linux包过滤防火墙
>RHEL7默认使用的使firewalld作为防火墙
>但firewalld底层还是调用包过滤防火墙iptables
三、iptables的表、链结构
>raw(状态跟踪):prerouting、output
>mangle(包标记):prerouting、postrouting、input、output、forward
>nat(地址转换):prerouting、postrouting、output
>filter(过滤):input、forward、output
五链:INPUT入站规则、OUTPUT出站规则 FORWARD转发规则、PREROUTING路由前规则、POSTROUTING路由后规则
四、包过滤的匹配流程
>规则连内的匹配顺序
-顺序比对,匹配及停止(LOG除外)
-若无任何匹配,则按照该链的默认策略处理
五、iptables用法解析
>1、基本用法
.管理程序的位置: /sbin/iptables
>2、指令组成
.iptables -t 表名 选项 链名 条件 -j 目标操作
例:iptables -t filter -i INPUT -p icmp -j REJECT
>3、注意事项/整体规律
. 可以不指定表,默认为filter表
.可以不指定链,默认为对应表所有链
.如果没有匹配的规则,则使用防火墙默认规则
.选项/链名/目标操作用大写字母,其余小写
六、基本的目标操作
ACCEPT: 允许通过/方形 DROP:直接丢弃,不做任何回应 REJECT:拒绝通过,必要时会给出提示 LOG:记录日志,然后传给下一条规则
七、常用的管理选项
>添加规则: -A 在链的末尾追加一条规
-l 在链的开头(或指定序号)插入一条规则
>查看规则: -L 列出所有的规则
-n 以数字的形式显示地址、端口等信息
--line-numbers 查看规则是显示序号
>删除规则: -D 删除链内指定序号(或内容)的一条规则
-F 清空所有的规则
>默认策略: -P 为指定的链设置默认规则
八、规则的管理实例
1.添加新的规则
>-A 追加 -i 插入
iptables -t filter -A INPUT -p tcp -j ACCEPT
#追加规则值filter表中的INPUT链的末尾,允许任何人使用tcp协议访问本机
iptables -I INPUT -p udp -j ACCEPT
#插入规则值filter表的INPUT链的开头,允许任何事使用udp协议访问本机
iptables -I INPUT 2 -p icmp -j ACCEPT
#插入规则至filter表中的INPUT链的第二行,允许任何人使用ICMP协议访问本机
>-p: 指定协议名或协议号
2.查看规则列表
>-L查看:
iptables -nL INPUT #仅查看INPUT链的规则
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
3.-D删除、-F清空
iptables -D INPUT 3 #删除filter表的INPUT链的第三条规则
iptables -nL INPUT #查看规则确认是否删除
>>依次清空四个表规则: iptables -t nat/mangle/raw -F
4.设置默认规则
>所有链的初始默认规则均为ACCEPT
>通过 -P 选项可以重置默认规则
>ACCEPTE 或者 DROP 默认规则不允许设置REJECT
iptables -t filter -P INPUT DORP #设置INPUT链的默认规则为DROP
九、针对filter的介绍
1、filter表的控制
>1、防护类型及条件
主机/网络型防护;
开启内核的ip转发;
基本的匹配条件。
>2、过滤规则:
封禁IP地址/网段
保护特定网络服务
禁ping相关策略处理
>3.开启内核IP转发:
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf 永久配置
echo 1 > /proc/sys/net/ipv4/ip_forward 临时配置
2、基本匹配条件
>通用匹配:
-可直接使用,不依赖与其他条件或扩展
-包括网络协议、IP地址、网络接口等条件
----选项----|------用法-----------
协议匹配 -p 协议名
地址匹配 -s 源地址、-d 目标地址
接口匹配 -i 收数据的网卡、-o 发数据的网卡
------------|--------------------
>隐含匹配:
-要求以特定的协议匹配作为前提
-包括端口、TCP标记、ICMP类型等条件
----选项----|------用法-------------
端口匹配 --sport 源端口、 --dport 目标端口
ICMP类型匹配 --icmp-type ICMP类型
------注:需要取反条件时,需要用!----
3、过滤规则示例
>封网段禁IP
-主机防护,针对入站访问的源地址
iptables -A INPUT -s 192.168.2.0/24 -j DROP #丢弃192.168.2.0/24网段所有主机发送给本机的数据包
-网络防护,针对转发访问的源地址
>保护特定网络服务
-限制对指定服务端口的访问
4、禁ping相关策略处理
ping的通信流程:
> A ----ping请求(echo-request)---> B
> A <----ping相应(echo-reply)-------B
需求:
>允许本机ping其他主机,但是禁止其他主机ping本机
>iptables -A INPUT -p icmp --icmp-type echo-request -j DROP #仅禁止入站的ping请求,不拒绝入站的ping回应包
十、关于防火墙规则匹配的扩展条件
1、扩展条件的方法
>前提条件:
-有对应的防火墙模块支持
>基本用法:
- -m 扩展模块 --扩展条件 条件值
- 示例: -m mac --mac-source 00:0C:29:74:BE:21
2、常见的扩展条件类型
>1. MAC地址匹配: -m mac --mac-source MAC地址
>2. 多端口配置: -m multiport --sports 源端口列表
-m multiport --dports 目标端口列表
>3、IP范围匹配: -m iprange --src-range IP1-IP2
-m iprange --dst-range IP1-IP2
3、扩展案例
>1、根据MAC 地址封锁主机
适用于交换网络,针对源MAC地址
--不管其IP地址变换。
》》通过抓取数据包获取访问端的MAC地址
-iptables -A INPUT -p tcp --dport 22 \
-m mac --mac-source 52:54:00:00:00:0b -j DROP #拒绝主机远程本机
>2、 多端口案例
一条规则开放多个端口
--比如web、ftp、mail、ssh等
iptables -A INPUT -p tcp -m multiport --dports 20,25,80,110,143,16501:16800 -j ACCEPT #一次性开启20,25,80,110,143,16501到16800所有的端口
>3、根据ip范围封锁主机
ssh登录的IP范围控制
-允许从192.168.4.10-192.168.4.20登录
-禁止从192.168.4.0/24网段其他主机登录
iptables -A INPUT -p tcp -dport 22 -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 192.168.4.0/24 -j DROP
十一、NAT表的典型应用
1、NAT转换原理
>私有地址的局限性
--比如看网页、收邮件、。。。
--源地址为私有地址,服务器如何给出回应----需要通过转换
2、SNAT源地址转换
> -用来修改数据包的源地址
-仅用于nat表的POSTROUTING链
3、配置SNAT共享上网
>配置关键策略
- 需要开启路由配置
-选择路由后,针对来自局域网,即将从外网接口发出去的包,将源IP地址修改为网关的公网IP地址
iptables -t nat -A POSTROUTING -s 192.168.4.0/24(局域网网段地址) -p tcp --dport 80 -j SNAT --to-source 192.168.2.5(外网接口IP地址)
4、地址伪装策略
>共享动态公网IP地址实现上网
-主要针对外网接口的IP地址不固定情况
-将SNAT改为MASQUERADE
-对于ADSL宽带拨号连接,网络接口可写ppp+
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o ens33 -j MASQUERADE --to-source 174.16.16.1
5.iptables的常见生产应用
1.端口映射
2.把访问外网ip及端口映射到内网的某个服务端口
3.把访问LVS/nginx的外网vip及80端口请求映射到IDC负载均衡内部的ip及端口上。
4.大并发场景的iptables优化
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_建立= 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_net_wait_=60
net_netfilter.nf_conntrack_tcp_timeout_time_wait_120
6.解决DDOS攻击的案例脚本
netstat -na|grep EST|awk -F “[ :]+” ‘{print $6}’|sort|uniq -c >>/tmp/a.log
while true
do
grep EST a.log|awk -F ‘[ :]+’ ‘{print $6}’|sort|uniq -c >/tmp/tmp.log
exec </tmp/tmp.log
while read line
do
ip=echo $line|awk "{print $2}"
count=echo $line|awk "{print $1}"
if [ $count -gt 100 ] && [ iptables -L -n|grep $ip|wc -l -lt 1 ]
then
iptables -I INPUT -s ip−jDROP//−I将其封杀在iptables显示在第一条 echo"ip−jDROP//−I将其封杀在iptables显示在第一条echo"line is
dropped" >>/tmp/dropip.log
fi
done
sleep
done
netstat -na|grep EST|awk -F “[ :]+” ‘{print $6}’|awk ‘{S[$1]++}END{for(i in S) print i,S[i]}’