IPTables 入门

Summary: Author: 张亚飞 | 阅读时间: 4 minute read | Published: 2017-08-17
Filed under Categories: MarkDownTags: Tag,

iptables入门教程

iptables介绍

linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成.

netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集.

iptables 组件是一种工具,也称为用户空间,它使插入. 修改和除去信息包过滤表中的规则变得容易.

1.png

iptables的结构

iptables的结构:

iptables -> Tables -> Chains -> Rules

简单地讲,tables由chains组成,而chains又由rules组成.iptables 默认有四个表Filter, NAT, Mangle, Raw,其对于的链如下图.

2.jpg

0x02 iptables工作流程

3.jpg

filter表详解

  1. 在iptables中,filter表起过滤数据包的功能,它具有以下三种内建链:
INPUT链 – 处理来自外部的数据. 
OUTPUT链 – 处理向外发送的数据. 
FORWARD链 – 将数据转发到本机的其他网卡设备上. 
  1. 数据流向场景

访问本机:在INPUT链上做过滤

本机访问外部:在OUTPUT链上做过滤

通过本机访问其他主机:在FORWARD链上做过滤

  1. Iptables基本操作

启动

iptables:service iptables start

关闭

iptables:service iptables stop

重启

iptables:service iptables restart

查看iptables状态:

service iptables status

保存iptables配置:

service iptables save

Iptables服务配置文件:

/etc/sysconfig/iptables-config

Iptables规则保存文件:

/etc/sysconfig/iptables

打开iptables转发:

echo "1"> /proc/sys/net/ipv4/ip_forward

iptables命令参考

命令:

iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转] 
  1. 表名

表名:Filter, NAT, Mangle, Raw

起包过滤功能的为表Filter,可以不填,不填默认为Filter

  1. 命令选项
选项名	功能及特点
-A	在指定链的末尾添加(--append)一条新的规则
-D	删除(--delete)指定链中的某一条规则,按规则序号或内容确定要删除的规则
-I	在指定链中插入(--insert)一条新的规则,默认在链的开头插入
-R	修改. 替换(--replace)指定链中的一条规则,按规则序号或内容确定
-L	列出(--list)指定链中的所有的规则进行查看,默认列出表中所有链的内容
-F	清空(--flush)指定链中的所有规则,默认清空表中所有链的内容
-N	新建(--new-chain)一条用户自己定义的规则链
-X	删除指定表中用户自定义的规则链(--delete-chain)
-P	设置指定链的默认策略(--policy)
-n	用数字形式(--numeric)显示输出结果,若显示主机的 IP地址而不是主机名
-v	查看规则列表时显示详细(--verbose)的信息
-V	查看iptables命令工具的版本(--Version)信息
-h	查看命令帮助信息(--help)
--line-number	查看规则列表时,同时显示规则在链中的顺序号

-S 查看链默认处理方式
  1. 链名

可以根据数据流向来确定具体使用哪个链,在Filter中的使用情况如下:

INPUT链 – 处理来自外部的数据. 
OUTPUT链 – 处理向外发送的数据. 
FORWARD链 – 将数据转发到本机的其他网卡设备上.
  1. 条件匹配

条件匹配分为基本匹配和扩展匹配,拓展匹配又分为隐式扩展和显示扩展.

a)基本匹配包括:

匹配参数	说明
-p	指定规则协议,如tcp, udp,icmp等,可以使用all来指定所有协议
-s	指定数据包的源地址参数,可以使IP地址. 网络地址. 主机名
-d	指定目的地址
-i	输入接口
-o	输出接口

b)隐式扩展包括:

4.jpg

c)常用显式扩展

5.jpg

  1. 目标值

数据包控制方式包括四种为:

ACCEPT:允许数据包通过. 
DROP:直接丢弃数据包,不给出任何回应信息. 
REJECT:拒绝数据包通过,必须时会给数据发送端一个响应信息. 
LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则. 
QUEUE:防火墙将数据包移交到用户空间 
RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain) 
0x05 Iptables常见命令

a) 1. 删除iptables现有规则

iptables –F

b) 2. 查看iptables规则

iptables –L(iptables –L –v -n) 

c) 3. 增加一条规则到最后

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 

d) 4.添加一条规则到指定位置

iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 

e) 5. 删除一条规则

iptabels -D INPUT 2 

f) 6.修改一条规则

iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 

g) 7. 设置默认策略

iptables -P INPUT DROP 

h) 8.允许远程主机进行SSH连接

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 

i) 9.允许本地主机进行SSH连接

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 

j) 10.允许HTTP请求

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 

k) 11.限制ping 192.168.146.3主机的数据包数,平均2/s个,最多不能超过3个

iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT 

l) 12.限制SSH连接速率(默认策略是DROP)

iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT  
iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT 

0x06 如何正确配置iptables

a) 1. 删除现有规则

iptables -F

b) 2. 配置默认链策略

iptables -P INPUT DROP 
iptables -P FORWARD DROP 
iptables -P OUTPUT DROP 

c) 3. 允许远程主机进行SSH连接

iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT 

d) 4. 允许本地主机进行SSH连接

iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT 
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT 

e) 5. 允许HTTP请求

iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT 

使用iptables抵抗常见攻击

1.防止syn攻击

思路一:限制syn的请求速度(这个方式需要调节一个合理的速度值,不然会影响正常用户的请求)

iptables -N syn-flood 
iptables -A INPUT -p tcp --syn -j syn-flood 
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN 
iptables -A syn-flood -j DROP 

思路二:限制单个ip的最大syn连接数

iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP 
  1. 防止DOS攻击

利用recent模块抵御DOS攻击

iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP 

单个IP最多连接3个会话

iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH  

只要是新的连接请求,就把它加入到SSH列表中

Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP  

5分钟内你的尝试次数达到3次,就拒绝提供SSH列表中的这个IP服务.被限制5分钟后即可恢复访问.

  1. 防止单个ip访问量过大
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP 
  1. 木马反弹
iptables –A OUTPUT –m state --state NEW –j DROP 
  1. 防止ping攻击
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT 

常见命令整理 Linux防火墙iptables基本应用

iptables是一个linux的基础组件,主要应用于防火墙应用,例如禁止某IP访问,或者禁止一些端口,提升网站的安全性.一般情况下,系统默认就会安装,如果没有安装,可自行安装.

yum install iptables #CentOS系统
apt install iptables #debian/ubuntu系统

一,先说一下几个常用命令:

service iptables -status #查看iptables是否运行
iptables -F #大写F,清空当前所有规则
iptables-save #注意s-之间无空格,保存当前规则
iptables -L -n #列表显示当前规则

二,常见封ip命令:

iptables -A INPUT -s 123.45.67.89 -j DROP #封掉单个IP地址

#屏蔽整个段(A类地址)即从192.0.0.1到192.255.255.254,则添加以下规则.

iptables -I INPUT -s 192.0.0.0/8 -j DROP

#封IP段(B类地址)即从192.168.0.1到192.168.255.254,则添加以下规则.

iptables -I INPUT -s 192.168.0.0/16 -j DROP

#封IP段(C类地址)即从192.168.200.1到192.168.200.254,则添加以下规则.

iptables -I INPUT -s 192.168.200.0/24 -j DROP

三,查看及删除命令:

iptables -L -n --line-numbers #按行列表显示当前规则
iptables -D INPUT 15 #删除第15条规则

服务器 iptables 管理

Iptables Essentials: Common Firewall Rules and Commands CentOS - IPTables

  • 指定 [47.90.15.40] 特定出进站协议 tcp
Sat Jul 30 11:13:01 yzhang@coamer:~$ sudo iptables -I INPUT -p tcp -s 47.90.15.40 -j ACCEPT
Sat Jul 30 11:13:27 yzhang@coamer:~$ sudo iptables -I OUTPUT -p tcp -d 47.90.15.40 -j ACCEPT
  • 允许所有 [47.90.15.40] 出进站协议 all
Sat Jul 30 11:13:01 yzhang@coamer:~$ sudo iptables -I INPUT -p all -s 47.90.15.40 -j ACCEPT
Sat Jul 30 11:13:27 yzhang@coamer:~$ sudo iptables -I OUTPUT -p all -d 47.90.15.40 -j ACCEPT

iptables 日志

$ iptables -A INPUT -j LOG
$ tailf /var/log/kern.log

参考列表

Comments

  • 牧马人 says: 2019-09-14 21:10:56

    江山代有才人出,各领风骚数百年.

  • 牧马人 says: 2019-09-14 21:11:02

    江山代有才人出,各领风骚数百年.

  • 牧马人 says: 2019-09-14 21:11:09

    江山代有才人出,各领风骚数百年.

  • 牧马人 says: 2019-09-15 21:39:08

    江山代有才人出,各领风骚数百年.

Cor-Ethan, the beverage → www.iirii.com