IPTables应用
一、IPTables防火墙介绍
一旦重启IPTables,所有规则均失效
IPTables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过IPTables这个代理,将用户的安全设定执行到对于的“安全框架”中,这个“安全框架”才是真正的防火墙,这个框架的名字叫netfilter,netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。IPTables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。netfilter/iptables(下文简称iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
iptables是一个基于命令行的防火墙工具,它使用规则链来允许/阻止网络流量。当一条网络连接试图在你的系统中建立时,iptables会查找对应的匹配规则。如果找不到,iptables将对其采取默认操作。
iptables的结构是由表(tables)组成,而tables是由链组成,链又是由具体的规划组成。因此我们在编写iptables规则时,要先指定表,再指定链。tables的作用是区分不同功能的规则,并储存这些规则。
1、五张表:filter、nat、mangle、raw、security。主要用于将不同的规则存储在不同的表中
- filter表:默认表,负责过滤数据包(使用频率最高)
- nat表:用于网络地址转换(IP、端口)和流量转发,使用频率较低。
- mangle表:主要应用在修改数据包、流量整形、给数据包打标识
- raw表:这个表很少用到,主要用于配置连接跟踪相关内容,使用频率较少
- security表:这个表用于安全Linux的防火墙规则,是iptables最近的新增表,使用频率较少
2、五条链:流量方向
- input:匹配目标IP是本机的数据包,入站
- output:出口数据包,出站
- forward:匹配流经本机的数据包
- prerouting:修改目的地址,用来做DNAT。如:把内网中的80端口映射到互联网端口
- postrouting:修改源地址,用来做SNAT。如:局域网共享一个公网IP接入internet。
3、规则
- 基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后依次执行、遇到匹配的规则就不再继续向下检查、如果遇到不匹配的规则则会继续向下进行。
二、安装与配置IPTables
- 对于Redhat体系的Linux发行版本,目前主流的是Yum+Rpm的方式,可以在线安装依赖。在新的CentOS-8以后的版本中,引入了新的安装方式:dnf,本质上跟yum几乎没有区别
- 对于Debian体系的Linux发行版本,主要安装命令两个:apt-get,apt,优先考虑使用apt
firewalld防火墙是Centos7系统默认的防火墙管理工具,取代了之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙。
systemctl stop firewalld //firewalld默认在没有设定规则的情况下,是拒绝所有流量,而iptables默认没有设定规则情况下,允许所有流量
yum install iptables iptables-services //安装保存防火墙规则的工具
三、基本的命令使用
核心用法:
(1)iptables -nL //将端口号以数字的形式显示默认表filter中的规则
(2)iptables -A INPUT -j DROP //关闭所有入站流量,全部丢弃,包括SSH请求,先关闭在进行设置允许进入的规则,防火墙这样才有用
(3)iptables -A OUTPUT -j DROP //所有出站流量全部丢弃,包括SSH响应
(4)iptables -I INPUT -j DROP
iptables -I OUTPUT -j DROP
-A代表追加
-I代表插入到开头
上述两条命令一旦执行,所有流量无法进来,所有流量无法出去,为断网状态
使用该命令先创建规则
-I就是先插入最开始先匹配那个规则,优先级最高,然后在执行拒绝流量
(5)iptables -I INPUT -p tcp --dport 22 -j ACCEPT //打开目标端口22,接受流经该端口的流量
(6)iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT //打开源22端口
--dport代表目的地
(7)iptables -I INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT //同时设定多个端口被允许
(8)iptables -I INPUT -p icmp -j DROP //DROP:直接丢弃数据包,不会向源端做任何回复
(9)iptables -I INPUT -p icmp -j REJECT //REJECT:拒绝接受icmp数据包,并向源端发送拒绝响应
// DROP和REJECT区别就是一个有说明一个没有
(10)iptables -I OUTPUT -p icmp -j DROP //拒绝发送icmp数据包,并向源端发送拒绝响应
(11)iptables -L OUTPUT --line-numbers //显示出战规则的行号
(12)iptables -D OUTPUT 3 //删除出战规则第三行的规则
(13)service iptables save //由于IPTables重启后所有规则均会失效,所以可以使用此命令保存规则
cat /etc/sysconfig/iptables //规则会保存到iptables文本里
(14)iptables -F //清空规则
进阶用法:
(15)//允许本机访问外部IP地址和端口号,通过设定白名单的方式可以防止本机去访问别的服务器
//通过这种场景的设置,可以最大可能避免反弹Shell和挖矿程序去试图通过本地访问目标服务器下载恶意程序或执行恶意命令
iptabels -I INPUT -i ens33 -p tcp -s 192.168.112.153 --sport 8088 -j ACCEPT
iptables -I OUTPUT -o ens33 -p tcp -d 192.168.112.153 --dport 8088 -j ACCEPT
//指定网卡ens33,不指定网卡默认所以网卡
(16)//防止DDOS攻击,设定一些数据的限制条件
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
(17)kali配置好规则后将保存至/etc/iptables/rules.v4,保存命令:iptables-save > /etc/iptables/rules.v4。
如果想在Kali操作系统启动时iptables设置的规则生效,则需要增加启动项:如下:
在/etc/init.d/文件夹下新建iptables文件,如:vim /etc/init.d/iptables,内容如下:
#!/bin/bash
/sbin/iptables-restore < /etc/iptables/rules.v4
49856
(18)#可以同时设定多个端口被允许
iptables -I INPUT -p tcp -m multiport --dport 80,22,443,3306 -j ACCEPT
(19)
#端口转发
#第一种:本机端口转发,比如80端口对外封闭,开放一个45692供外部访问,外部只知道45692,不知道80,可以避免协议猜测
#第二种:远程端口转发,把本机接收到的请求转发到远程电脑和对应端口上〈远程可以是本地局域网,也可以是公网服务器)
1.#本机端口转发:
◎iptables -t nat -A PREROUTING -p tcp --dport 15673 -j REDIRECT --to-port 80
//-t nat 指定使用nat表
2.#远程端口转发:
#需要确保端口转发功能是启用的
//开启远程转发
◎vi /etc/sysctl.conf
◎添加net.ipv4.ip_forward = 1
◎执行命令 sysctl -p /etc/sysctl.conf
#PREROUTING上访问8888时,转发给目标服务器和目标端口
#PREROUTING是先于FILTER执行的,所以不需要转发时允许8888端口ACCEPT
//当其他主机访问此电脑(192.168.184.137)的8888端口时,通过DNAT的方式转发到180.101.49.11的80端口
//出去
◎iptables -t nat -A PREROUTING -d 192.168.184.137 -p tcp --dport 8888 -j DNAT --to-destination 180.101.49.11:80
//回来
◎iptables -t nat -A POSTROUTING -d 180.101.49.11 -p tcp --dport 80 -j SNAT --to 192.168.184.137
四、命令参数表
参数 | 说明 |
-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 | 指定模块 |