iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理
用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter。netfilter才是防火墙真正的安全框架(framework),netfiter位于内核空间。iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
iptables是一个基于命令行的防火墙工具,它使用规则链来允许/阻止网络流星。当一条网络连接试图在你的系统中建立时,iptables 会查找其对应的匹配规则。如果找不到,iptables将对其采取默认操作。
iptables的结构是由表(tables)组成,而tables是由链组成,链又是由具体的规则组成。因此我们在编写iptables规则时,要先指定表,再指定链。tables的作用是区分不同功能的规则,并且存储这些规则。
1、五张表: filter, nat, mangle,raw,security:表主要用于将不同的规则存储在不同的表中
(1) filter表:默认表,负责过滤数据包,使用频率高
(2) nat表:用于网络地址转换(IP、端口)和流量转发,使用频率较低
(3)mangle表:主要应用在修改数据包、流量整形、给数据包打标识
(4) raw表:这个表很少被用到,主要用于配置连接跟踪相关内容,使用频率较少
(5) security表:这个表用于安全Linux的防火墙规则,是iptables最近的新增表,使用频率较少
2、五条链:流量的方向
(1) input:匹配目标IP是本机的数据包,入站
(2) output:出口数据包,出站
(3) forward:匹配流经本机的数据包,转发
(4) prerouting:修改目的地址,用来做DNAT。如:把内网中的80端口映射到互联网端口
(5) postrouting:修改源地址,用来做SNAT。如:局域网共享一个公网IP接入Internet。
3、规则:基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后依次执行、遇到匹配的规则就不在继续向下检查、如果遇到不匹配的规则则会继续向下进行。
systemctl stop firewa1ld
firewa11d\\默认在没有设定规则的情况下,是拒绝所有流量,而iptables默认没有设定规则的情况下,是允许所有流量
yum insta1l iptables iptables-services
iptables -nL:将端口号以数字的形式显示默认表filter中的规则
iptables -I INPUT -j DROP:所有入站流量全部丢弃,包括SSH请求
iptables -I OUTPUT -j DROP:所有出站流量全部丢弃,包括SSH响应
上述两条命令一旦执行:所有流量无法进来,所有流量无法出去,断网状态。这个就可以用来控制电脑来是否上网,防止孩子沉迷
iptables -A INPUT -jDROP
iptables -A OUTPUT -j DROP
iptables -I INPUT -p tcp --dport 22 -j ACCEPT:打开目标端口22,接受流经改端口的流量
iptab1es -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p icmp -j REJEC
iptables -I OUTPUT -p icmp -j DROP
DRPO:直接丢失数据包,不会向源端做任何回复REJECT:拒绝接受数据包,并向源端发送拒绝响应
iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
iptables -I INPUT -p icmp --icmp-type echo-request -j REJECT
iptables -I OUTPUT 1 -p icmp --icmp-type echo-reply -j DROP
iptables -L INPUT --Line-numbers\\列出INPUT表的行数信息
iptables -D INPUT 1\\删除INUPT列表第1行的信息
iptables -F\\清空防火墙设置
service iptables save\\保存设置
cat /etc/sysconfig/iptables\\去对应的文件查看配置的信息
#允许本地访问外部IP地址和端口号,通过设定白名单的方式可以防止本机去访问别的服务器
#通过这种场景的设置,可以最大可能避免反弹she11和挖矿程序去试图通过本地访问目标服务器下载恶意程序或执行恶意指令。
iptab1es -I INPUT -i ens33 -p tcp -s 192.168.112.153 --sport 80 -j ACCEPT
iptables -I OUTPUT -o ens33 -p tcp -d 192.168.112.153 --dport 80 -j ACCEPT
#防止DDOS攻击,设定一些数据的限制条件
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
#可以同时设定多个端口被允许
iptables -I INPUT -p tcp -m multiport --dport 80,22,443,3306 -j ACCEPT
#端口转发
#第一种:本机端口转发,比如80端口对外封闭,开放一个45692供外部访问,外部只知道45692,不知道80,可以避免协议猜测
#第二种:远程端口转发,把本机接收到的请求转发到远程电脑和对应端口上〈远程可以是本地局域网,也可以是公网服务器)
#本机端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 80
#远程端口转发:
#需要确保端口转发功能是启用的
vi /etc/sysct1.conf
net.ipv4.ip_forward = 1
sysct1 -p /etc/sysct1.conf
#PREROUTING上访问8888时,转发给目标服务器和目标端口
#PREROUTING是先于FILTER执行的,所以不需要转发时允许8888端口ACCEPT
iptables -t nat -A PREROUTING-d 192.168.112.188 -p tcp --dport 8888 -j DNAT --to-destination 101.37.65.91:80
iptables -t nat -A POSTROUTING -d 101.37.65.91 -p tcp --dport 80 -j SNAT --to 192.168.112.188
| 参数 | 说明 |
|---|---|
| -A | 添加—条规则,即添加在规则的最后 |
| INPUT | 链名、常用、大写 |
| PREROUTING | 链名、大写 |
| OUTPUT | 链名、大写 |
| -l | 指定链中插入规则,即添加到规则最前 |
| -s | 指定源地址,可以是IP地址,也可以是网段;“192.168.109.10/24”; “-s为空”,表示所有 |
| -d | 目标地址 |
| -p | 指定协议 |
| –dport | 指定主机端口(本机开放或拒绝端口) |
| –sport | 指定主机端口(如:禁止连接对方某端口) |
| -i | 指定网卡名,表示报文流入的接口 |
| -o | 指定网卡名,表示报文流出的接口 |
| -j | 指定所需要的操作 |
| ACCEPT | 允许 |
| REJECT | 拒绝,拒绝提供服务 |
| DROP | 拒绝,丢弃数据包不回应 |
| –src-range | 源地址范围,(如:拒绝某lP段访问) |
| –dsc-range | 目标地址的范围 |
| –mac-source | 源主机的mac地址 |
| -t | 指定表名,默认是filter |
| -v | 查看详细信息 |
| -nvL --line-numbers | 查看fliter表中规则的顺序 |
| -nvL -t mangle | 查看mangle表中的防火墙规则 |
| -F | 清空filter表 |
| -l | 指定链中插入规则 |
| -R | 替换规则 |
| -m | 指定模块 |