[collapse title=”IPtables基础知识”]
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
表名:用来指定iptables 命令所操作的表,未指定表名时将默认使用 filter 表
管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等
-A 在指定链末尾追加一条iptables -A INPUT(操作)
-l 在指定链中插入一条新的,未指定序号默认作为第一条iptables -l INPUT(操作)
-p 指定默认规则iptables -P OUTPUT ACCEPT(操作)
-D 删除iptables -t nat -D INPUT(操作)
-R 修改、替换某一条规则iptables -t nat -R INPUT(操作)
-L 查看iptables
-n 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不 是服务名)iptables -L -n,iptables -nL,iptables -vnL(查看)
-v 查看时显示更详细信息,常跟-L一起使用(查看)
–line-number 规则带编号 iptables -t nat -L -n –line-number / iptables -t nat -I –line-number
-F 清除链中所有规则iptables -F(操作)
-X 清空自定义链的规则,不影响其他链iptables -x
-Z 清空链的计数器(匹配到的数据包的大小和总和) iptables -Z
-S 查看链的所有规则或者某个链的规则/某个具体规则后面跟编号
匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理
控制类型:指的是数据包的处理方式,如允许、拒绝、丢弃等
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给出任何回应消息
REJECT 拒绝数据包通过,会给数据发送端一个响应信息
LOG 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
SNAT 修改数据包的源地址
DNAT 修改数据包的目的地址
MASQUERADE 伪装成—个非固定公网IP地址
比如:
iptables -A INPUT -p tcp –dport 20:21 -j ACCEPT ###放行TCP端口20到21入站
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
[/collapse]
添加新的规则
添加新的防火墙规则时,使用管理选项 “ -A ”、“ -I ” ,前者用来追加规则,后者用来插入规则。
示例:若要在 filter 表 INPUT 链的末尾添加一条防火墙规则,可以执行以下操作(其中 “-p 协议名”作为匹配条件)。
iptables -t filter -A INPUT -p icmp -j REJECT ###不允许任何主机ping本主机
iptables -I INPUT -p tcp --dport 22 -j ACCEPT ###允许SSH端口访问本主机
iptables -t filter -A INPUT -p tcp -j ACCEPT ###允许任何主机tcp
iptables -I INPUT -p udp -j ACCEPT ###允许任何主机udp
查看规则列表
iptables -L --line-numbers ###查看规则列表并带上编号,注意--后面不能有空格
删除、清空规则
若要删除入站中的第五条规则,可以执行以下操作
iptables -D INPUT 5
清空入站中的所有规则
iptables -F INPUT
设置默认策略
默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。
默认策略的控制类型为只有ACCEPT(允许)、DROP(丢弃)两种
iptables -P INPUT DROP ###设置默认入站丢掉所有的包
注意:这条会清除掉所有已经设置好的入站,具体的原因我也不太清楚,所以必须在前面增加:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ###服务器本身请求的入站数据通过
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ###服务器本身请求的出站数据通过
保存和加载规则
iptables-save > /iptables.bak ###将规则保存到根目录下的这个文件,可以vim打开查看
iptables-restore > /iptables.bak ###加载规则
控制TTL(Time To Live)
首先我们来看一下什么是TTL:
[collapse title=”什么是TTL?”]
TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64。
虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。
TTL的主要作用是避免IP包在网络中的无限循环和收发,节省了网络资源,并能使IP包的发送者能收到告警消息。
[/collapse]
不同的操作系统,它的TTL值是不相同的,默认情况下,
操作系统 | TTL默认 |
Linux / Unix | 64/255 |
Windows | 128 |
所以我们能根据TTL来大致判断客户端的系统,从而过滤一部分请求!
### 过滤掉Linux的两种写法:
iptables -A INPUT -m ttl --ttl-gt 80 -j ACCEPT ###TTL大于80的包允许入站
iptables -A INPUT -m ttl --ttl-lt 80 -j DROP ###TTL小于80的包丢掉
暂无评论内容