iptables防火墙的实例教程

iptables 是一个配置 Linux 内核 防火墙 的命令行工具,是 netfilter 项目的一部分。术语 iptables 也经常代指该内核级防火墙。iptables 可以直接配置,也可以通过许多 前端 和 图形界面 配置。iptables 用于 ipv4,ip6tables 用于 ipv6。

iptables 可以检测、修改、转发、重定向和丢弃 IPv4 数据包。过滤 IPv4 数据包的代码已经内置于内核中,并且按照不同的目的被组织成 表 的集合。表 由一组预先定义的 链 组成,链 包含遍历顺序规则。每一条规则包含一个谓词的潜在匹配和相应的动作(称为 目标),如果谓词为真,该动作会被执行。也就是说条件匹配。iptables 是用户工具,允许用户使用 链 和 规则。

下图简要描述了网络数据包通过 iptables 的过程:

XXXXXXXXXXXXXXXXXX
                             XXX     Network    XXX
                               XXXXXXXXXXXXXXXXXX
                                       +
                                       |
                                       v
 +-------------+              +------------------+
 |table: filter| <---+        | table: nat       |
 |chain: INPUT |     |        | chain: PREROUTING|
 +-----+-------+     |        +--------+---------+
       |             |                 |
       v             |                 v
 [local process]     |           ****************          +--------------+
       |             +---------+ Routing decision +------> |table: filter |
       v                         ****************          |chain: FORWARD|
****************                                           +------+-------+
Routing decision                                                  |
****************                                                  |
       |                                                          |
       v                        ****************                  |
+-------------+       +------>  Routing decision  <---------------+
|table: nat   |       |         ****************
|chain: OUTPUT|       |               +
+-----+-------+       |               |
      |               |               v
      v               |      +-------------------+
+--------------+      |      | table: nat        |
|table: filter | +----+      | chain: POSTROUTING|
|chain: OUTPUT |             +--------+----------+
+--------------+                      |
                                      v
                               XXXXXXXXXXXXXXXXXX
                             XXX    Network     XXX
                               XXXXXXXXXXXXXXXXXX

下载iptables并启用

iptables 是主要的 Linux 防火墙工具,但也有例外,例如在 CentOS 7.x 默认的防火墙是firewalld

如何给 CentOS 7.x 上 iptables? 教程实例如下:

首先要关闭firewalld

systemctl stop firewalld.service
systemctl mask firewalld
systemctl disable firewalld.service

下载iptables并启用

yum -y install iptables-services
systemctl restart iptables.service
systemctl enable iptables.service

清除已有规则

iptables -F
iptables -X
iptables -Z

重置规则

使用这些命令刷新和重置 iptables 到默认状态:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -t security -F
iptables -t security -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

开放指定的端口

-A和-I参数分别为添加到规则末尾和规则最前面

#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT  #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT

屏蔽IP

如果只是想屏蔽IP的话,会在“开放指定的端口”可以直接跳过

#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP

添加IP至白名单

#将IP为8.8.8.8对本机所有端口的所有方式的连接添加进白名单
iptables -A INPUT -s 8.8.8.8 -j ACCEPT
#将IP为45.123.45.123对本机80端口的TCP方式的连接添加进白名单
iptables -A INPUT -s 45.123.45.123 -p tcp  --dport 80 -j ACCEPT

防御各类攻击

#防御SYN轻量级攻击
iptables -N syn-flood 
iptables -A INPUT -p tcp --syn -j syn-flood 
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN 
iptables -A syn-flood -j REJECT
#防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃 
iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP 
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#用Iptables抵御DDOS (参数与上相同)
iptables -A INPUT  -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

#通过另一种想法防御syn,ddos攻击
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

#防御CC
#控制单个IP的最大并发连接数
#允许单个IP的最大连接数为 30
iptables -I INPUT -p tcp --dport 80 -m connlimit  --connlimit-above 50 -j REJECT #默认iptables模块不包含connlimit,需要自己单独编译加载
#控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
#单个IP在60秒内只允许最多新建30个连接
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT

查看已添加规则

iptables -L -n

v:显示详细信息,包括每条规则的匹配包数量和匹配字节数 x:在 v 的基础上,禁止自动单位换算(K、M) n:只显示IP地址和端口号,不将ip解析为域名

删除已添加规则

将所有iptables以序号标记显示,执行:

iptables -L -n --line-numbers

比如要删除INPUT里序号为7的规则,执行:

iptables -D INPUT 7

开机启动及规则保存

CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:

chkconfig iptables on

将其加入开机启动。

CentOS 6.x 上可以执行:

service iptables save

CentOS 7.x 上可以执行:

systemctl save iptables

日后还会继续增加更多的实例,就这样···

Last modification:May 12th, 2018 at 09:58 am

© The copyright belongs to the author

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ml

linux开关端口问题

linux开关端口问题: 我们知道一些常用的端口,比如mysql的端口为3306,sql的端口为:1433,以及tomcat的端口为 8008等等一样! ...

98360
来自专栏CaiRui

Centos6和7的区别

1、init系统 Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核...

52490
来自专栏蓝天

iptables简单应用

可以修改/etc/rc.d/boot.local让规则重启后也能生效,如: /sbin/iptables -F /sbin/iptables -A INP...

11330
来自专栏小狼的世界

iptables 学习笔记

10730
来自专栏友弟技术工作室

iptables系列二

iptables系列之基本应用及显式扩展 ? netfilter:Framework,TCP,内核中 iptables语法 iptables [-t tab...

409120
来自专栏ppjun专栏

网管入门系列——在ubuntu配置iptables

iptables是用来设置、维护和检查Linux内核的IP包过滤规则的。就是一个ip防火墙,也就是说我们无论用什么端口访问别人还是别人用什么端口来访问我们,都要...

41420
来自专栏Java成神之路

Java_注解_异常_01_ElementType cannot be resolved to a variable

import java.lang.annotation.RetentionPolicy;

7920
来自专栏编程微刊

动态表格之查看、删除、编辑

27820
来自专栏Java学习123

CentOS 7.0关闭默认防火墙启用iptables防火墙

44550
来自专栏搜云库

CentOS7.3 安装 iptables 与详细使用

CentOS7.3 安装 iptables 与详细使用 安装操作 检查状态 先检查是否安装了iptables $ service iptables status...

363100

扫码关注云+社区

领取腾讯云代金券