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;表主要用于将不同的规则存储在不同的表中

(1)filter表:默认表,负责过滤数据包

(2)nat表:用于网络地址转换(IP、端口)

(3)mangle表:主要应用在修改数据包、流量整形、给数据包打标识

(4)raw表:这个表很少被用到,主要用于配置连接跟踪相关内容,使用频率较少

(5)security表:这个表用于安全Linux的防火墙规则,使用频率较少

2、五条链:流量的方向

(1)input:匹配目标IP是本机的数据包;入站

(2)output:出口数据包;出站

(3)forward:匹配流经本机的数据包;转发

(4)prerouting:修改目的地址,用来做DNAT。如:把内网中的80端口映射到互联网端口

(5)postrouting:修改源地址,用来做SNAT。如:局域网共享一个公网IP接入Internet。

3、规则:基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后依次执行、遇到匹配的规则就不再继续向下检查、如果遇到不匹配的规则则会继续向下进行。

二、安装和配置iptables

复制代码
[root@localhost yt]# sysemctl status firewalld

[root@localhost yt]# systemctl status iptalbes

[root@localhost yt]# yum install iptables-services

默认规则下,firewalld会拒绝所有流量
[root@localhost yt]# systemctl start firewalld
停止之后xampp可以正常访问
[root@localhost yt]# systemctl stop firewalld
复制代码
出现下面问题需要安装iptables
复制代码
xampp还是被阻止了?
[root@localhost yt]# systemctl start iptalbes

[root@localhost yt]# systemctl status iptables

三、基本的命令使用

复制代码
[root@localhost yt]# iptables -L
复制代码
将端口号以数字的形式显示默认表filter中的规则
[root@localhost yt]# iptables -nL
复制代码
[root@localhost yt]# iptables -t filter -nL
复制代码
[root@localhost yt]# iptables -t nat -nL
复制代码
所有入站流量全部丢弃,包括SSH请求。所有流量无法进来。
-A:表示append
-I:表示input,插入
[root@localhost yt]# iptables -A INPUT -j DROP
复制代码
打开目标端口22,接受流经该端口的流量
[root@localhost yt]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
复制代码
所有出站流量全部丢弃,包括SSH响应。所有流量无法出去。
[root@localhost yt]# iptables -I OUTPUT -j DROP

[root@localhost yt]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT
复制代码
访问不了外网
[root@localhost yt]# curl https://www.baidu.com
curl: (6) Could not resolve host: www.baidu.com; Unknown error

[root@localhost yt]# iptables -I INPUT -p TCP --dport 80 -j ACCEPT
复制代码
两个方向的80端口放开之后,XAMPP就能正常访问
[root@localhost yt]# iptables -I OUTPUT -p TCP --sport 80 -j ACCEPT
复制代码
外网访问内网使用ping是禁止的
复制代码
需要配置两条
[root@localhost yt]# iptables -I INPUT -p icmp -j ACCEPT
[root@localhost yt]# iptables -I OUTPUT -p icmp -j ACCEPT
复制代码
查看出站规则的行号
[root@localhost yt]# iptables -L OUTPUT --line-numbers
复制代码
把出站规则的第4条规则删除
[root@localhost yt]# iptables -D OUTPUT 4

DROP:直接丢失数据包,不会向源端做任何回复
REJECT:拒绝接收数据包,并向源端发送拒绝响应

复制代码
重启iptables后所有的配置会失效。
需要将配置进行保存
[root@localhost yt]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

清空所有写的规则
iptables -F

[root@localhost yt]# cat /etc/sysconfig/iptables

四、进阶命令配置

给服务器配置对端的服务器ip地址,访问80端口,即将该IP地址白名单到服务器中。

复制代码
允许本地访问外部IP地址和端口号,通过设定白名单的方式可以防止本机去访问别的服务器
通过这种场景的设置,可以最大可能避免反弹she11和挖矿程序去试图通过本地访问目标服务器下载恶意程序或执行恶意指令。
[root@localhost yt]# iptables -I OUTPUT -o ens33 -p tcp -d 183.2.172.177 --dport 80 -j ACCEPT
[root@localhost yt]# iptables -I INPUT -i ens33 -p tcp -s 183.2.172.177 --sport 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 9999 -j REDIRECT --to-port 80

配置本机端口转发前:

配置本机端口转发后:

复制代码
远程端口转发
需要确保端口转发功能是启用的,默认是关闭的
[root@localhost yt]# vi /etc/sysctl.conf
在最后加入以下命令
net.ipv4.ip_forward = 1
启用配置
[root@localhost yt]# sysctl -p /etc/sysctl.conf
复制代码
配置远程端口转发
场景:通过本机的服务器IP地址访问到其他网站
PREROUTING上访问7777时,转发给目标服务器和目标端口
PREROUTING是先于FILTER执行的,所以不需要转发时允许7777端口ACCEPT
[root@localhost yt]# iptables -t nat -A PREROUTING -d 192.168.102.131 -p tcp --dport 7777 -j DNAT --to-destination 183.2.172.177:80
[root@localhost yt]# iptables -t nat -A POSTROUTING -d 183.2.172.177 -p tcp --dport 80 -j SNAT --to 192.168.102.131

# 查看所有nat表规则
iptables -t nat -L -n --line-numbers

# 查看更详细的信息(包括数据包和字节计数)
iptables -t nat -L -n -v

# 查看PREROUTING链规则
iptables -t nat -L PREROUTING -n --line-numbers

# 查看POSTROUTING链规则
iptables -t nat -L POSTROUTING -n --line-numbers

# 查看OUTPUT链规则
iptables -t nat -L OUTPUT -n --line-numbers

# 删除PREROUTING链的第3条规则
iptables -t nat -D PREROUTING 3

# 删除POSTROUTING链的第1条规则
iptables -t nat -D POSTROUTING 1

# 删除OUTPUT链的第2条规则
iptables -t nat -D OUTPUT 2
相关推荐
小晶晶京京3 小时前
day54-Zabbix(第三部分)
linux·运维·服务器·zabbix
数据知道3 小时前
Go基础:用Go语言操作MongoDB详解
服务器·开发语言·数据库·后端·mongodb·golang·go语言
朝新_4 小时前
【EE初阶 - 网络原理】网络通信
java·开发语言·网络·php·javaee
-dcr4 小时前
22.Nginx 服务器 LNMP项目
运维·服务器·nginx·php·lnmp
LabVIEW开发4 小时前
LabVIEW利用DataSocket读取OPC 服务器数据
服务器·labview·labview知识·labview功能·labview程序
white-persist4 小时前
Burp Suite模拟器抓包全攻略
前端·网络·安全·web安全·notepad++·原型模式
科研鬼才(bushi4 小时前
计算机网络——数据链路层【碰撞检测、信道占用】
网络·计算机网络
liulilittle5 小时前
网络编程基础算法剖析:从字节序转换到CIDR掩码计算
开发语言·网络·c++·算法·通信
漫谈网络5 小时前
KVM创建的虚拟机,虚拟机的网卡是如何生成的
运维·服务器·网络·qemu·虚拟化·kvm