IPTABLES笔记

0x01 iptables的结构:

简单地讲,tables由chains组成,而chains又由rules组成。iptables 默认有四个表Filter, NAT, Mangle, Raw。

0x02 filter表详解

1. 在iptables中,filter表起过滤数据包的功能,它具有以下三种内建链:

1
2
3
INPUT链–处理来自外部的数据。
OUTPUT链–处理向外发送的数据。
FORWARD链–将数据转发到本机的其他网卡设备上。

2. 数据流向场景

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

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

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

3. 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

0x03 iptables命令参考

命令:

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

1. 表名

表名:Filter, NAT, Mangle, Raw

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

2. 命令选项

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

3. 链名

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

1
2
3
INPUT链–处理来自外部的数据。
OUTPUT链–处理向外发送的数据。
FORWARD链 – 将数据转发到本机的其他网卡设备上。

4. 条件匹配

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

a)基本匹配包括:

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

5. 目标值

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

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

0x04 iptables常见命令

a) 1. 删除iptables现有规则

1
iptables –F

b) 2. 查看iptables规则

1
iptables –L(iptables –L –v –n)

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

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

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

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

e) 5.  删除一条规则

1
iptabels –D INPUT 2

f) 6.修改一条规则

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

g) 7. 设置默认策略

1
iptables –P INPUT DROP

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

1
2
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连接

1
2
iptables –A OUTPUT –o eth0 –p tcp —dport 22 –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A INTPUT –i eth0 –p tcp —sport 22 –m state —state ESTABLISHED –j ACCEPT

j) 10.允许HTTP请求

1
2
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个

1
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)

1
2
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

0x05 如何正确配置iptables

a) 1. 删除现有规则

iptables -F

b) 2.  配置默认链策略

1
2
3
iptables –P INPUT DROP
iptables –P FORWARD DROP
iptables –P OUTPUT DROP

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

1
2
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连接

1
2
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请求

1
2
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

0x06 使用iptables抵抗常见攻击

1.防止syn攻击

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

1
2
3
4
5
6
7
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连接数

1
iptables –A INPUT –i eth0 –p tcp —syn –m connlimit —connlimit–above 15 –j DROP

2. 防止DOS攻击

利用recent模块抵御DOS攻击

1
iptables –I INPUT –p tcp –dport 22 –m connlimit —connlimit–above 3 –j DROP

单个IP最多连接3个会话

1
iptables –I INPUT –p tcp —dport 22 –m state —state NEW –m recent —set —name SSH

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

1
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分钟后即可恢复访问。

3. 防止单个ip访问量过大

1
iptables –I INPUT –p tcp —dport 80 –m connlimit —connlimit–above 30 –j DROP

4. 木马反弹

1
iptables –A OUTPUT –m state —state NEW –j DROP

5. 防止ping攻击

1
iptables –A INPUT –p icmp —icmp–type echo–request –m limit —limit 1/m –j ACCEPT

End