iptables(二)

2023-12-13 04:24:35

1. 防火墙

1.1 防火墙种类及使用说明

  • 硬件: 整个企业入口
    • 三层路由: H3C 华为 Cisco(思科)
    • 深信服
    • Juniper
  • 软件: 开源软件 网站内部 封ip 封ip
    • iptables 写入到Linux内核中 以后服务docker
    • firewalld C7
  • 云防火墙
    • 阿里云:安全组

1.2 必须熟悉的名词

容器: 瓶子 罐子  存放东西 
表(table):  存放链的容器
链(chain):  存放规则的容器  
规则(policy):   准许或拒绝规则  

在这里插入图片描述

1.3 iptables 执行过程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 表与链

1.4.1 简介

iptables 是  4表伍链
4表:   filter 表  nat表    raw表   mangle表 
伍链:  INPUT OUTPUT FORWARD  PREROUTING  POSTROUTING   

1.4.2 每个表的说明

(1) filter表

防火墙: 屏蔽或准许 端口 ip

filter强调:主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包) filter表示iptables默认使用的表,这个表定义了三个链(chains) 企业工作场景:主机防火墙
INPUT负责过滤所有目标地址是本机地址的数据包 通俗来说:就是过滤进入主机的数据包
FORWARD负责转发流经主机的数据包。起转发的作用,和NAT关系很大,后面会详细介绍 LVS NAT模式,net.ipv4.ip_forward=0
OUTPUT处理所有源地址是本机地址的数据包 通俗的讲:就是处理从主机发出去的数据包

(2) nat表

  • 实现nat功能
    • 实现共享上网(内网服务器上外网)
    • 端口映射和ip映射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.5 环境准备及命令

iptables iptables启动或关闭的命令

m01     10.0.0.61   172.16.1.61
web01   10.0.0.7    172.16.1.7
 
yum install -y  iptables-services
?
?
[root@oldboy-m01 ~]# uname -r 
3.10.0-862.el7.x86_64
[root@oldboy-m01 ~]# yum install -y  iptables-services 
?
?
?
[root@m01 ~]# rpm -ql   iptables-services 
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables                          #防火墙的配置文件    
/usr/lib/systemd/system/ip6tables.service 
/usr/lib/systemd/system/iptables.service         #防火墙服务配置文件(命令)
?
#防火墙相关模块 加载到内核中
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state  
?
#永久 
cat >>/etc/rc.local<<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state  
EOF
?
?
[root@m01 ~]# lsmod |egrep 'filter|nat|ipt'
nf_nat_ftp             12770  0 
nf_conntrack_ftp       18638  1 nf_nat_ftp
iptable_nat            12875  0 
nf_nat_ipv4            14115  1 iptable_nat
nf_nat                 26787  2 nf_nat_ftp,nf_nat_ipv4
nf_conntrack          133053  6 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4
iptable_filter         12810  0 
ip_tables              27126  2 iptable_filter,iptable_nat
libcrc32c              12644  3 xfs,nf_nat,nf_conntrack
?
[root@m01 ~]# systemctl stop firewalld 
[root@m01 ~]# systemctl disable   firewalld 
[root@m01 ~]# systemctl start iptables.service 
[root@m01 ~]# systemctl enable iptables.service 
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
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
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     

在这里插入图片描述

1.5.2 iptables命令参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.6 配置filter表规则

正式配置之前 先备份, 清空规则

[root@m01 ~]# iptables -F 
[root@m01 ~]# iptables -X
[root@m01 ~]# iptables -Z
?
[root@m01 ~]# iptables -nL 
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    

1.6.1 禁止访问22端口

iptables -t filter -I INPUT -p tcp   --dport 22  -j DROP

删除 规则 -D

在这里插入图片描述

1.6.2 封ip 屏蔽某个ip

[root@oldboy-m01 ~]# iptables -I INPUT  -s 10.0.0.7   -j DROP 
[root@oldboy-m01 ~]# iptables -I INPUT  -s 172.16.1.7   -j DROP 
[root@oldboy-m01 ~]# 
[root@oldboy-m01 ~]# iptables -nL   
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  172.16.1.7           0.0.0.0/0           
DROP       all  --  10.0.0.7             0.0.0.0/0           
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

1.6.3 禁止网段连入(禁止10.0.0.0/24网段访问 8888端口)

nc ncat netcat    

nc -l 

telnet 
iptables -I INPUT  -s 10.0.0.0/24  -p tcp  --dport 8  -j DROP 
[root@web01 ~]# ssh 10.0.0.61 hostname 
^C
[root@web01 ~]# ssh 172.16.1.61 hostname 
root@172.16.1.61's password: 
m01

在这里插入图片描述

1.6.4 只允许指定网段连入(允许10.0.0.0网段)

实现阿里云白名单功能  :默认是拒绝   开放端口  网段

allow  10.0.0.0/24;

deny all;
#方法1: 利用 !  进行排除 
#只准许 10.0.0.0/24 访问  言外之意   除了 10.0.0.0/24  都拒绝 
iptables -I INPUT ! -s 10.0.0.0/24  -j DROP

在这里插入图片描述
在这里插入图片描述

#方法2:  修改链默认规则  修改为拒绝  添加准许
先配置好规则 准许规则
修改默认规则
[root@oldboy-m01 ~]# iptables -nL
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@oldboy-m01 ~]# iptables -A  INPUT   -s 10.0.0.0/24   -j  ACCEPT 
[root@oldboy-m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@oldboy-m01 ~]# iptables -P INPUT DROP 
[root@oldboy-m01 ~]# iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    
?
#测试完成后 修改回去 
?
iptables  -P  INPUT  ACCEPT
?

在这里插入图片描述

1.6.4 指定多个端口

[root@oldboy-m01 ~]# iptables -I  INPUT  -p tcp --dport 8888   -j DROP 
[root@oldboy-m01 ~]# iptables -I  INPUT  -p tcp --dport 9999   -j DROP 
[root@oldboy-m01 ~]# iptables -nL 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9999
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8888
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
?
?
#补充:
#
[root@m01 ~]# iptables -I INPUT  -p tcp -m multiport ! --dport 80,443  -j DROP
#如果是 连续的端口  可以不加上-m multiport   1:1024 
[root@m01 ~]# iptables -I INPUT  -p tcp  --dport 1024:65535  -j DROP 

1.6.5 匹配ICMP类型

ICMP(Internet Control Message Protocol)Internet控制报文协议 ping

整个网站核心
通过防火墙规则 控制是否可以ping

[root@m01 ~]# iptables -I INPUT  -p icmp --icmp-type 8  -j DROP 
[root@m01 ~]# iptables -nL 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

通过内核参数 控制 禁止被ping

[root@m01 ~]# cat  /etc/sysctl.conf 
#/proc/sys/net/ipv4/icmp_echo_ignore_all
?
net.ipv4.icmp_echo_ignore_all = 1
[root@m01 ~]# sysctl -p 
net.ipv4.icmp_echo_ignore_all = 1
?
[root@oldboy-m01 ~]# echo  1  >/proc/sys/net/ipv4/icmp_echo_ignore_all 
[root@oldboy-m01 ~]# #net.ipv4.icmp_echo_ignore_all=1 写入到 /etc/sysctl.conf[root@oldboy-m01 ~]# #sysctl -p 
[root@oldboy-m01 ~]# echo  0 >/proc/sys/net/ipv4/icmp_echo_ignore_all 

1.6.6 匹配网络状态(TCP/IP连接状态)

-m state --state

NEW:已经或将启动新的连接

ESTABLISHED:已建立的连接

RELATED:正在启动的新连接

INVALID:非法或无法识别的

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
?
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

3.6.7 限制并发及速率

-m limit 限制模块

-m limit --limit 10/minute     #每分钟只能有10个数据包 每6秒生成

-m limit --limit n/{second/minute/hour}:

解释:指定时间内的请求速率”n”为速率,后面为时间分别为:秒 分 时

-m limit --limit 10/minute   --limit-burst 5  每6秒释放工牌 给别人使用 
?
#10个数据包   
前5个  1个1个工牌   从第6个开始 每6秒 才能释放1个工牌 

–limit-burst [n]

解释:在同一时间内允许通过的请求”n”为数字,不指定默认为5

  • 测试演示
#ping  icmp 协议  进行测试
iptables -F 
iptables -I INPUT  -p icmp  -m limit --limit 10/minute    --limit-burst 5   -j ACCEPT 
iptables -A INPUT  -p tcp  --dport 22 -j  ACCEPT 
iptables -P INPUT DROP 

在这里插入图片描述

  • web01 进行ping测试
ping  10.0.0.61 
?
[root@web01 ~]# ping 10.0.0.61 
PING 10.0.0.61 (10.0.0.61) 56(84) bytes of data.
64 bytes from 10.0.0.61: icmp_seq=1 ttl=64 time=0.240 ms
64 bytes from 10.0.0.61: icmp_seq=2 ttl=64 time=0.376 ms
64 bytes from 10.0.0.61: icmp_seq=3 ttl=64 time=0.474 ms
64 bytes from 10.0.0.61: icmp_seq=4 ttl=64 time=0.693 ms
64 bytes from 10.0.0.61: icmp_seq=5 ttl=64 time=2.43 ms
64 bytes from 10.0.0.61: icmp_seq=7 ttl=64 time=0.351 ms    #7与1比 就是间隔6秒
64 bytes from 10.0.0.61: icmp_seq=13 ttl=64 time=0.869 ms   #7 13  间隔6秒  
64 bytes from 10.0.0.61: icmp_seq=19 ttl=64 time=0.482 ms
64 bytes from 10.0.0.61: icmp_seq=25 ttl=64 time=0.378 ms
64 bytes from 10.0.0.61: icmp_seq=31 ttl=64 time=0.329 ms
64 bytes from 10.0.0.61: icmp_seq=37 ttl=64 time=0.857 ms
64 bytes from 10.0.0.61: icmp_seq=43 ttl=64 time=0.314 ms
64 bytes from 10.0.0.61: icmp_seq=49 ttl=64 time=0.360 ms
64 bytes from 10.0.0.61: icmp_seq=55 ttl=64 time=0.349 ms
64 bytes from 10.0.0.61: icmp_seq=61 ttl=64 time=0.552 ms
64 bytes from 10.0.0.61: icmp_seq=67 ttl=64 time=0.283 ms
64 bytes from 10.0.0.61: icmp_seq=73 ttl=64 time=0.407 ms
64 bytes from 10.0.0.61: icmp_seq=79 ttl=64 time=0.297 ms
64 bytes from 10.0.0.61: icmp_seq=85 ttl=64 time=0.428 ms
64 bytes from 10.0.0.61: icmp_seq=91 ttl=64 time=0.390 ms
64 bytes from 10.0.0.61: icmp_seq=97 ttl=64 time=0.691 ms
64 bytes from 10.0.0.61: icmp_seq=103 ttl=64 time=0.537 ms
64 bytes from 10.0.0.61: icmp_seq=109 ttl=64 time=0.546 ms
64 bytes from 10.0.0.61: icmp_seq=115 ttl=64 time=0.382 ms
64 bytes from 10.0.0.61: icmp_seq=121 ttl=64 time=0.337 ms
?

1.6.8 防火墙规则的保存与恢复

iptables-save 默认输出到屏幕
iptables-restore 加上文件
写入到/etc/sysconfig/iptables

[root@oldboy-m01 ~]# iptables-save   >/etc/sysconfig/iptables
[root@oldboy-m01 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Wed Feb 12 15:31:43 2020
*filter
:INPUT DROP [92:7008]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [127:14360]
-A INPUT -p icmp -m limit --limit 10/min -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
COMMIT
# Completed on Wed Feb 12 15:31:43 2020
# Generated by iptables-save v1.4.21 on Wed Feb 12 15:31:43 2020
*nat
:PREROUTING ACCEPT [559:51047]
:INPUT ACCEPT [60:6814]
:OUTPUT ACCEPT [6801:408868]
:POSTROUTING ACCEPT [6801:408868]
COMMIT
# Completed on Wed Feb 12 15:31:43 2020
[root@oldboy-m01 ~]# iptables -nL 
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            limit: avg 10/min burst 5
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@oldboy-m01 ~]# iptables -D 1 
iptables: Bad rule (does a matching rule exist in that chain?).
[root@oldboy-m01 ~]# 
[root@oldboy-m01 ~]# iptables -D INPUT 1 
[root@oldboy-m01 ~]# iptables -nL 
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@oldboy-m01 ~]# iptables-restore  </etc/sysconfig/iptables 
[root@oldboy-m01 ~]# iptables -nL 
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            limit: avg 10/min burst 5
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    
?
补充:
systemctl  restart  iptables    #读取 /etc/sysconfig/iptables内容

1.6.9 filter表小结

封ip 端口  网段 
禁止ping
限制速度和并发  
iptables filter表 功能 可以在 云服务器使用 

1.7 实际生产用法

iptables配置方式

逛公园模式:  默认规则是 ACCEPT
看电影模式:   默认规则是 DROP 
默认是拒绝   去电影院

(1)ssh可以连接进来

[root@m01 ~]# iptables -F 
[root@m01 ~]# iptables -X
[root@m01 ~]# iptables -Z
[root@m01 ~]# iptables -nL 
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@m01 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT  
[root@m01 ~]# iptables -nL 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     

(2)设置允许本机lo通讯规则
允许本机回环lo接口数据流量流出与流入

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

(3)配置默认规则及 放行 80 443端口

[root@m01 ~]# iptables -P INPUT DROP 
[root@m01 ~]# iptables -P FORWARD DROP 
[root@m01 ~]# iptables -P OUTPUT ACCEPT 
?
[root@m01 ~]# iptables -A INPUT  -m multiport -p tcp  --dport 443,80   -j ACCEPT 
[root@m01 ~]# iptables -nL 
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80
?
Chain FORWARD (policy DROP)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
[root@m01 ~]# iptables -A INPUT  -s 10.0.0.0/24  -j ACCEPT 
[root@m01 ~]# iptables -A INPUT  -s 172.16.1.0/24  -j ACCEPT 
#此处还可以添加 vpn网段 比如说 10.7.1.0/24
?
[root@m01 ~]# iptables -nL 
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80
ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           
ACCEPT     all  --  172.16.1.0/24        0.0.0.0/0           
?
Chain FORWARD (policy DROP)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
[root@m01 ~]# iptables-save 
# Generated by iptables-save v1.4.21 on Wed Jul 24 23:42:00 2019
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [24:3008]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m multiport --dports 443,80 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -j ACCEPT
-A INPUT -s 172.16.1.0/24 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Wed Jul 24 23:42:00 2019
  • 汇总
[root@oldboy-m01 ~]# iptables-save  
# Generated by iptables-save v1.4.21 on Wed Feb 12 15:51:48 2020
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:60]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m multiport --dports 443,80 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -j ACCEPT
-A INPUT -s 172.16.1.0/24 -j ACCEPT
-A INPUT -s 10.7.1.0/24 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed Feb 12 15:51:48 2020
# Generated by iptables-save v1.4.21 on Wed Feb 12 15:51:48 2020
*nat
:PREROUTING ACCEPT [2:458]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [417:25020]
:POSTROUTING ACCEPT [417:25020]
COMMIT
# Completed on Wed Feb 12 15:51:48 2020
?

1.8 nat

共享上网
端口转发/端口映射
ip映射
[root@m01 ~]# iptables -P INPUT ACCEPT
[root@m01 ~]# iptables -P FORWARD ACCEPT 
[root@m01 ~]# iptables -nL 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80
ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           
ACCEPT     all  --  172.16.1.0/24        0.0.0.0/0           
?
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -nL 
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  

1.8.1 实现共享上网
在这里插入图片描述

  1. 防火墙配置
[root@m01 ~]# iptables -t nat -A POSTROUTING  -s 172.16.1.0/24   -j SNAT  --to-source 10.0.0.61 
[root@m01 ~]# echo 'net.ipv4.ip_forward = 1'  >> /etc/sysctl.conf 
[root@m01 ~]# sysctl -p
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.ip_forward = 1
注意事项:
公网ip不固定:
iptables -t nat -A POSTROUTING  -s 172.16.1.0/24   -j  MASQUERADE
  1. web配置
[root@web01 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=no
IPADDR=10.0.0.7
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
GATEWAY=10.0.0.254
[root@web01 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
IPADDR=172.16.1.7
PREFIX=24
NAME=eth1
DEVICE=eth1
ONBOOT=yes
GATEWAY=172.16.1.61
DNS1=1.2.4.8
[root@web01 ~]# systemctl restart network 
[root@m01 ~]# ssh 172.16.1.7 
Last login: Wed Jul 24 23:06:58 2019 from 10.0.0.1
[root@web01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:0c:29:b2:e3:7e brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:b2:e3:88 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.7/24 brd 172.16.1.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feb2:e388/64 scope link 
       valid_lft forever preferred_lft forever
[root@web01 ~]# ping baidu.com 
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=127 time=8.90 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=127 time=7.52 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=127 time=9.28 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=4 ttl=127 time=9.36 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 7.528/8.769/9.364/0.746 ms
[root@web01 ~]# ping 1.2.4.8
PING 1.2.4.8 (1.2.4.8) 56(84) bytes of data.
64 bytes from 1.2.4.8: icmp_seq=1 ttl=127 time=76.4 ms
64 bytes from 1.2.4.8: icmp_seq=2 ttl=127 time=76.8 ms
^C
--- 1.2.4.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 76.440/76.637/76.834/0.197 ms
  1. 完成后 在web01 发出 ip r和ping 外网ip的结果
[root@web01 ~]# ip r 
default via 172.16.1.61 dev eth1 
169.254.0.0/16 dev eth1 scope link metric 1003 
172.16.1.0/24 dev eth1 proto kernel scope link src 172.16.1.7 
[root@web01 ~]# route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.1.61     0.0.0.0         UG    0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
[root@web01 ~]# ping baidu.com 
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=127 time=21.7 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=127 time=32.6 ms
^C
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 21.781/27.214/32.647/5.433 ms 

1.8.2 实现端口转发

在这里插入图片描述
在这里插入图片描述

[root@m01 ~]# iptables -t nat -A PREROUTING    -d 10.0.0.61 -p tcp --dport 9000  -j DNAT --to-destination 172.16.1.7:22
[root@m01 ~]# iptables -nL -t nat 
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            10.0.0.61            tcp dpt:9000 to:172.16.1.7:22
?
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
?
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  172.16.1.0/24        0.0.0.0/0            to:10.0.0.61

测试与检查

本地shell中   
[d:\~]$ ssh root@10.0.0.61 9000

1.8.3 实现ip映射

 ip a add   10.0.0.62/24 dev eth0  label eth0:0
?
[root@m01 ~]# iptables -t nat -A PREROUTING  -d 10.0.0.62  -j DNAT  --to-destination 172.16.1.7 
[root@m01 ~]# iptables -nL -t nat 
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            10.0.0.61            tcp dpt:9000 to:172.16.1.7:22
DNAT       all  --  0.0.0.0/0            10.0.0.62            to:172.16.1.7
?
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
?
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
?
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  172.16.1.0/24        0.0.0.0/0            to:10.0.0.61

1.8.4 nat表总结

实现共享上网
端口转发
nat功能在 云服务器无法使用 替代品叫: NAT网关

2. 自我总结

排错必备命令:  
tcpdump -nni eth0 port 9000  抓包工具
route -n  查看路由信息(主要看网关)看第一行的内容    
ICMP是控制协议,不需要端口号  
nat的snat是提供内网上网的  
nat的dnat是从外网连接内网的服务器的
iptalbles在网络层的上面和下面进行控制
ip 截获ip    tables按照三个表进行过滤··
iptables命令来把配置下面的表:
filter表:控制放行和拒绝的,比如22端放行(常用)
nat表:  sant dant作用(常用),网络地址转换
mangle表:改写头部信息的,一般用不到
raw表

网卡双路由(三种数据包情况)
1. 是不是找我的80端口的服务
2. 找我的,转发到另一个服务器上,可能找后端的服务去了
3. 由应用层直接出去出去的有数据包

有函数的地方就是链
不指定表,默认的就是filter表

停止firewalld,然后安装iptables
yum list | grep iptables  安装server端


input:允许谁进
如果不加-t 指定表的话就是走的是filter表

在这里插入图片描述

3. 练习题

https://www.jianshu.com/p/19422676b854
(1)请写出查看iptables当前所有规则的命令。

iptables-save 

iptables -nL

iptables -nL -t nat 

(2)禁止来自10.0.0.188 ip地址访问80端口的请求

iptables -I   INPUT   -s 10.0.0.188 -p tcp   --dport 80      -j  DROP 

(3)如何使在命令行执行的iptables规则永久生效?

iptables-save  
?
/etc/sysconfig/iptables

(4)实现把访问10.0.0.3:80的请求转到172.16.1.17:80

iptables -t nat  -A PREROUTING  -d 10.0.0.3  -p tcp --dport 80    -j   DNAT  --to-destination  172.16.xxxx:80

(5)实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。

iptables   -t nat  -A POSTROUTING    -s 172.16.1.0/24    -j  SNAT  --to-source   123.32.54.26
?
iptables   -t nat  -A POSTROUTING    -s 172.16.1.0/24    -j  SNAT  MASQUERADE

(6)案例 iptalbes 实现防止syn ddos 和ping攻击

-A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
-A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
-A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
说明:第一行:每秒中最多允许5个新连接。第二行:防止各种端口扫描。第三行:Ping洪水攻击(Ping of Death),可以根据需要调整或关闭

防火墙 笔试题  www.jianshu.com/p/2180face8381

文章来源:https://blog.csdn.net/weixin_46818279/article/details/134899073
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。