跳转至

防火墙

防火墙种类及使用说明

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

必须熟悉的名词

  • 容器: 瓶子 罐子 存放东西
  • 表(table): 存放 的容器
  • 链(chain): 存放 规则 的容器
  • 规则(policy): 准许或拒绝规则
Netfilter 表(tables) 链(chains) 规则(Policy)
一栋楼 楼里的房子 房子里的柜子 柜子里衣服,摆放规则

iptables防火墙

iptables作用:

1.拦截可疑数据包进入服务器
2.转发路由

数据包

1. 找我的
2. 转发的
3. 应用层自身产生的

执行过程

1. 工作在内核层中的网络层
2. filter表:监控数据能不能进出
3. NAT表:数据包能不能转发
4. Mangle表:改写头部信息

image-20210622185131729

image-20210622185322871

image-20210621200719418

image-20210621200848162

四表五链

img

1. Filter表: 控制数据包是否能进来,屏蔽或准许、端口、IP、确定是否放行该数据包(过滤)
   1) INPUT链               处理入站的数据包
   2) OUTPUT链              处理出站的数据包
   3) FORWAED链             处理转发的数据包

2. NAT表: 控制转发、实现共享上网(内网服务器上外网)修改数据包中的源、目标IP地址或端口
   1) PREROUTING链     在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
   2) OUTPUT链         处理出站的数据包
   3) POSTROUTING链    在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)

3.mangle表: 为数据包设置标记(较少使用), 数据改写
   1) PREROUTING链          在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
   2) FORWAED链             处理转发的数据包
   3) INPUT链               处理入站的数据包
   4) OUTPUT链              处理出站的数据包
   5) POSTROUTING链         在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)

4. raw表: 确定是否对该数据包进行状态跟踪

规则表的先后顺序:

raw → mangle → nat → filter

规则链的先后顺序:

入站顺序: PREROUTING → INPUT

出站顺序: OUTPUT → POSTROUTING

转发顺序: PREROUTING → FORWARD→POSTROUTING

iptables命令中则常见的控制类型有

  • ACCEPT: 允许通过.
  • LOG: 记录日志信息,然后传给下一条规则继续匹配.
  • REJECT: 拒绝通过,必要时会给出提示.
  • DROP: 直接丢弃,不给出任何回应.

image-20210621200927495

iptables安装准备

1. 关闭 firewalld
    1)systemctl stop firewalld   disable
2. 安装iptables
    1)yum -y install iptables-services
3. 加载模块
    1) lsmod |egrep 'filter|nat|ipt'
    2)  
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack   
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state

    3)或者将2)的内容写入到开机自启中/etc/rc.d/rc.local
    4)加执行权限
        (1)chmod +x /etc/rc.d/rc.local  
4. 开启iptables
    1)开启iptables并加入开机自启
        (1)systemctl start iptables.service
        (2)systemctl enable iptables.service    
5. 列出规则
    1)iptables -nL
    2)iptables 参数
    3)iptables -t 指定表名称 规则 -j 动作

image-20230324162016426

参数 含义
-L 显示表中的所有规则
-n 不要把端口 或ip反向解析为 名字
-t 指定表 不指定默认是filter表
-A append 追加 加入准许类规则 使用-A
-D delete 删除 -D INPUT 1
-I insert 拒绝类规则放在所有规则最上面 拒绝类 -I
参数 含义
-p 协议 protocal tcp/udp/icmp/all
--dport 目标端口 dest destination 指定端口 加上协议 -p tcp
--sport 源端口 source 源
-s --source 源ip
-d --destination 目标ip
-m 指定模块 multiport
-i input 输入的时候 从哪个网卡进来
-o ouput 输出的时候 从哪个网卡出去
参数 含义
-j 满足条件后的动作 : DROP/ACCEPT/REJECT
DROP REJECT拒绝
DROP把数据丢掉 不会返回信息给用户
REJECT 拒绝 返回拒绝信息
参数 含义
-F flush 清除所有规则,不会处理默认的规则
-X 删除用户自定义的链
-Z 链的计数器清零(数据包计数器与数据包字节计数器)

配置filter表规则

6. 先备份, 清空规则
    1)iptables -F 
    2)iptables -X
    3)iptables -Z
    4)iptables -nL       查看当前规则
7. 禁止访问22端口
    1)设置禁止访问22端口
        (1)iptables -t filter -I INPUT -p tcp   --dport 22  -j DROP
    2)删除上面设置的规则
        (1)iptables -t
        (2)iptables -D INPUT -p tcp --drpot 22 -j DROP
        (3)iptables -nL --line
        (4)iptables -D INPUT 1
8. 屏蔽某个IP
    1) iptables -t filter -I INPUT -s 10.0.0.7 -j DROP
    2) iptables -I INPUT -s 172.16.1.7 -j DROP 
    3) iptables -nL 
    4) 删除上面规则
        (1)iptables -D INPUT 2
        (2)iptables -t filler -D INPUT -s 10.0.0.7 -j DROP
9. 查看与服务器建立连接的ip
    1)netstat -an|grep ESTAB
10. 禁止网段连入(禁止客户端访问8.8.8.8端口)
用nc来模拟端口
yum -y install nc     服务端
nc -kl 8888           模拟端口
telnet 10.0.0.5 8888  客户端连接
    1)拒绝客户端访问服务端8888端口
        (1)iptables -t filter -I INPUT -s 10.0.0.0/24 -p tcp --dport 8888 -j DROP
11. 只允许指定网段连入(允许10.0.0.0网段)
方法一:
    1)iptables -I INPUT ! -s 10.0.0.0/24 -j DROP0
    2)
        (1)iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j
        (2)iptables -P INPUT DROP
利用 !  进行排除,只准许 10.0.0.0/24 访问  言外之意  除了 10.0.0.0/24  都拒绝         

12. Iptables 开放网口与ip来源
例:所有的来自 lo 这个网口的封包,都予以接受

iptables –A INPUT –i lo –j ACCEPT

例:目标来自 192.168.1.200 这个 IP 的封包都予以接受

iptables –A INPUT –i eth0 –s 192.168.1.200 –j ACCEPT

例:192.168.1.0/24 可接受,但 192.168.1.10 丢弃

iptalbes –A INPUT –i eth0 –s 192.168.1.0/24 –j ACCEPT

iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP
方法二:
    1) iptables -A  INPUT   -s 10.0.0.0/24   -j  ACCEPT
    2) iptables -nL
    3) iptables -P INPUT DROP
    4) iptables -nL
    5) 测试完成、修改回默认 iptables  -P  INPUT  ACCEPT

13. 指定多个端口
    1)指定80、443端口
        (1)iptables -I INPUT  -p tcp -m multiport ! --dport 80,443  -j DROP
14. 控制是否允许被ping 
1. 通过防火墙规则  控制是否可以ping
    1)拒绝被ping
        (1)iptables -I INPUT  -p icmp --icmp-type 8  -j DROP 

2. 通过内核参数,控制,禁止被ping
    1)cat  /etc/sysctl.conf 
#/proc/sys/net/ipv4/icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 1
    2)sysctl -p 
net.ipv4.icmp_echo_ignore_all = 1
    3)echo  1  >/proc/sys/net/ipv4/icmp_echo_ignore_all 
    4)echo net.ipv4.icmp_echo_ignore_all=1 >> /etc/sysctl.conf
    5)sysctl -p 
    6)echo  0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
15. 匹配网络状态(TCP/IP连接状态) 
    1)iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    2)iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
16. 限制并发及速率
    -m limit --limit 10/minute     #每分钟只能有10个数据包 每6秒生成
    1)iptables -F 
    2)iptables -I INPUT  -p icmp  -m limit --limit 10/minute    --limit-burst 5   -j ACCEPT 
    3)iptables -A INPUT  -p tcp  --dport 22 -j  ACCEPT 
    4)iptables -P INPUT DROP

web端测试:
    1)ping 10.0.0.61
17. 防火墙规则的保存与恢复
-  iptables-save     默认输出到屏幕 
-  iptables-restore  加上文件 
-  写入到/etc/sysconfig/iptables 

    1)iptables-save   >/etc/sysconfig/iptables       备份规则
    2)iptables-restore  </etc/sysconfig/iptables     恢复规则
    3)iptables -nL                                   查看规则
    4)systemctl  restart  iptables                   读取规则
18. -s ip
    -p 端口
    -s 网段

filter表小结

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

配置nat表规则

1. 共享上网
2. 端口转发
3. 端口映射
iptables -t nat 

    1) iptables -P INPUT ACCEPT
    2) iptables -P FORWARD ACCEPT
    3) iptables -nL 
    4) iptables -F
    5) iptables -nL

实现共享上网

NAT(Network AddressTranslation网络地址转换)

首先说说局域网内封包的传送,

  1. 先经过 NAT table 的 PREROUTING 链;

  2. 经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;

  3. 再经过 Filter table 的 FORWARD 链;

  4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。

NAT 主机的重点就在于上面流程的第 1,4 步骤,也就是 NAT table 的两条重要的链:PREROUTING 与POSTROUTING。 那这两条链重要功能在于修改IP,而这两条链修改的IP又是不一样的,POSTROUTING在修改来源IP,PREROUTING则在修改目标IP 。由于修改的 IP 不一样,所以就称为来源NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。

SNAT 源地址转换

Snat

SNAT即源地址转换,能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题。一个无线路由器也就使用此技术。

img

需要将192.168.10.10转换为111.196.211.212,iptables命令如下

iptables –t nat –A POSTROUTING –s 192.168.10.10 –o eth1 –j SNAT --to-source 111.196.221.212

外网IP地址不稳定的情况即可使用MASQUERADE(动态伪装),能够自动的寻找外网地址并改为当前正确的外网IP地址

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

DNAT 目地地址转换

Dnat

DNAT即目地地址转换,则能够让外网用户访问局域网内不同的服务器。(相当于SNAT的反向代理)

img

目标地址192.168.10.6在路由前就转换成61.240.149.149,需在网关上运行iptables命令如下:

iptables –t nat –A PREROUTING –i eth1 –d 61.240.149.149 –p tcp –dport 80 –j DNAT --to-destination 192.168.10.6:80

eth1网口传入,且想要使用 port 80 的服务时,将该封包重新传导到 192.168.1.210:80 的 IP 及 port 上面,可以同时修改 IP 与 port。此为地址映射与端口转换。
还可以使用REDIRECT单独进行端口转换

例:将 80 端口的封包转递到 8080端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

防火墙配置

1. 防火墙配置
    (1)iptables -t nat -A POSTROUTING  -s 172.16.1.0/24   -j SNAT  --to-source 10.0.0.61
    (2)echo 'net.ipv4.ip_forward = 1'  >> /etc/sysctl.conf 
    (3)sysctl -p
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.ip_forward = 1

注意事项:
公网ip不固定:
iptables -t nat -A POSTROUTING  -s 172.19.0.0/16   -j  MASQUERADE

2. web配置
    (1)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

    (2)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

    (3)systemctl restart network 

    (4)ssh 172.16.1.7
    (5)ping baidu.com

端口转发

1.  端口转发
    (1)iptables -t nat -A PREROUTING  -d 10.0.0.61 -p tcp --dport 9000  -j DNAT --to-destination 172.16.1.7:22
    (2)iptables -nL -t nat

测试:
[d:\~]$ ssh root@10.0.0.61 9000
iptables -t nat -A PREROUTING  -d 1.116.64.223 -p tcp --dport 1433  -j DNAT --to-destination 10.1.5.11:1433
iptables -t nat -A POSTROUTING -d 10.1.5.11 -p tcp --dport 1433 -j SNAT --to 10.1.5.9
iptables -t nat -A PREROUTING -p tcp --dport 1433 -j DNAT --to-destination 10.1.5.11:1433
iptables -t nat -A POSTROUTING -d 10.1.5.11 -p tcp --dport 1433 -j SNAT --to 10.1.5.9

实现ip映射

1. iptables -t nat -A PREROUTING  -d 10.0.0.62  -j DNAT  --to-destination 172.16.1.7 
2. iptables -nL -t nat
7. 实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网
    1)iptables   -t nat  -A POSTROUTING    -s 172.16.1.0/24    -j  SNAT  --to-source   123.32.54.26
    2)iptables   -t nat  -A POSTROUTING    -s 172.16.1.0/24    -j  SNAT  MASQUERADE

nat表小结

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

实际生产用法

  • 默认关闭:DROP
  • ​ 开启:ACCEPT
1. iptables 规则关闭
    (1)修改成开启
        1)iptables -P INPUT DROP
    (2)修改成默认
        1)iptables -P INPUT ACCEPT

默认规则关闭时,添加的规则为允许
默认规则允许时,添加的规则为拒绝
2. 设置允许本机lo、通讯规则
    1)允许本机回环lo接口数据流量流出与流入
    (1)iptables -A INPUT -i lo -j ACCEPT
    (2)iptables -A OUTPUT -o lo -j ACCEPT
3. 配置默认规则、放行 80 、 443 端口
    1) iptables -p INPUT DROP
    2) iptables -p FORWARD DROP
    3) iptables -p OUTPUT ACCEPT
    4) iptables -A INPUT  -m multiport -p tcp  --dport 443,80   -j ACCEPT
    5) iptables -A INPUT  -s 10.0.0.0/24  -j ACCEPT
    6) iptables -A INPUT  -s 172.16.1.0/24  -j ACCEPT
    7) iptables-save
4. 禁止来自10.0.0.188 ip地址访问80端口的请求
    1)iptables -I INPUT -s 10.0.0.188 -p tcp --dport 80 -j DROP
5. 如何使在命令行执行的iptables规则永久生效?
    1)iptables-save
6. 实现把访问10.0.0.3:80的请求转到172.16.1.17:80
    1)iptables -t nat  -A PREROUTING  -d 10.0.0.3  -p tcp --dport 80    -j   DNAT  --to-destination  172.16.xxxx:80
7. 实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网
    1)iptables   -t nat  -A POSTROUTING    -s 172.16.1.0/24    -j  SNAT  --to-source   123.32.54.26
    2)iptables   -t nat  -A POSTROUTING    -s 172.16.1.0/24    -j  SNAT  MASQUERADE
8. iptalbes 实现防止syn ddos 和ping攻击
    1) -A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
    2)-A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    3)-A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

说明:第一行:每秒中最多允许5个新连接。第二行:防止各种端口扫描。第三行:Ping洪水攻击(Ping of Death),可以根据需要调整或关闭
9. 请写出查看iptables当前所有规则的命令
    1)iptables-save
    2)iptables -nL
    3)iptables -nL -t nat
10. 端口扫描
    1)nmap -sN 172.16.1.7