文章目录
- Linux包过滤防火墙概述
- iptables的表、链结构
- iptable安装
- iptables的管理选项
- 规则的匹配条件
Linux包过滤防火墙概述
netfilter
位于Linux内核中的包过滤功能体系
称为Linux防火墙的“内核态”
iptables
位于/sbin/iptables,用来管理防火墙规则的工具
称为Linux防火墙的“用户态”
上述2种称呼都可以表示Linux防火墙
包过滤的工作层次
主要是网络层,针对IP数据包
体现在对包内到的IP地址、端口等信息的处理上
3层—— ip——流量
4层——端口——服务
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107105001761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h3eTk1MjY=,size_16,color_FFFFFF,t_70)
iptables的表、链结构
iptables的作用是为包过滤机制的实现提供规则(或称为策略),通过不同的规则,告诉netfilter对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理。为了更加方便地组织和管理防火墙规则,iptables采用了“表”和“链”的分层结构,如图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021010710501258.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h3eTk1MjY=,size_16,color_FFFFFF,t_70)
如图为iptables防火墙默认的规则表、链结构
其中,每个规则“表”相当于内核空间的一个容器,根据规则集的不同用途规划分为默认的四个表:在每个“表”容器内包括不同的规则“链”,根据处理数据包的不同时机划分为五种链:而决定是否过滤或处理数据包的各种规则,则是按先后顺序存放在各规则链中。
1.规则表
为了从规则集的功能上有所区别,iptables管理者四个不同的规则表,其功能分别有独立的内核模块实现。这四个表的名称、包含的链及各自的用途如下。
一:filter表:filter表用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包。
filter表对应的内核模块为iptable_filter,表内包含三个链,即INPUT、FORWARD、OUTPUT。
二:nat表:nat(Network Address Translation,网络地址转换)表主要用来修改数据包的IP地址、端口号等信息。nat表对应的内核模块为iptable_nat,表内包含三个链,即PREROUTING、POSTROUTING、OUTPUT。
三:mangle表mangle表用来修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期),或者为数据包设置Mark标记,以实现流量整形、策略路由等高级应用。mangle表对应的内核模块为iptable_mangle,表内包含个链即PREROUYING、POSTROUTING、INPUT、OUTPUT、FORWARD。
四:raw表:raw表是自1.2.9以后的版本iptables新增的表,主要用来决定是否对数据包进行状态跟踪。raw表对应的内核模块为iptable_raw,表内包含两个链,即OUTPUT、PREROUTING。
2.规则链
在处理各种数据包时,根据防火墙规则的不同介入时机,iptables默认划分为五种不同的规则链。这五种链的名称、各自的介入时机如下。
INPUT链:当收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则。
OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
FORWARD链:当接收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则。
PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。
POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。
其中,INPUT、OUTPUT链主要在“主机型防火墙”中,即主要针对的服务器本机进行保护的防火墙:而FORWARD、PREROUTING、POSTROUTING链多用在“网络型防火墙”中,如使用Linux防火墙作为网关服务器,在公司内网与Intermet之间进行安全控制。
规则链
规则链的作用:对数据包进行过滤或处理 (衡量标准)
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
默认包括5种规则链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
规则表
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
默认包括4个规则表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
默认的表、链结构示意图
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021010710502833.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h3eTk1MjY=,size_16,color_FFFFFF,t_70)
规则表之间的顺序
raw→mangle→nat→filter(常用表)
规则链之间的顺序
入站:PREROUTING→INPUT 注:入站出站对应主机防火墙 转发对应网络防火墙
出站:OUTPUT→POSTROUTING
转发:PREROUTING→FORWARD→POSTROUTING
规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理
匹配流程示意图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107105039263.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h3eTk1MjY=,size_16,color_FFFFFF,t_70)
附加:地址伪装在nat:POSTROUTING上
小结
iptables防火墙默认包括哪几个表、哪几种链?
对于转发的数据包,会经过哪几种链的处理?
在同一个规则链内,规则匹配的特点是什么?
iptable安装
关闭firewalld防火墙
[root@serverl ~]# systemctl stop firewalld.service
[root@serverl ~]# systemctl disable firewalld.service
注:CentOS 7默认使用firewalld防火墙,若想使用iptables防火墙,必须先关闭firewalld防火墙
安装iptables防火墙
[root@serverl ~]# yum -y install iptables iptables-services
设置iptables开机启动
[root@serverl ~]# systemctl start iptables.service
[root@serverl ~]# systemctl enable iptables.service
语法构成
lptables [-t 表名] 选项 [链名] [条件] [-j 控制类型] p表示协议
[root@serverl ~]# iptables -t filter -I INPUT -p icmp -j REJECT 阻止ping测试
注意事项
不指定表名时,默认指filter表
不指定链名时。默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为大小写
附加:
iptables -t filter -n -L INPUT :表示查看filter表INPUT链中的所有语句
例:
[root@server1 ~]# iptables -t filter -I INPUT -p icmp -s 20.0.0.10 -j REJECT
[root@server1 ~]# iptables -n -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT icmp -- 20.0.0.11 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
[root@serverl ~]# ping 20.0.0.11 客户机无法ping通
PING 20.0.0.11 (20.0.0.11) 56(84) bytes of data.
From 20.0.0.11 icmp_seq=1 Destination Port Unreachable
From 20.0.0.11 icmp_seq=2 Destination Port Unreachable
附加:
iptables命令的的常用管理选项
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107105111804.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h3eTk1MjY=,size_16,color_FFFFFF,t_70)
[root@server1 ~]# iptables -F 清空
[root@server1 ~]# iptables -n -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server1 ~]# iptables -n -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
数据包的常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
防火墙规则的“匹配即停止”对于LOG操作来说是一个特例,因为LOG只是一种辅助动作,并没有真正处理数据包
例:删除命令
[root@server1 ~]# iptables -D INPUT 1
[root@server1 ~]# iptables -n -L
[root@server1 ~]# iptables -t filter -I INPUT -p icmp -s 20.0.0.10 -j DROP
[root@server1 ~]# iptables -n -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
与上一个实验比较(无反应)
[root@serverl ~]# ping 20.0.0.11
PING 20.0.0.11 (20.0.0.11) 56(84) bytes of data.
其中,添加、删除清空和查看规则是最常见的管理操作,下面通过一些规则操作实例来展示相关选项的使用。
1.添加新的规则
添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来用来插入规则。例如,若要在filter表INPUT链的末尾添加一条防火墙规则,可以执行以下操作(其中“-p协议名”作为匹配条件)。
[root@serverl ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
当使用管理员选项“-I”时,允许同时指定添加规则的顺序号,未指定序号默认作为第一条。例如,以下操作添加的两条规则将分别位于filter表的第一条、第二条(其中省略“-t filter”选项,默认使用filter表)。
[root@server1 ~]# iptables -I INPUT -p udp -j ACCEPT
[root@server1 ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
实验1:禁止其他客户端访问
[root@server1 ~]# yum -y install iptables-services
[root@server1 ~]# systemctl start iptables
[root@server1 ~]# iptables -t filter -I INPUT -p icmp -s 20.0.0.11 -j REJECT
[root@server1 ~]# iptabl s -n -L (发现icmp排在最前面)
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT icmp -- 20.0.0.11 0.0.0.0/0 reject-with icmp-port-unreachable
主机ip为20.0.0.11的测试效果如下:
[root@serverl ~]# ping 20.0.0.10
PING 20.0.0.10 (20.0.0.10) 56(84) bytes of data.
From 20.0.0.10 icmp_seq=1 Destination Port Unreachable
From 20.0.0.10 icmp_seq=2 Destination Port Unreachable
2:删除行数
[root@server1 ~]# iptables -n -L INPUT --line-numbers 显示行数
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT icmp -- 20.0.0.11 0.0.0.0/0 reject-with icmp-port-unreachable
2 REJECT icmp -- 20.0.0.10 0.0.0.0/0 reject-with icmp-port-unreachable
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
4 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
7 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host
[root@server1 ~]# iptables -D INPUT 6 删除第6行
[root@server1 ~]# iptables -n -L INPUT --line-numbers 发现原第7行已删除
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT icmp -- 20.0.0.11 0.0.0.0/0 reject-with icmp-port-unreachable
2 REJECT icmp -- 20.0.0.10 0.0.0.0/0 reject-with icmp-port-unreachable
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
4 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host
iptables的管理选项
添加新的规则
-A:在链的末尾追加一条规则
-l:在链的开头(或指定序号)插入一条规则
[root@serverl ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@serverl ~]# iptables -I INPUT -p udp -j ACCEPT
[root@serverl ~]# iptables -I INPUT 2 -p icmp -j ACCEPT -p用来指定协议
2表示在第几行,默认为第1行
查看规则列表
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
--line-numbers:查看规则时,显示规则的序号
查看规则列表
[root@serverl ~]# iptables -n -L INPUT -n -L可合写成-nL(顺序不能颠倒)
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
删除、清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
[root@serverl ~]# iptables -D INPUT 3
[root@serverl ~]# iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
[root@serverl ~]# iptables -F 清空四张表里面的所有链的所有规则
[root@serverl ~]# iptables -t filter -F
[root@serverl ~]# iptables -t nat -F 清空nat表中里面的所有链中的所有规则
[root@serverl ~]# iptables -t mangle -F
[root@serverl ~]# iptables -t raw -F
查看删除后显示效果:
[root@server1 ~]# iptables -t filter -n -L
优先级:raw>mangle>nat>filter
设置默认策略(但不显示)
-p:为指定的链设置默认规则
[root@server1 ~]# iptables -t filter -P FORWARD DROP 指定的表
[root@server1 ~]# iptables -P OTUPUT ACCEPT 所有表
(清空所有默认策略要么是ACCEPT、要么是DROP表的所有链)
[root@server1 ~]#iptables -t filter -P INPUT DROP 设置默认规则(默认只有filter表显示DROP,其他表不变)
[root@server1 ~]#iptables -t filter -n -L INPUT 查看效果(默认,故无显示)
附加:
设置默认策略
iptables的各链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为ACCEPT(允许)、DROP(丢弃)两种。例如,执行以下操作可以将filter表中FORWARD链的默认策略设为丢弃,OUTPUT链默认策略设为允许。
root@localhost ~]#iptables -t filter -P FORWARD DROP
[root@localhost ~]#iptables -P OUTPUT ACCEPT
需要注意的是,当使用管理选项“-F”清空链时,默认策略不受影响。因此若要修改策略,不许通过管理选项“-P”重新进行设置。另外,默认策略并不参与链内规则的顺序编排,因此在其他规则之前或之后设置并无区别。
[root@server1 ~]# iptables -t filter -P INPUT ACCEPT
[root@server1 ~]# iptables -t filter -n -L INPUT
常用管理选项汇总
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107105140111.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h3eTk1MjY=,size_16,color_FFFFFF,t_70)
规则的匹配条件
通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件
隐含匹配
要求以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件
显示匹配
要求以“-m扩展模块”的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件
常见的通用匹配条件
协议匹配:-p协议名
地址匹配:-s源地址、-d目的地址
接口匹配:-i入站网卡、-o出站网卡
附加:
出站:流量从防火墙出去
入站:流量从防火墙网卡进入
入站匹配的地址是源地址
出站匹配的地址是目标地址
[root@localhost ~]#iptables -I INPUT -p icmp-j DROP
[root@localhost ~]#iptables -A FORWARD ! -p icmp -j ACCEPT 叹号 !表示取反
[root@localhost ~]#iptables -A FORWARD -s 192.168.1.11 -j REJECT
[root@localhost ~]#iptables -I INPUT -s 10.20.30.0/24 -j DROP
例如:若要丢弃从外网接口(ens33)访问防火墙本机且源地址为私有地址的数据包,可以执行以下操作
[root@localhost ~]#iptables -A INOUT -i ens33 -s 192.168.0.0/16 -j DROP 禁止私有网段进站
[root@localhost ~]#iptables -A INOUT -i ens33 -s 10.0.0.0/8 -j DROP
[root@localhost ~]#iptables -A INOUT -i ens33 -s 172.16.0.0/12 -j DROP
ens33:外网接口 以上三个网段为私有地址段
实验:允许客户机访问apache服务器,不允许它访问ftp服务器(同一个主机)
规则的匹配条件5.4
10.
[root@server1 ~]# iptables -F
[root@server1 ~]# iptables -nL INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
[root@server1 ~]# yum -y install httpd vsftpd
[root@server1 ~]# cd /var/www/html
[root@server1 html]# vi index.html
<html><h1>web server</h1></html>
[root@server1 html]# cd
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# curl http://localhost
<html><h1>web server</h1></html>
[root@server1 ~]# cd /var/ftp/pub/
[root@server1 pub]# echo a>a.txt
[root@server1 pub]# echo b>b.txt
[root@server1 pub]# echo c>c.txt
[root@server1 pub]# ls -lh
总用量 12K
-rw-r--r--. 1 root root 2 10月 19 10:37 a.txt
-rw-r--r--. 1 root root 2 10月 19 10:38 b.txt
-rw-r--r--. 1 root root 2 10月 19 10:38 c.txt
[root@server1 pub]# cd
[root@server1 ~]# chown -R ftp.ftp /var/ftp/pub/
[root@server1 ~]# chmod -R 755 /var/ftp/pub/
[root@server1 ~]# sed -i /^anonymous_enable/s/YES/NO/g /etc/vsftpd/vsftpd.conf
[root@server1 ~]# sed -i /^anon/anon_umask=022/g /etc/vsftpd/vsftpd.conf
修改以下配置
[root@server1 ~]# vi /etc/vsftpd/vsftpd.conf
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
non_umask=022/g
non_umask=022/g
修改为
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
anon_umask=022
#anon_upload_enable=YES→non_upload_enable=YES
#anon_mkdir_write_enable=YES→anon_mkdir_write_enable=YES并在其下一行添加如下命令
anon_other_write_enable=YES
listen_ipv6=YES→listen_ipv6=NO
listen=NO→listen=YES
[root@server1 ~]# systemctl start vsftpd
11.进行测试
[root@serverl ~]# curl http://20.0.0.10
<html><h1>web server</h1></html>
[root@serverl ~]# yum -y install ftp
[root@serverl ~]# ftp 20.0.0.10
Connected to 20.0.0.10 (20.0.0.10).
220 (vsFTPd 3.0.2)
Name (20.0.0.10:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> ls -lh
227 Entering Passive Mode (20,0,0,10,222,128).
150 Here comes the directory listing.
-rwxr-xr-x 1 14 50 2 Oct 19 02:37 a.txt
-rwxr-xr-x 1 14 50 2 Oct 19 02:38 b.txt
-rwxr-xr-x 1 14 50 2 Oct 19 02:38 c.txt
226 Directory send OK.
ftp> get c.txt
local: c.txt remote: c.txt
227 Entering Passive Mode (20,0,0,10,224,77).
150 Opening BINARY mode data connection for c.txt (2 bytes).
226 Transfer complete.
2 bytes received in 3.2e-05 secs (62.50 Kbytes/sec)
ftp> bye
221 Goodbye.
10:
[root@server1 ~]# iptables -I INPUT -p tcp -s 20.0.0.11 --dport=21 -j REJECT
[root@server1 ~]# iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 20.0.0.11 0.0.0.0/0 tcp dpt:21 reject-with icmp-port-unreachable
11:验证
[root@serverl ~]# ftp 20.0.0.10
ftp: connect: 拒绝连接
ftp> bye
12:验证
[root@server1 ~]# yum -y install ftp
[root@server1 ~]# ftp 20.0.0.10 可以连接
规则的匹配条件5.3
常用的隐含匹配条件
端口匹配:--sport源端口(一般针对客户)、--dport目的端口(一般针对服务器)
ICMP类型匹配:--icmp-type ICMP类型
[root@localhost ~]#iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
udp=(DNS:备注使用)
[root@localhost ~]#iptables -A INPUT -A INPUT-p tcp --dport 20:21 -j ACCEPT
20:21 :表示连续的端口号用:分隔
[root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
以上三句话总结为只允许我的icmp包出去(ping其他),不允许其他icmp包进来(其他ping)我
[root@localhost ~]#iptables -A INPUT -p icmp DROP
8请求,0 回显,3不可达
实验:
11:
systemctl stop iptables
10:
[root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@localserver ~]#iptables -n -L INPUT
相互ping测试
附加:
ICMP类型匹配
编写iptables规则时使用“–icmp-type ICMP 类型”的形式,针对的协议为ICMP,用来检查ICMP数据包的类型(–icmp-type)。ICMP类型使用字符串或数字代码表示,如“Echo-Request”(代码为8)、“Echo-Reply”(代码为0)、“Destination-Unreachable”(代码为3),分别对应ICMP协议的请求、回显、目标不可达。例如,若要禁止从其他主机ping本机,但是允许本机ping其他主机,可以执行以下操作。(无后文)
常用的显示匹配条件
多端口匹配:-m multiport --sports源端口列表 可以适用于不连续端口
-m multiport --dports目的端口列表
IP范围匹配:-m iprange --src-range IP范围
MAC地址匹配:-m mac --mac-source MAC地址
状态匹配:-m state --stale连接状态
[root@localhost ~]#iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT 允许邮箱使用
[root@localhost ~]#iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
[root@localhost ~]#iptables -A INPUT -m mac --mac -source 00:0c:29:c0:55:3f -j DROP
连接状态:
[root@localhost ~]#iptables -P INPUT DROP
[root@localhost ~]#iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[root@localhost ~]#iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
常用管理选项汇总
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107105209218.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h3eTk1MjY=,size_16,color_FFFFFF,t_70)
本章总结
iptables的基本语法
iptables常用管理选项
A、I、L、n、v、--line-numbers、D、F、P
iptables规则匹配条件
通用匹配、隐含匹配、显示匹配
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107105222738.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h3eTk1MjY=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107105226637.png)
附加:策略一般是针对其他主机使用
SNAT策略及应用→easyip
DNAT策略及应用←servernat
规则的导入、导出
使用防火墙脚本
SNAT策略概述
SNAT策略的典型应用环境
局域网主机共享单个公网IP地址接入Internet
SNAT策略的原理
源地址转换,Source Network Address Translation
修改数据包的源地址
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107105249525.png)
具体实现的方法:
(1)中间的防火墙充当路由器,开启nat功能;
(2)防火墙上做策略,指定192.168.1.0/24的主机转换成202.10.100.5
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens37(外网卡) -j SNAT --to-source 202.10.100.5
DNAT:相当于华为路由器中的servernat的知识点,让外网的用户可以访问内网发布的服务。
具体的实现方法:
(1)中间的防火墙充当路由器,开启nat功能;
(2)防火墙上做策略,指定访问网关的某服务映射给内网服务器
iptables -t nat -A PREROUTING -i ens37 (外网卡) -d 202.10.100.5 -p tcp --d port 21 -j DNAT --to-destination 192.168.1.10
附加:内→外:SNAT 192.168.1.0/24 → 202.10.100.5/24
外→内:DNAT 202.10.100.5:21→ 192.168.1.10:21
实验(上面为实验图以及实验说明)
192.168.1.11:
[root@serverl ~]# hostname internal
[root@serverl ~]# bash
192.168.1.10:
添加一块网卡VMent0(桥接模式)
编辑:虚拟网络编辑器:VMent0(Rea开头)确定
[root@ser ver ~]#cd /etc/sysconfig/network-scripts/
[root@ser ver network-scripts]# ls -lh
[root@ser ver network-scripts]#cp -p ifcfg-ens33 ifcfg-ens37
[root@ser ver network-scripts]#vi ifcfg-ens37
IPADDR=192.168.1.10
两个ens33改为ens37
删除uuid行:UUID=29301975-17cd-45af-93cf-e9226cfde05e
[root@server1 network-scripts]# systemctl restart network
[root@server1 network-scripts]# ifconfig
查看ens37ip是否改为202.10.101.5
[root@server1 network-scripts]#cd
20.0.0.12
网络适配器改为桥接模式
[root@server1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改以下配置
IPADDR=20.0.0.12 IPADDR=202.10.101.10
删除三行:GATEWAY=20.0.0.2
DNS=20.0.0.2
UUID=29301975-17cd-45af-93cf-e9226cfde05e
[root@server1 ~]# systemctl restart network
[root@server1 ~]#ifconfig
[root@server1 ~]#init 6
192.168.1.11:
[root@server1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.1.10
DNS=192.168.1.10
[root@server1 ~]# systemctl restart network
[root@server1 ~]#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.10 0.0.0.0 UG 100 0 0 ens33
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
20.0.0.12:
[root@server1 ~]# systemctl status network
[root@server1 ~]# ifconfig 查看ip是否为202.10.101.10
192.168.1.10:
ping以下两个ip,是否能通
[root@server1 ~]#ping 192.168.1.11
[root@server1 ~]# ping 202.10.101.10
20.0.0.12:
[root@server1 ~]#yun -y install httpd
[root@server1 ~]#cd /var/www/html
[root@server1 html]#vi index.html
<html><h1>new web</h1></html>
[root@server1 html]#systemctl start httpd
[root@server1 html]#curl http://localhost
<html><h1>new web</h1></html>
[root@server1 html]#cd
192.168.1.10:
[root@server1 ~]# vi /etc/sysctl.conf
最后一行添加以下内容
net.ipv4.ip_forward=1
[root@server1 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@server1 ~]# yum -y install iptables iptables-services
[root@server1 ~]# systemctl start iptables
[root@server1 ~]# iptables -F
[root@server1 ~]# iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -o ens37 -j SNAT --to-source 202.10.101.5
[root@server1 ~]# iptables -t nat -n -L((暂时先不输入)两条命令可以防止iptables -F前)
[root@server1 ~]# iptables -t filter -n -L
20.0.0.12:
[root@server1 ~]#systemctl status firewalld
[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# setenforce 0
192.168.1.10:192.168.1.11:
火狐浏览器输入
http://202.10.101.10
是否显示:new web
192.168.1.11:
[root@server1 ~]#yum -y install vsftpd
[root@server1 ~]# cd /var/ftp/pub/
[root@server1 pub]# echo abc > a.txt
[root@server1 pub]# cd
[root@server1 ~]# chown -R ftp.ftp /var/ftp/pub/
[root@server1 ~]# chmod -R 755 /var/ftp/pub/
更改以下配置
[root@server1 ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES其后面添加一行
anon_umask=022
#anon_upload_enable=YES→anon_upload_enable=YES
#anon_mkdir_write_enable=YES→anon_mkdir_write_enable=YES并在其后面添加一行
anon_other_write_enable=YES
listen=NO→listen=YES
listen_ipv6=YES→NO
[root@server1 ~]# systemctl restart network
[root@server1 ~]#systemctl start vsftpd
[root@server1 ~]#systemctl stop firewalld
[root@server1 ~]#setenfoce 0
[root@server1 ~]#systemctl stop iptables
[root@server1 ~]#netstat -anpt | grep 21
192.168.1.10:
[root@server1 ~]#yum -y install ftp
[root@server1 ~]#ftp 192.168.1.11
ftp 回车 cd pub ls -lh bye
[root@server1 ~]# iptables -t nat -I PREROUTING -d 202.10.101.5 -p tcp --dport 21 -j DNAT --to-destination 192.168.1.10
[root@server1 ~]# iptables -t nat -n -L PREROUTING
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 202.10.101.5 tcp dpt:21 to:192.168.1.10
[root@server1 ~]# iptables -t nat -I PREROUTING -d 202.10.101.5 -p tcp --dport 21 -j DNAT --to-destination 192.168.1.11
[root@server1 ~]# iptables -t nat -n -L PREROUTING
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 202.10.101.5 tcp dpt:21 to:192.168.1.11
DNAT tcp -- 0.0.0.0/0 202.10.101.5 tcp dpt:21 to:192.168.1.10
[root@server1 ~]# iptables -t nat -D PREROUTING 2
[root@server1 ~]# iptables -t nat -n -L PREROUTING
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 202.10.101.5 tcp dpt:21 to:192.168.1.11
20.0.0.12:
[root@server1 ~]#yum -y install ftp
[root@server1 ~]#ftp 202.10.101.5
ftp 回车 cp pub ls -lh后如果提示网络不可达 输入passive ls -lh get.a.txt
put initia;-setup-ks.cfg bye
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)