当前位置: 首页 > GNU/Linux, Linux系统, 安全工具, 网络安全 > 正文

iptables学习笔记(3)

上两篇文章简单的介绍了下iptables的相关概念以及数据包在iptables中的处理规则。本篇blog将正式介绍下说了这么久的iptables的使用及其编写规则。

一、iptables的命令格式
iptables-cli

[-t 表名]:该规则所操作的哪个表,可以使用filter、nat等,如果没有指定则默认为filter

-A:新增一条规则,到该规则链列表的最后一行

-I:插入一条规则,原本该位置上的规则会往后顺序移动,没有指定编号则为1

-D:从规则链中删除一条规则,要么输入完整的规则,或者指定规则编号加以删除

-R:替换某条规则,规则替换不会改变顺序,而且必须指定编号。

-P:设置某条规则链的默认动作

-nL-L-n,查看当前运行的防火墙规则列表

chain名:指定规则表的哪个链,如INPUT、OUPUT、FORWARD、PREROUTING等

[规则编号]:插入、删除、替换规则时用,--line-numbers显示号码

[-i|o 网卡名称]:i是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出

[-p 协议类型]:可以指定规则应用的协议,包含tcp、udp和icmp等

[-s 源IP地址]:源主机的IP地址或子网地址

[--sport 源端口号]:数据包的IP的源端口号

[-d目标IP地址]:目标主机的IP地址或子网地址

[--dport目标端口号]:数据包的IP的目标端口号

-m:extend matches,这个选项用于提供更多的匹配参数,如:

-m state –state ESTABLISHED,RELATED

-m tcp –dport 22

-m multiport –dports 80,8080

-m icmp –icmp-type 8

<-j 动作>:处理数据包的动作,包括ACCEPT、DROP、REJECT等

二、基本操作规则

1. iptables -nL  查看本机关于iptables的设置情况,默认查看的是-t filter,可以指定-t nat

    iptables -L 尽可能地以易读的形式显示当前正在使用的规则集。

2. iptables-save > iptables.rule
保存当前的防火墙规则设置,它把规则集保存到一个特殊格式的文本文件里命令行中。当主机重启时这些iptables配置的规则将会失效,当然这也是为了防止错误的配置防火墙。默认读取和保存的配置文件地址为/etc/sysconfig/iptables。另一个命令是iptables-restore,它是用来把这个文件重新装入内核空间的。

使用iptables-save和iptables-restore的一个最重要的 原因是,它们能在相当程度上提高装载、保存规则的速度。使用脚本更改规则的问题是,改动每个规则都要 调运命令iptables,而每一次调用iptables,它首先要把Netfilter内核空间中的整个规则集都提取出来, 然后再插入或附加,或做其他的改动,最后,再把新的规则集从它的内存空间插入到内核空间中。这会花费很多时间。

这两个命令最好的地方在于 一次调用就可以装载和保存规则集,而不象脚本中每个规则都要调用一次iptables。 iptables-save运行一次就可以把整个规则集从内核里提取出来,并保存到文件里,而iptables-restore每次装入一个规则表。换句话说,对于一个很大的规则集,如果用脚 本来设置,那这些规则就会反反复复地被卸载、安装很多次,而我们现在可以把整个规则集一次就保存下 来,安装时则是一次一个表,这可是节省了大量的时间。

3. 清空iptables规则

如想删除INPUT链的第10条规则,可以使用 iptables -D INPUT 10

对于需要清空整个链,使用选项-F 如,清空整个 INPUT链,使用的命令就是iptables -F INPUT

对于重置策略,先执行:/sbin/iptables -P INPUT ACCEPT  ;再执行 /sbin/iptables -F

4. 显示当前所有被跟踪的连接

cat /proc/net/ip_conntrack | less

5. 2.设置chain策略

对于filter table,默认的chain策略为ACCEPT,我们可以通过以下命令修改chain的策略:

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

以上命令配置将接收、转发和发出包均丢弃,施行比较严格的包管理。由于接收和发包均被设置为丢弃,当进一步配置其他规则的时候,需要注意针对INPUT和OUTPUT分别配置。当然,如果信任本机器往外发包,以上第三条规则可不必配置。

三、常见配置情形

1. 端口转发

首先要开启端口转发器必须先修改内核运行参数ip_forward,打开转发:

# echo 1 > /proc/sys/net/ipv4/ip_forward //此方法临时生效,需永久生效可修改/etc/sysctl.conf文件

开启本机端口转发:

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

根据上一篇blog文《iptables学习笔记(2)》可知,实际上在数据包进入INPUT链之前,修改了目标地址(端口),于是不难理解在开放端口时需要设置的是放行8080端口,无需考虑80:

# iptables -A INPUT -s 172.29.88.0/24 -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

此时当外部访问80端口便自动转到8080(浏览器地址栏上不会改变),而且又具有很高的性能。

2. 日志记录

为22端口的INPUT包增加日志功能,插在input的第1个规则前面,为避免日志信息塞满/var/log/message,用--limit限制:

iptables -R INPUT 1 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 8 -j LOG

编辑日志配置文件/etc/rsyslog.conf ,添加kern.=notice /var/log/iptables.log,可以将日志记录到自定义的文件中。

配置好之后重启日志服务:service rsyslog restart

3. 禁止访问某ip/域名

【例1】 iptables -I FORWARD -d www.ooxx.com -j DROP #禁止访问域名www.ooxx.com
【例2】 iptables -I FORWARD -d 20.20.20.20 -j DROP  #禁止访问IP地址20.20.20.20

4. 禁止某客户机上网

【例1】 iptables -I FORWARD -s 192.168.1.X -j DROP #禁止IP地址为192.168.1.X的客户机上网
【例2】 iptables -I FORWARD -s 192.168.1.0/24 -j DROP #禁止192.168.1.0子网里所有的客户机上网

5. 端口映射

#将WAN 口NAT到PC

iptables -t nat -A PREROUTING -i $INTERNET_IF -d $INTERNET_ADDR -j DNAT –to-destination 192.168.0.1

#将WAN口81端口NAT到192.168.1.2的80端口

iptables -t nat -A PREROUTING -p tcp --dport 81 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.1.2:80

6. 屏蔽指定ip

有时候我们发现某个ip不停的往服务器发包,这时我们可以使用以下命令,将指定ip发来的包丢弃:

iptables -A INPUT -i eth0 -p tcp -s xx.xx.xx.xx -j DROP

以上命令设置将由xx.xx.xx.xx ip发往eth0网口的tcp包丢弃。

7. 应用服务配置

设置只能由指定的网段、指定的网口连接本机SSH服务:

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

若要支持由本机通过SSH连接其他机器,由于在本机端口建立连接,因而还需要设置以下规则:

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

类似的,对于HTTP/HTTPS(80/443)、pop3(110)、rsync(873)、MySQL(3306)等基于tcp连接的服务,也可以参照上述命令配置。

8. 抵御DDOS攻击

SYN洪水是攻击者发送海量的SYN请求到目标服务器上的一种DoS攻击方法,下面的脚本用于预防轻量级的DoS攻击:

iptables -N syn-flood   (如果您的防火墙默认配置有“ :syn-flood - [0:0] ”则不许要该项,因为重复了)
iptables -A INPUT -p tcp --syn -j syn-flood   
iptables -I syn-flood -p tcp -m limit --limit 2/s --limit-burst 5 -j RETURN   
iptables -A syn-flood -j REJECT   
# 防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃
# 需要iptables v1.4.19以上版本:iptables -V 
iptables -A INPUT -p tcp --syn -i eth0 --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP   

#用Iptables抵御DDOS (参数与上相同)   
iptables -A INPUT -p tcp --syn -m limit --limit 5/s --limit-burst 10 -j ACCEPT  
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT 

iptables -A FORWARD -p icmp -m limit --limit 2/s --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -s ! 172.29.73.0/24 -j DROP

参考资料:

Linux的iptables常用配置范例(1):http://www.ha97.com/3928.html

Iptables 指南 1.1.19:https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html

iptables常用实例备查:http://seanlook.com/2014/02/26/iptables-example/



这篇博文由 s0nnet 于2016年01月17日发表在 GNU/Linux, Linux系统, 安全工具, 网络安全 分类下, 通告目前不可用,你可以至底部留下评论。
如无特别说明,计算机技术分享发表的文章均为原创,欢迎大家转载,转载请注明: iptables学习笔记(3) | 计算机技术分享
关键字: ,
【上一篇】【下一篇】

iptables学习笔记(3):等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter