1974 字
10 分钟
iptables 防火墙笔记

iptables#

1 防火墙介绍#

防火墙作为内部网与外部网之间的一种访问控制设备, 常常安装在内部网络和外部网络的边际上。防火墙具有很好的网络安全保护作用。入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机。你可以将防火墙配置成许不同保护级别。高级别的保护可能会禁止一些服务,如视频流等,但至少这是你自己的保护选择。

1.1 防火墙分类#

①硬件防火墙
②软件防火墙

1.2 防火墙功能#

①Internet防火墙可以防止Internet上的危险传播到网络内部;
②能强化安全策略;
③能有效记录Internet上的活动;

2 iptables和Firewalls介绍#

netfilter ----- iptables和Firewalls
firewalld跟iptables主要有以下区别:
1 firewalls的默认规则是拒绝,需要时设置开启,iptables正好相反。
2 firewalls可以动态修改单条规则,而且直接生效
3 firewalls简单易用,即使不理解各种数据包规则,也可以实现大部分功能。
4 想要真正学会防火墙规则,强烈推荐学习iptables。
firewall-config //触发图形化

3 实验环境准备#

三台虚拟机
client:VM5 1.1.1.1 网关:2.2.2.2
出口路由/server:VM5 2.2.2.2 / VM6 3.3.3.3
route add -net 1.1.1.0/24 dev ens33
route add -net 4.4.4.0/24 dev ens36
如果你期间重启网络服务,默认删除添加的路由信息
/proc/sys/net/ipv4/ip_forward 路由转发功能有开启,就能访问
web:VM6 4.4.4.4 网关:3.3.3.3
关闭Firewalls和selinux

4 iptables内容详解#

• iptables不是一个单一的软件工具,而是一套C/S样式的软件组,它是由工作在用户空间的iptables和工作在内核空间的Netfilter模块组成,一般统称为Iptables。
• 用户基于用户空间的iptables软件,来设定各种包过滤规则,借助于后端内核空间的Netfilter模块实现非常强大的防火墙功能,Netfilter实现的功能主要体现在数据包过滤、数据包重定向、网络地址转换等方面。
• 默认情况下,iptables主要工作在0SI模型中的的2~4层,我们还可以通过重编内核,让iptables支持7层的数据包管理。

4.1 五条链#

PREROUTING 你找谁?我推荐你去找XXX
- 数据包进行路由决策前应用的规则,一般用于改变数据包的目标地址,不让别人知道我找谁
INPUT 来了老弟
- 数据包经过路由决策后,进入到本机处理时应用的规则,一般用于本机进程处理的数据包
OUTPUT 走了老弟
- 新建数据包经路由决策后,从本机输出时应用的规则,一般用于本机处理后的数据包
FORWARD 来去匆匆
- 数据包经过路由决策后,本机不做处理,仅仅是转发数据包时应用的规则
POSTROUTING 去哪?我给你指另一条路
- 数据包作从本机出去前,对数据包应用的规则,一般用于更改数据包的源地址信息,不让给别人知道我是谁

4.2 五张表#

在netfilter的内存区域中,这五个表是security表、filter表、NAT表、mangle表和raw表,他们分别作用的对象是不一样的
security表: 主要针对的是数据链路层的管理规则组合,只不过它是基于target(目标)来做操作的。
☆filter表:是netfilter中最重要的表,也是默认的表,主要负责数据包的过滤功能。
☆nat表:主要实现网络地址转换的表。可以自由转换数据报文中IP和PORT。
mangle表:主要实现数据包的拆分-修改-封装动作。
raw表:通过关闭nat表的追踪功能,从而实现加速防火墙过滤的表。

4.3 链与表之间的关系#

表中链
security表 :input 、output、forward
filter过滤表 :input 、output、forward
nat 转换表 :postrouting、prerouting、input 、output
mangle封装表 :input、output、forward、prerouting、postrouting
raw自定义表 :prerouting、output
链属表
prerouting :nat、mangle、raw
postrouting :nat、mangle
input :filter、mangle、security
output :filter、nat、mangle、raw、security
forward :filter、mangle、security

5 安装iptables#

①永久关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
②查看iptables软件包
yum list | grep iptables
③安装iptables与iptables-services
yum –y install iptables
yum –y install iptables-services
服务相关命令:
systemctl start|stop iptables
// 开启|关闭 iptables
systemctl status iptables
// 查看iptables状态
systemctl enable|disable iptables
// 开机自启|永久关闭 iptables
iptables –help
// 查看帮助文档

5.1 iptables配置操作#

查看现有规则 iptables -L
target prot opt source destination
动作 协议 参数 源地址 目标地址
iptables -t 表 -L //查看其他表的规则
查看现有规则,主机名和端口不做解析 iptables -nL
显示现有规则详细信息 iptables –nvL
显示带标号的规则 iptables -nL --line-number
清除规则 iptables -D INPUT 1
全部清空规则 iptables -F
常用命令选项:
-A 追加,放置最后一条
-I 插入,默认插入成第一条
-D 删除
-F 清空flush
-P 设置默认策略policy
-j {ACCEPT|DROP|REJECT}
-p {TCP|UDP|ICMP}

5.2 iptables需求配置#

需求1:禁止web端访问server端和client端
iptables -t filter -A INPUT -s 4.4.4.4 -j DROP
iptables -t filter -A FORWARD -s 4.4.4.4 -j DROP
需求2:
①只允许server端ping通其他主机,不允许其他主机ping通server端
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
0 是应答包
8 是请求包
②允许client端ping通web端,不允许web端ping通client端
iptables -P FORWARD DROP
iptables -t filter -A FORWARD -s 1.1.1.1 -p icmp --icmp-type 8 -j ACCEPT
iptables -t filter -A FORWARD -p icmp --icmp-type 0 -j ACCEPT
需求3:禁止web端访问client端的80和22号端口
iptables -t filter -A FORWARD -s 4.4.4.4 -p tcp --dport 80 -j DROP
iptables -t filter -A FORWARD -s 4.4.4.4 -p tcp --dport 22 -j DROP
优化:
iptables -t filter -A FORWARD -s 4.4.4.4 -p tcp --dport 22:80 -j DROP
22-80端口
优化:
iptables -t filter -A FORWARD -s 4.4.4.4 -p tcp -m multiport --dport 22,80 -j DROP
multiport模块,提供多端口同时选取的功能,减少iptables的匹配量
需求4:禁止4.4.4.1 - 4.4.4.20网段内的主机访问server端的22和80号端口
iptables -t filter -A INPUT -m iprange --src-range 4.4.4.1-4.4.4.20 -p tcp -m multiport --dport 22,80 -j DROP
iprange 模块进行多ip同时选取
需求5:只开放主机server端的FTP服务
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"
systemctl restart iptables.service
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
state模块,五个报文
NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED
NEW:连接中的第一个包,状态就是NEW,我们可以理解为新连接的第一个包的状态为NEW。
ESTABLISHED:我们可以把NEW状态包后面的包的状态理解为ESTABLISHED,表示连接已建立。
RELATED:主机与目标主机已经进行通信,目标主机发起新链接。
INVALID:如果一个包没有办法被识别,或者这个包没有任何状态,那么这个包的状态就是INVALID,我们可以主动屏蔽状态为INVALID的报文。
UNTRACKED:报文的状态为untracked时,表示报文未被追踪,当报文的状态为Untracked时通常表示无法找到相关的连接。
拓展:只开放主机web端的FTP服务
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"
systemctl restart iptables.service
iptables -P FORWARD DROP
iptables -t filter -A FORWARD -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 20:21 -j ACCEPT
iptables -t filter -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

6 iptables的nat实践操作#

6.1 环境变更#

client 2.2.2.1 网关 2.2.2.2
出口路由 不变
web 3.3.3.1 删除网关

6.2 需求解决#

snat
内网访问外网 ---- 私有地址转换公有地址
iptables -t nat -A POSTROUTING -s 2.2.2.0/24 -j SNAT --to 3.3.3.3
dnat
外网访问内网 ---- 公有地址转换私有地址
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 2.2.2.1
iptables 防火墙笔记
https://wangyi187.top/posts/os-20-iptables/
作者
WangYi
发布于
2024-07-27
许可协议
CC BY-NC-SA 4.0