防火墙基础笔记

防火墙基础概念

       Netfilter/iptables 是unix/linux自带的一款优秀且开放源代码的完全*的基于包过滤的防火墙工具

       iptables防火墙功能十分强大,使用非常灵活.可以对流入和流出服务的数据包进行很精细的控制

       主要工作在OSI7层模型二,三 ,四层.可以对防火墙服务内核进行重新编译,可以支持7层防护(squid+iptables=waf)

防火墙表

      防火墙进行防护的策略维度  4个维度

      filter表

          防火墙使用的默认表。可以实现对数据包过滤处理

          表下面含有的链:

              INPUT:对访问进入防火墙服务的流量进行管理控制 外面人 -INPUT-> 房子(防火墙)

              FORWARD:对访问经过防火墙流量进行管理控制 外面人 - 房子(FORWARD) - 后花园(架构中内部主机) nat配合

              OUTPUT:对内部访问外部流量进行管理控制 房子(人) -OUTPUT-> 外面世界

      nat表

            可以将访问目标或源信息进行转换(映射)

            PREROUTING:在进行数据包路由转发之前,对数据包里面目标地址(IP)或者目标端口进行转换

            POSTROUTING:在进行数据包路由转发之后,对数据包里面源地址(IP)或者源端口进行转换    

      mangle表

            可以专门用于改写数据包信息(此表用处较少,可以忽略不计)

      raw表

           可以去除一定的信息(此表用处较少,可以忽略不计)

   防火墙配置命令

        iptables  -t 表信息  -p 链信息  具体规则信息

    防火墙基础笔记

防火墙基础笔记
需求01:禁止某个服务不要被外网访问

```
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
```



需求02:禁止指定地址可以访问,其余地址不能访问

```
iptables -t filter -I INPUT -s 10.0.0.1 -p tcp --dport 80 -j DROP


需求03:如何对网段信息进行配置?

```
iptables -t filter -I INPUT -s 10.0.0.0/24 -p tcp --dport 80 -j DROP
```



需求04:只允许指定网段可连入;只允许10.0.0.0/24网段里面的主机可以访问

```
iptables -t filter -A INPUT ! -s 10.0.0.0/24 -p tcp --dport 23 -j DROP
```



需求05:多端口访问策略配置

- **连续多端口配置 22-80**

```
iptables -A INPUT -s 10.0.0.10 -p tcp --dport 22:80 -j ACCEPT
```



- **间隔多端口配置 22 24 26 80**

```
iptables -A INPUT -m multiport -s 10.0.0.10 -p tcp --dport 22,24,26,80 -j ACCEPT
```



需求06:实现访问测试禁ping功能

```
# 方式一: 对ICMP请求的流量进行阻止 实现禁ping
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

# 方式二: 对ICMP响应的流量进行阻止 实现禁ping
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP

# 简单配置方法:
iptables -A INPUT -p icmp --icmp-type any -j DROP
```



需求07:设置网络限制策略(限制数据传输频率)

-m limit 

--limit n/(second/minute/hour) : 指定单位时间内可以接收或输出多少个数据包

--limit-burst n : 指定达到策略限制标准

```
iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -m limit --limit 6/min  --limit-burst 5 -j ACCEPT
iptables -I INPUT 2 -s 10.0.0.7 -p icmp --icmp-type 8  -j DROP
命令示例 防火墙基础笔记
第一个步骤:对内网主机设置内网网关

```
# tail -2 /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.61
DNS1=223.5.5.5

ifdown eth1 && ifup eth1
```



第二个步骤:在防火墙服务器上开启路由转发功能

```
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
```



第三个步骤:配置NAT地址映射功能

```shell
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61


需求09:如何实现外网主机访问端口映射 

A主机  ---  (10.0.0.61)防火墙(172.16.1.61) ----  内部服务器(172.16.1.8:22)

   D:10.0.0.61:9000 --> 172.16.1.8:22

第一个步骤:在防火墙服务器上开启路由转发功能

```shell
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
```



第二个步骤:在防火墙服务器上设置端口或地址映射功能

```
iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:22
示例2

防火墙自定义链

     iptables -N syn-flood
      # 创建一个syn-flood自定义链
     iptables -A INPUT -i eth0 -syn -j syn-flood
     # 将INPUT链中抓取的syn数据流量都放入到syn-flood自定义链中
    iptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURN
     # 一旦获取到流量大于每秒5000,并发大于200时,就执行下一条规则
    iptables -A syn-flood -j DROP
     # 丢弃syn-flood链上的数据
    说明:自定义链避免syn的泛洪攻击

    什么是自定义链:
     iptables -N port-info
     iptables -A port-info -p tcp --dport 8080 -j ACCEPT
     iptables -A INPUT -s 10.0.0.0/24 -j port-info
     iptables -R INPUT -s 11.0.0.0/8 -j port-info
     iptables -A INPUT -s 192.168.1.0/24 -j port-info

防火墙基础笔记

防火墙基础笔记

 

上一篇:firewalld和iptables区别


下一篇:iptables中实现内外网相互访问——SNAT与DNAT的原理与应用