day5-iptables

netfilter包过滤机制

iptables基本管理

fiter过滤和转发

iptables状态匹配

     

防火墙的类别

根据载体区分

硬件防火墙

软件防火墙

    应用层

    网络层——linux 包过滤 防火墙®

     

根据保护对象区分

主机防火墙

网络防火墙

     

netfilter

位于linux内核中的包过滤功能体系

称为linux防火墙的"内核态"

iptables

位于/sbin/iptables,管理规则的工具

称为linux防火墙的"用户态"

     

两种称呼都可指linux防火墙,用后者居多

     

iptables的表、链结构

     

iptables的表:

filter:防火墙

nat:网络地址转换

mangle:流量标记、着色——数据包优先级

raw:状态跟踪

     

规则链解析——chain

链的用途:存放一条条防火墙规则(rule)

链的分类依据:处理数据包的不同电动机

默认包括5种规则链

INPUT:处理入站数据包    //数据包的目的地是防火墙本身

OUTPUT:处理出站数据包    //数据包的源地址是防火墙本身

FORWARD:处理转发的数据包        //穿过防火墙的数据包

POSTROUTING:路由选择之后处理        //路由前

PREROUTING:路由选择之前处理        //路由后

     

规则表解析——table

表的用途:存放不同的规则链

表的分类依据:防火墙规则的作用相似

raw表:确定是否对数据包进行状态跟踪

mangle表:为数据包设置标记

nat表:修改数据包的源/目标地址或端口

filter表:确定是否放行该数据包

     

规则表之间的顺序

raw>>mangle>>nat>>filter

规则链之间的顺序

入站:INPUT>>PREROUTING

出站:OUTPUT>>POSTROUTING

转发:POSTROUTING>>FORWARD>>POSTROUTING

规则链内的匹配顺序

顺序比对,匹配即停止(LOG除外)

若无任何匹配,则按该链的默认策略处理

     

操作规则表

操作规则链

防火墙规则的增删改查

     

/sbin/iptables

格式

-t    表名    选项    链名    条件    -j    目标操作

     

iptables –t filter –L INPUT    查看filter表的INPUT链

iptables –L    查看filter表所有链的规则

iptabels –F    清空filter表所有链的规则

iptables –A INPUT –p tcp –dport 22 –j ACCEPT        设置防火墙允许ssh访问

iptables –P INPUT DROP    将INPUT链的默认规则设置为DROP

     

iptables基本用法

注意事项/总体规律

可以不指定表,默认为filter表

可以不指定链,默认为对应表的所有链

除非设置默认策略,否则必须指定匹配条件

选项/链名/目标操作用大写字母,其余都是小写

当默认规则设置为DROP/REJECT时,请先允许SSH允许规则

     

ACCEPT:允许通过/放行

DROP:直接丢弃,不给出任何回应

REJECT:拒绝通过,必要时会给出提示

LOG:记录日志,然后传给下一条规则(匹配即停止,规律的唯一例外)

     

     

1、iptables基本管理

查看当前生效的防火墙规则列表

列出raw表的规则

nat表默认包括PREROUTING、POSTROUTING、OUTPUT这三个规则链

# iptables -t nat –L

列出raw表的规则

raw表默认包括PREROUTING、OUTPUT这两个规则链

# iptables -t raw –L

列出mangle表的规则

mangle表默认包括所有的五种规则链

# iptables -t mangle –L

   

追加、插入新的防火墙规则,修改现有的防火墙规则

若查看规则时,可以使用-n选项以数字开工显示地址、端口等信息

使用--line-numbers来显示规则的行号

-I,在开头或指定的位置插入一条新的防火墙规则

   

删除、清空描写的防火墙规则

删除指定的规则

删除指定具体内容的规则

清空filter表的规则

清空nat表的规则

   

2、filter过滤和转发控制

A主机

C主机也需要设置网关

#route add default gw 192.168.200.254

B转发主机

开启linux网关的路由转发功能(临时修改)

永久修改 vim /etc/sysctl.conf

net.ipv4.ip_forward=1

修改完后,更新一下配置

sysctl -p

当A、C主机设置好网关,B主机开启转发,就可进行通信了

   

防火墙filter表的出站、入站访问控制

测试允许ping别人,禁止别人ping网关

方法1:丢弃进来的ping请求包、允许进来的各种ping应答包

方法2:允许出去的ping请求包、丢弃出去的各种ping应答包

这是因为:防火墙DROP了从eth1接口进来发往192.168.100.0/24网段的数据包,这其中包括外网发来的HTTP请求包,也包括HTTP应答包,从而导致双方的访问受阻。

利用状态机制,放行从内网访问外网的数据包、放行内网收到的应答包及关联数据包,并且将FORWARD转发链的默认规则设为DROP:

比如A是内网,B是外网,A可以访问B,但B不可访问A

内外》外网web访问,取消状态跟踪

   

添加限制MAC地址防火墙规则

   

通过一条防火墙规则开放多个TCP服务,提高规则编写效率

   

指定IP地十范围设置封锁或放行规则

   

配置SNAT

C主机开启路由转发功能

删除B主机的网关 route del default gw

当设置完成以后,访问A主机时,记录的是网关地址192.168.200.254访问

使用SNAT策略,验证MASQUERAD伪装的有效性

访问A主机时,记录的扔然是网关地址192.168.200.254访问

 

配置DNAT

访问C主机eth1网卡地址时,记录的是本机地址访问

 

通过 DNAT策略发布内网的SSH服务器

访问C主机ETH1网口:端口为2222,连接A 主机

测试成功

通过DNAT策略发布内网的FTP服务器

加载FTP模块

 

防火墙脚本设置

编写典弄的LINUX网关防火墙脚本

vim /root/bin/iptables-gw.sh

#!/bin/bash

## 2015.05.20 TsengYia.

#### 1. 定义方便移植的环境变量 ####

INET_IF="eth1"

INET_IP="174.16.16.1"

LAN_NET="192.168.4.0/24"

LAN_WWW_IP="192.168.4.5"

IPT="/sbin/iptables"

#### 2. 内核参数、相关模块调整 ####

/sbin/modprobe nf_nat_ftp

/sbin/sysctl -w net.ipv4.ip_forward=1

/sbin/sysctl -w net.ipv4.ip_default_ttl=128

/sbin/sysctl -w net.ipv4.icmp_echo_ignore_all=1

/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts

/sbin/sysctl -w net.ipv4.tcp_syncookies=1

/sbin/sysctl -w net.ipv4.tcp_syn_retries=3

/sbin/sysctl -w net.ipv4.tcp_synack_retries=3

/sbin/sysctl -w net.ipv4.tcp_fin_timeout=60

/sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=3200

#### 3. 清空旧规则,并设置各链的默认规则 ####

#/etc/init.d/iptables stop

$IPT -t filter -X

$IPT -t nat -X

$IPT -t mangle -X

$IPT -t raw -X

$IPT -t filter -F

$IPT -t nat -F

$IPT -t mangle -F

$IPT -t raw -F

$IPT -P INPUT DROP

$IPT -P FORWARD DROP

$IPT -P OUTPUT ACCEPT

#### 4. 自定义规则 .. ####

#### 4.1 nat表的详细策略

$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP

$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --t

o-destination $LAN_WWW_IP

#### 4.2 filter表的详细策略

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A INPUT -p tcp --dport 22 -j ACCEPT

$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p udp --dport 53 -j ACCEPT

$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp -m multiport --dport 20:22,25,80

,110,143,443,993,995 -j ACCEPT

$IPT -A FORWARD -d $LAN_NET -i $INET_IF -m state --state ESTABLISHED,RELATED -j

ACCEPT

$IPT -A FORWARD -d $LAN_WWW_IP -p tcp --dport 80 -j ACCEPT

$IPT -A FORWARD -s $LAN_WWW_IP -p tcp --sport 80 -j ACCEPT

 

chmod +x /root/iptables-gw.sh

将脚本设置开机启动

vim /etc/rc.local

头加入#!/bin/sh

在最后一行加入

bash /root/bin/iptables-gw.sh

 

编写网络型、主机型防护规则

主机型脚本

控制的数据包侧重于本机与其他主机之间的访问,因此iptables防火墙规则以 filter 表的 INPUT 链为主,OUTPUT 链其次

vim /root/bin/iptables-host.sh

#!/bin/bash

## 2015.05.20 TsengYia.

#### 1. 定义方便移植的环境变量 ####

INET_IF="eth0"

INET_IP="192.168.4.5"

IPT="/sbin/iptables"

#### 2. 内核参数、相关模块调整 ####

/sbin/sysctl -w net.ipv4.ip_forward=0

/sbin/sysctl -w net.ipv4.ip_default_ttl=128

/sbin/sysctl -w net.ipv4.icmp_echo_ignore_all=1

/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts

/sbin/sysctl -w net.ipv4.tcp_syncookies=1

/sbin/sysctl -w net.ipv4.tcp_syn_retries=3

/sbin/sysctl -w net.ipv4.tcp_synack_retries=3

/sbin/sysctl -w net.ipv4.tcp_fin_timeout=60

/sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=3200

#### 3. 清空旧规则,并设置各链的默认规则 ####

#/etc/init.d/iptables stop

$IPT -t filter -X

$IPT -t nat -X

$IPT -t mangle -X

$IPT -t raw -X

$IPT -t filter -F

$IPT -t nat -F

$IPT -t mangle -F

$IPT -t raw -F

$IPT -P INPUT DROP

$IPT -P FORWARD DROP

$IPT -P OUTPUT ACCEPT

#### 4. 自定义规则 .. ####

$IPT -A INPUT -p tcp -m multiport --dport 22,25,80,110,143,443,993,995,2150:2750 -j ACCEPT

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

然后开机运行

 

网络型脚本

控制的数据包侧重于内网、外网之间的访问,因此iptables防火墙规则以 filter 表的 FORWRD 链为主,需要地址转换时还会用到nat表。

vim /root/iptables-gw.sh

 

使用IP地址黑/白名单

定义白名单

vim /root/bin/iptables.blist

192.168.10.100

 

定义黑名单

vim /root/bin/iptables.hlist

192.168.20.200

 

脚本

vim /root/bin/iptables-hblist.sh

#### 5. White & Black List .. ####

WHITE_LIST="/opt/ipfw.wlist"

for i in $(grep -v "^#" $WHITE_LIST) //遍历设置白名单规则

do

$IPT -I INPUT -s $i -j ACCEPT

$IPT -I OUTPUT -d $i -j ACCEPT

$IPT -I FORWARD -s $i -j ACCEPT

$IPT -I FORWARD -d $i -j ACCEPT

done

BLACK_LIST="/opt/ipfw.blist"

for i in $(grep -v "^#" $BLACK_LIST) //遍历设置黑名单规则

do

$IPT -I INPUT -s $i -j DROP

$IPT -I OUTPUT -d $i -j DROP

$IPT -I FORWARD -s $i -j DROP

$IPT -I FORWARD -d $i -j DROP

done

posted @ 2016-09-28 16:47  Final233  阅读(165)  评论(0编辑  收藏  举报