iptables 简单学习

预热:网络基础

什么是交换?什么是路由?什么是路由表?node

交换是指同网络访问(两台机器连在同一个交换机上,配置同网段的不一样IP地址就能够直接通信)web

路由就是跨网络访问(路径选择)shell

路由表是记录路由信息的表vim

1、查看路由表信息

//route命令用来查看和设置路由表信息

[root@ceshi ~]# route -n
Kernel IP routing table
目标网络            网关          子网掩码        路由标志                    网卡
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0
0.0.0.0         10.1.1.1        0.0.0.0         UG    0      0        0 eth0
                                                U:up,启动状态
                                                UG:该网关为路由器

讨论1:
按上图中的路由表来看,若是ping一个公网IP(如ping 14.200.151.38),应该怎么走?
1)先看目标IP是否为本机IP,若是是,则直接访问本地;若是不是,则找路由表里是否有想访问的网段
2)若是路由表有则从这个路由条目后面指定的网卡出去;若是路由表里没有你要访问的网段,则会找默认路由(也就是网关)
讨论2:
按上面的路由表来看,若是ping一个局域网IP为10.1.1.10,怎么走?
直接走本地路由从eth0网卡出去
讨论3:
如何加网关和删除网关,加网关有什么要求?
route add default gw x.x.x.x        临时添加网关,立刻生效
route del default gw x.x.x.x        临时删除网关,立刻生效
永久修改网关:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=X.X.X.X
或者
vim /etc/rc.local
..
route add default gw x.x.x.x

注意事项:
1.加网关只能加你已经有的路由网段里的一个IP才行(此IP不必定存在)
2.加网关能够不用指定子网掩码(由于是已有的一个网段的IP,全部掩码已经确认了)

讨论4:
一个Linux服务器上能有几个有效网关?
准确来讲,一个路由表上能够加多个网关,但只有一个生效

讨论5:
一台Linux上若是有双物理网卡,请问可不能够两个网卡配置同网段的不一样IP呢?
eth0 10.1.1.1/24
eth1 10.1.1.2/24
若是两个网卡同网段,则会有下面两条路由
10.1.1.0            eth0
10.1.1.0            eth1

结果:
它会实现从两张网卡进来的包,却从一张网卡出去,问题将产生了。假设eth0网卡有问题,路由表咯匹配到第一条后,依然走eth0,不走eth1
解决方法(好比多路由表或者双网卡绑定)

2、IP路由选择实验

1.route相关命令

route -n    查看路由,显示IP,不解析
route del default   删除默认路由
route add default gw 192.168.1.110 添加一个默认网关,把全部不知道的网络交给网关来转发

route add -net 192.168.2.0/24 dev eth0  对一个网络添加一个新的路由(另外一个网段)
route add -host 192.168.3.1 gw  192.168.1.110   对一个具体的IP添加路由

2.实验需求

环境准备:
node1:10.1.1.1和192.168.0.1  做为网关服务器,开启路由转发功能/proc/sys/net/ipv4/ip_forward
node2:172.16.0.254
node3:10.12.0.254
要求:
实现不一样网络(10.12.0.0/24和172.16.0.254/24)之间的互通,使用第三方主机node1做为路由进行转发

具体步骤

3.具体步骤





Iptables 防火墙

课程目标

  • 了解iptables的基本知识和工做原理
  • 掌握基本的语法结构
  • 掌握常见的iptables规则配置
  • 可以根据需求对服务器进行iptables的基本配置

思考1:服务如何进行网络访问控制?安全

​ 配置文件、xinetd、tcp_wrappers服务器

思考2:系统如何进行访问控制?网络

​ 防火墙app

1、防火墙介绍

  • 防火墙分类和做用
    • 硬件防火墙
    • 软件防火墙

做用:ssh

防火墙做为内部网和外部网之间的一种访问控制设备,经常安装在内部网络和外部网络的边界上。防火墙具备很好的网络安全保护做用,入侵者必须首先穿过防火墙的安全防线,才能接触目标计算机。能够将防火墙配置成许多不一样保护级别。高级别的保护可能会禁止一些服务,如视频流等,但至少这是你本身的保护选择。

主要做用:
一、Internet防火墙能够防止Internet上的危险传播到网络内部
二、能强化安全策略
三、能有效记录Internet上的活动

2、Iptables防火墙介绍

  • Linux系统内核集成了网络访问控制的功能,经过netfilter模块来实现,是内核的一部分(内核空间)
  • 用户层(用户空间)能够经过iptables程序对netfilter进行控制管理,进而实现网络的访问控制
  • TCP_Wrappers也是一个网络访问控制的一个工具,做用在应用层

总结:

  • netfileter 模块 内核空间,是内核一部分
  • iptables组件 用户空间,提供管理防火墙的手段,它主要做用在传输层

3、Iptables防火墙结构

  • 四张表

    • filter:实现对数据包的过滤
    [root@ceshi ~]# iptables -t filter -L
    • nat:地址转换功能(源地址和目标地址)
    • mangle:对数据包进行修改,例如给数据包打标记MARK
    • raw:主要是链接追踪
  • 五条链

    [root@ceshi ~]# iptables -t mangle -L
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination

总结:iptables是由表组成的,表是链的集合,链是规则的集合

4、防火墙工做原理(数据包流向)

5、Iptables 基本语法

  • iptables [-t 表名] 命令选项 [链名] [规则号码] [条件匹配] [-j 目标动做]

    ​ 小写 大写 大写 小写 大写

    说明:

    表名和链名:用于指定iptables命令所操做的表和链

    命令选项:用于指定管理iptables规则的方式(好比:插入、增长、删除、查看等)

    规则号码:用于指定规则的编号

    条件匹配:用于指定对符合什么样条件的数据包进行处理(好比:什么协议、出入网卡等)

    目标地址:用于指定数据包的处理方式(好比:容许处理、拒绝、丢弃等)

    iptables -L
    iptables -t filter -L
    iptables -t nat -L
    iptables -t raw -L
    iptables -t mangle -L
  • iptables 的启动和关闭及保存

    /etc/rc.d/init.d/iptables //脚本文件 软链接 /etc/init.d/iptables 
    //临时中止|启动|查看状态|从新加载|从新启动
    service iptables stop|start|status|reload|restart
    //开机是否自启动
    chkconfig iptables off|on
    //永久保存规则
    vim /etc/sysconfig/iptables
    ...
  • iptables 经常使用的命令选项

    -L                查看
    -A                追加,放置在最后一条
    -I                插入,默认插入成第一条
    -D                删除
    -F                清空flush
    -P                设置默认策略policy
    
    处理动做:
    filter表:
    -j ACCEPT     容许
    -j DROP           丢弃,没有任何提示信息
    -j REJECT     拒绝,有提示信息
    -j LOG            写日志     /var/log/messages   而后将数据包传递给下一条规则
    
    nat表:
    -j SNAT           源地址转换 POSTROUTING
    -j DNAT           目标地址转换 PREROUTING

1>Filter表

1.示例1:(所有容许/拒绝/丢弃)

iptables -t filter -A INPUT -j DROP     添加规则,丢弃全部进来的数据包
iptables -t filter -A input -j ACCEPT   添加规则,容许全部进来的数据包

//指定位置插入规则,容许全部进来的数据包第1条规则
iptables -t filter -I INPUT 1 -j ACCEPT

iptables -t filter -A OUTPUT -j DROP    添加规则,丢弃全部出去的数据包

//指定位置插入规则,拒绝全部进来的数据包为第3条规则
iptables -t filter -I INPUT 3 -j REJECT

iptables -t filter -L --line-numbers    查看规则编号
iptables -t filter -R INPUT 1 -j ACCEPT 覆盖已有规则

iptables -t filter -D INPUT 3   删除INPUT链的第3条规则
iptables -t filter -F   清空filter表的全部规则

iptables -A INPUT -j LOG    增长规则,先写日志,而后将数据包传递给下一条规则
iptables -I INPUT 2 -j DROP 

iptables -t filter -P INPUT DROP    设置链上的默认规则
iptables -D INPUT 1
说明:若是不指定表名,默认操做filter表

2.示例2:(根据源和目标地址匹配)

匹配的条件:
-s 192.168.134.0/24     源地址
-d 192.168.134.1        目标地址
-p tcp|udp|icmp         协议
-i lo       input 从lo接口进入的数据包
-o eth0     output 从eth0出去的数据包
-p tcp --dport 80   目标端口是80,必须和-p tcp|udp连用
-p udp --dport 53   目标端口是53/udp
iptables -t filter -A INPUT -s 10.1.1.3 -j ACCEPT   容许源地址为10.1.1.3进入
iptables -t filter -A INPUT ! -s 10.1.1.3 -j ACCEPT 不容许源地址为10.1.1.3进入
iptables -t filter -A IPPUT -s 10.1.1.3 -j DROP     拒绝源地址10.1.1.3进入
iptables -t filter -A OUTPUT -d 10.1.1.3 -j DROP    丢弃到达目标地址为10.1.1.3的包
iptables -t filter -A OUTPUT ! -d 10.1.1.3 -j ACCEPT 丢弃到达目标地址为10.1.1.3的包

iptables -t filter -A INPUT -d 10.1.1.2 -j DROP     丢弃全部到目标地址为10.1.1.2的包
iptables -t filter -A OUTPUT -s 10.1.1.2 -j ACCEPT  源地址为10.1.1.2出去的包所有容许

3.示例3:(根据协议匹配过滤)

iptables -t filter -A INPUT -p tcp -s 10.1.1.2 -j DROP
iptables -t filter -A INPUT -p tcp --dport 22 -s 10.1.1.2 -j DROP   拒绝ssh

iptables -A INPUT -s 10.1.1.3 -p icmp -j DROP
iptables -A INPUT -s 10.1.1.3 -p tcp -j DROP
iptables -A INPUT -s 10.1.1.3 ! -p tcp -j DROP

icmp协议中:
icmp-type 8 类型为8表明请求回显,ping 请求
icmp-type 0 类型为0表明回显应答,ping 应答

需求1:只容许本身ping通别人,不容许别人ping通本身(在policy DROP前提下加规则)
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -t filter -A INPUT -P icmp --icmp-type 0 -j ACCEPT

需求2:(input和output都是DROP状况下)
只容许本身和10.1.1.2相互ping通,其余人不能ping通本身,可是容许本身ping通别人
iptables -A INPUT -s 10.1.1.2 -p icmp --icmp-type 8 -j ACCEPT

4.示例4:(根据端口匹配过滤)

iptables -A INPUT -s 10.1.1.2 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 10.1.1.2 -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -s 10.1.1.2 -p tcp --dport 22 -j ACCEPT

echo 0> /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1> /proc/sys/net/ipv4/icmp_echo_ignore_all


练习:
1.禁止你的另一台服务器访问你的80端口,在INPUT和OUTPUT
iptables -A INPUT -s 10.1.1.3 -p tcp --dport 80 -j DROP
iptables -A OUTPUT -s 10.1.1.3 -p tcp --dport 80 -j DROP
2.只容许别人访问你的80端口
iptables -A INPUT ! -s 10.1.1.1 -p tcp --dport 80 -j ACCEPT 
3.拒绝全部人登陆你的sshd服务
iptables -A INPUT -p tcp --dport 22 -j DROP
4.只容许你能够ping通另一台主机,可是不容许它ping通你
INPUT 默认策略:DROP
OUTPUT :DROP
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -d 10.1.1.2 -j ACCEPT
iptables -t filter -A INPUT -p icmp --icmp-type 0 -s 10.1.1.2 -j ACCEPT

1.5 iptables 内置模块(扩展)

-m 参数+<模块名>
1.multiport 多端口     目的:指定多个不连续的端口,减小iptables的条目,达到优化效果
用法:
iptables -m multiport --help
multiport match options:
[!] --source-ports port[,port:port,port...]
 --sports ...
                                match source port(s)
[!] --destination-ports port[,port:port,port...]
 --dports ...
                                match destination port(s)
[!] --ports port[,port:port,port]
                                match both source and destination po
                                                     
示例:
iptables -t filter -A INPUT -s 10.1.1.2 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.1.1.2 -p tcp --dport 80 -j ACCEPT
等于:
iptables -t filter -A INPUT -s 10.1.1.2 -p tcp -m multiport --dports 22,80 -j ACCEPT

2.iprange ip范围
用法:
iptables -m iprange --help
iprange match options:
[!] --src-range ip[-ip]    Match source IP in the specified range
[!] --dst-range ip[-ip]    Match destination IP in the specified range

iptables -t filter -I INPUT -m iprange --src-range 10.1.1.2-10.1.1.10 -p tcp --dport 80 -j ACCEPT

3.state  链接状态   目的:根据链接请求的状态进行数据过滤
状态值:
NEW     首次访问,好比:打开网站看到首页文件,后续点击叫后续操做
ESTABLISHED 链接完成 1)某服务的后续全部访问 2)服务器的全部响应
RELATED:    相关联的链接,好比ftp链接,命令链接成功后,创建数据链接
INVALID:    无效链接

示例:
iptables -A OUTPUT -p tcp -m multiport --sports 20:22,80,137,445 -j ACCEPT
等于:
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT


例子:ftp开启防火墙下被动模式
1.ftp服务,须要固定被动模式下的端口
vim /etc/vsftpd/vsftpd.conf
增长如下内容
pasv_min_port=2000
pasv_max_port=3000
重启服务
service vsftpd restart

iptables -t filter -A INPUT -p tcp --dport 2000:3000 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 2000:3000 -j ACCEPT
iptables -t filter -A INPUT -m multiport -p tcp --dports 20:21,2000:3000 -j ACCEPT

iptables -A INPUT -d 10.1.1.1 -s 10.1.1.3 -p tcp --sport 2000:3000 -j ACCEPT

2.使用链接追踪模式(扩展)(INPUT和OUTPUT都是DROP下)

iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT
作完这步后只能访问,不能查看数据
这两个规则至关于iptables -I INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

modprobe nf_conntrack_ftp   //加载链接追踪模块(临时)
vim /etc/sysconfig/iptables-config  //开机自动加载
IPTABLES_MODULES="nf_conntrack_ftp"
作完这两步就能查看数据

nf_conntrack_ftp:针对数据端口链接时,将三次握手第一次的状态由NEW识别成RELATED

iptables-save
注意:修改完配置文件须要重启防火墙
service iptables restart

常见协议的端口 /etc/services
grep ^http /etc/services
服务      协议      端口/传输协议
httpd   http        80/tcp

1.6 综合案例

环境:
server 10.1.1.1     部署了ftp,http,samba,ssh
client1:10.1.1.2
client2:10.1.1.3

要求:
1.server端根据权限最小化原则,INPUT的默认规则改成DROP
2.client2能够访问server端的全部服务
3.client1 只能访问server端的ftp服务和ssh服务
4.IP地址为10.1.1.100到10.1.1.200之间的人只能访问server端的samba服务

具体步骤:

首先,server端部署相关服务并启动
//查看相应的软件包是否成功安装,没安装请安装
rpm -q vsftpd httpd samba openssh-server

2>Nat表

功能:地址转换(源地址和目标地址)
三条链:
PREROUTING
POSTROUTING
OUTPUT

处理动做:
nat表:
-j  SNAT    源地址转换   POSTROUTING
-j  DNAT    目标地址转换  PREROUTING
-j  MASQERRADE  地址假装

1.地址转换应用场景

  • 公司内部员工访问互联网 SNAT (通俗讲,就是公网不知道来访的私网ip,nat设备‘中间人’给转换一下ip地址,同时转发给公网数据请求)
  • 互联网用户访问公司服务器 DNAT (公网用户通过‘中间人’的地址转换得以访问私网)

2.地址转换原理

  • 源地址转换(SNAT)

  • 目标地址转换(DNAT)

3.地址转换应用

  • 源地址转换—SNAT
环境:
client:10.1.1.2
nat-server:10.1.1.1和2.2.2.1
web-server:2.2.2.2

需求:
客户端client是私有IP,想要访问互联网中的web服务

步骤:
1.client端:设置本身的默认路由(网关)指向nat-server服务器  (把‘中间人10.1.1.1’的IP添加网络做为网关,此处已有,故不添加net,只加gw)
route add default gw 10.1.1.1
route -n

2.nat-server端:开启路由转发功能并添加防火墙规则
(路由后POSTROUTING)

还原 iptables -F  包括配置文件/etc/sysconfig/iptables也要还原(此处注意,提早备份)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to 2.2.2.1 

3.web-servcer端:搭建web服务
echo "this is snat test page" > /var/www/html/index.html
service httpd restart
netstat -nltp|grep 80
route -n
Destination Gateway     Genmask         Flags Metric Ref    Use Iface
2.2.2.0     0.0.0.0     255.255.255.0   U       1     0     0   eth0

4.client端测试验证:client10.1.1.2是否能够访问web-server端2.2.2.2的web服务
wget http://2.2.2.2
能够访问

1.家里实现上网和上面有什么不一样?
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE(公网地址变的状况下)

2.地址转换是在NAT表上进行,若是在nat-server端的filter表的FORWARD链拒绝转发,是否能够正常访问?
能够,由于是路由后POSTROUTING转换

总结:

  1. SNAT源地址转换目的实现私网地址能够访问互联网
  2. NAT设备能够是硬件防火墙、路由器等物理设备,可是都得具备路由和地址转换功能
  3. 当请求发送到NAT设备后,NAT设备首先查看本身的路由表,而后再进行地址转换,因此应该在NAT表的POSTROUTING链上进行源地址转换(路由后)
  4. 对于NAT表和FILTER表来讲,数据包进来先通过NAT表的PREROUTING链,再过路由表,再选择不一样的路出去。

  • 目标地址转换—DNAT
路由前
web-server:10.1.1.3
nat-server:10.1.1.1和2.2.2.1(两个网卡,网络适配器增长,配置好eth1)
client:2.2.2.2

需求:公网用户client访问私网服务器提供的WEB服务

步骤:
1.web-server端:10.1.1.3上搭建web服务
echo "this is dnat test page">/var/www/html/index.html

2.nat-server端:10.1.1.一、2.2.2.1端开启路由转发功能并添加DNAT规则
echo 1 > /proc/sys/net/ipv4/ip_forward
route -n 查看路由表信息,确认有到达目标的网关

(默认ACCEPT)
iptables -t nat -A PREROUTING -d 2.2.2.1 -p tcp --dport 80 -j DNAT --to 10.1.1.3

3.client端:2.2.2.2客户端测试验证
elinks --dump http://2.2.2.1
    this is dnat test page
网关必定要指定‘中间人’的IP网关
相关文章
相关标签/搜索