iptables

1 防火墙介绍

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

1.1 防火墙分类

1
2
①硬件防火墙 --- 华为
②软件防火墙 --- Windows自带的防火墙、iptables、Firewalls

1.2 防火墙功能

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

2 iptables和Firewalls介绍

1
2
3
4
5
6
7
8
	在之前的linux系统中,默认的防火墙都是iptables,而随着Redhat|Centos7系统的发布,linux系统的防火墙默默的将iptables转换成了Firewalls,由Firewalls编辑各种各样的数据包管理规则,然后借助于netfilter模块来实现强大的防火墙功能,不过Firewalls的底层操作仍然是iptables,只不过它将繁杂的iptables的手工操作给封装起来,以简单易用的方式提供给大家。
Firewalld动态防火墙管理器服务(Dynamic Firewall Manager of Linux systems)是目前Centos7系统默认的防火墙管理工具,拥有命令行终端和图形化界面的配置工具,firewalld跟iptables主要有以下区别:
1 firewalls的默认规则是拒绝,需要时设置开启,iptables正好相反。
2 firewalls可以动态修改单条规则,而且直接生效
3 firewalls简单易用,即使不理解各种数据包规则,也可以实现大部分功能。
4 想要真正学会防火墙规则,强烈推荐学习iptables。

- Firewalls图形化 --- firewall-config

3 实验环境准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+ 数据包过滤环境
client --- 内网
IP -- 192.168.10.1/24 网关 -- 192.168.10.254
- VM5

server --- 路由 --- iptables
ip -- 192.168.10.254/24
ip -- 10.10.10.254/24
- VM5
- VM6
- 路由转发是否开启? ---- /proc/sys/net/ipv4/ip_forward 该文件是否为 1(开启) 0(关闭)

web --- 外网
ip -- 10.10.10.10 网关 -- 10.10.10.254
- VM6

4 iptables内容详解

4.1 五条链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+ 数据包过滤时在考虑以下链路
INPUT 来了老弟
- 数据包经过路由决策后,进入到本机处理时应用的规则,一般用于本机进程处理的数据包
OUTPUT 走了老弟
- 新建数据包经路由决策后,从本机输出时应用的规则,一般用于本机处理后的数据包

+ 本机处理???? ---- 数据流量是否与iptables设备有关

FORWARD 来去匆匆
- 数据包经过路由决策后,本机不做处理,仅仅是转发数据包时应用的规则


+ NAT转换时在考虑以下链路
POSTROUTING 去哪?我给你指另一条路 ---- SNAT
- 数据包作从本机出去前,对数据包应用的规则,一般用于更改数据包的源地址信息,不让给别人知道我是谁
PREROUTING 你找谁?我推荐你去找XXX ---- DNAT
- 数据包进行路由决策前应用的规则,一般用于改变数据包的目标地址,不让别人知道我找谁

4.2 五张表

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

4.3 链与表之间的关系

1
2
3
4
5
6
7
8
9
10
11
12
表中链
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

5.1 iptables配置操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
①永久关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
②查看iptables软件包
yum list | grep iptables
③安装iptables与iptables-services
yum -y install iptables
yum -y install iptables-services //安装这个服务


查看现有规则 iptables -L
查看现有规则,主机名和端口不做解析 iptables -nL
显示现有规则详细信息 iptables –nvL
显示带标号的规则 iptables -nL --line-number
清除指定规则 iptables -D INPUT 1

常用命令选项:
-A 追加,放置最后一条
-I 插入,默认插入成第一条
-D 删除
-F 清空flush
-P 设置默认策略policy
-j {ACCEPT|DROP|REJECT}
-p {TCP|UDP|ICMP}
-m 模板
-F 清空规则
-t 选择表
-s 源地址

Chain INPUT (policy ACCEPT) --- 链路的默认规则
target prot opt source destination
动作 协议 参数 源地址 目标地址

5.2 iptables需求配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
需求1:禁止web端访问server端和client端
+ 禁止web端访问server端 --- 本机处理
iptables -t filter -A INPUT -s 10.10.10.10 -j DROP
+ 禁止web端访问client端 --- 不是本机处理
iptables -t filter -A FORWARD -s 10.10.10.10 -j DROP


需求2:①只允许server端ping通其他主机,不允许其他主机ping通server端
②允许client端ping通web端,不允许web端ping通client端
iptables -P INPUT DROP
iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT
- 0 应答包 | 8 请求包

iptables -P FORWARD DROP
iptables -t filter -A FORWARD -s 192.168.10.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 10.10.10.10 -p tcp --dport 80 -j DROP
iptables -t filter -A FORWARD -s 10.10.10.10 -p tcp --dport 22 -j DROP
iptables -t filter -A FORWARD -s 10.10.10.10 -p tcp -m multiport --dports 80,22 -j DROP
- multiport模块优化规则,减少匹配量

需求4:禁止10.10.10.1 – 10.10.10.20网段内的主机访问server端的22和80号端口
iptables -t filter -A INPUT -m iprange --src-range 10.10.10.1-10.10.10.20 -p tcp -m multiport --dports 80,22 -j DROP
- iprange模块优化规则,减少匹配量


需求5:只开放主机server端的FTP服务
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"

iptables -P INPUT 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
- RELATED --- 基于原来的连接状态,再次建立连接

- https://www.zsythink.net/archives/tag/iptables/

6 iptables的nat实践操作

6.1 环境变更

1
2
+ NAT环境
- 外网的网关删除即可

6.2 需求解决

1
2
3
4
5
6
7
8
9
10
11
SNAT --- 内网的访问 --- 内网到外网
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to 10.10.10.254
- 更加确定是否转换成功 --- http 看日志

DNAT --- 外网的访问 --- 外网到内网
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.10.1
- 默认通过出口路由的外网IP来问

下载 -- yum -y install httpd
根目录 -- /var/www/html/
httpd日志 --- /var/log/httpd/