Linux中的iptables服务

  • Post author:
  • Post category:linux



一 、简述iptables


iptables 的最大优点是它可以配置有状态的

防火墙

,这是 ipfwadm 和 ipchains 等以前的工具都无法提供的一种重要功能。有状态的防火墙能够指定并记住为发送或接收

信息包

所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为 ESTABLISHED 、 INVALID 、 NEW 和 RELATED。




TARGETS


防火墙

的规则指定所检查包的特征,和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定.该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过],DROP[删除],QUEUE[排队],或者 RETURN[返回]。

 


ACCEPT

 

表示让这个包通过。DROP表示将这个包丢弃。QUEUE表示把这个包传递到

用户空间

。RETURN表示停止这条链的匹配,到前一个链的规则重新开始。如果到达了一个内建的链(的末端),或者遇到内建链的规则是RETURN,包的命运将由链准则指定的目标决定。

 


TABLES

当前有三个表(哪个表是当前表取决于

内核

配置选项和当前模块)。

-t table

这个选项指定命令要操作的匹配包的表。如果内核被配置为自动加载模块,这时若模块没有加载,(系统)将尝试(为该表)加载适合的模块。这些表如下:

filter,这是默认的表,包含了内建的链INPUT(处理进入的包)、FORWARD(处理通过的包)和OUTPUT(处理本地生成的包)。

nat,这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成:PREROUTING (修改到来包)、OUTPUT(修改

路由

之前本地的包)、POSTROUTING(修改准备出去的包)。

mangle 这个表用来对指定的包进行修改。它有两个内建规则:PREROUTING(修改路由之前进入的包)和OUTPUT(修改路由之前本地的包)。

1、iptables的安装

命令:yum install iptables -y

2、iptables的开启

在使用Iptables管理防火墙时,需要将firewalld服务关掉

3、iptables的查看

iptables   -nL默认查看的是filter链

列表里

Chain INPUT (policy ACCEPT)表示如果没有读到关于自身策略,则按这个默认方式执行

火墙动作    协议      源入口                  目的地                数据包的状态

target          prot        opt                        source                destination

4、iptables的刷新

iptables  -F即清空列表

5、iptables的配置文件

/etc/sysconfig/iptables

上面虽然清空了列表,但是策略还是在配置文件里,重启iptables服务就会出现

6、iptables策略的保存

先清空配置文件里的内容

再重启服务,可以看到策略全部被清空

这时我们随便添加一条策略

iptables -A INPUT -j ACCEPT(表示接受所有网络服务)

但此时配置文件里还是没有东西,表示只是临时一次性的

刷新一下就没有了,所以我们要将其保存在配置文件里,

service iptables save永久保存在文件里重启服务后会出现


四、iptables的策略


iptables


-t             后面接内建表的名称

-A           添加一个策略

-I             插入一个策略

-D           删除一个策略

-s            来源(策略所指定的ip)

-d            目的

-p            协议

–dport    端口(策略所指定的接口)

-i             匹配从什么接口进来 lo(回环接口)

-P           修改默认规则

-R           修改某一条规则

-N           增加自定的链

-E           修改链名称

-X           删除自定义链

-j             ACCEPT|DROP(不回应)|REJECT  执行的动作

1、iptables  -A  INPUT  -s  172.25.254.205  -p  tcp   –dport  22  -j  ACCEPT

该条策略表示允许172.25.254.205主机通过22端口(ssh服务)访问自己,并将该策略写进filter的INPUT链中

2、iptables   -I   INPUT   2   -j   REJECT

该条策略表示拒绝所有网络服务

链中策略的读取是有顺序的,如果靠前的策略的设定对于数据包有处理,则不读取靠后的策略

3、iptables -D INPUT 2

该策略表示删除filter链的INPUT里的第二条策略

4、iptables -N westos

该策略表示新建自定义链westos

5、iptables -E westos WESTOS

该策略表示修改自定义链的名称

6、iptables -X WESTOS

该策略表示删除自定义链

7、iptables -P INPUT DROP

该策略表示修改filter链的input的默认执行方式为DROP(表示对于所有数据包进行丢弃,没有任何回应)

8、iptables -t raw -nL

该策略表示列出链raw的内容

9、iptables -A INPUT ! -s 172.25.254.5 -p tcp –dport 80 -j ACCEPT

该策略表示除了172.25.254.5以外的所有主机都可以从80端口(apache)访问该主机

10、我们不可能每次都对每个数据包去一次次检验,那样将会加大负载,造成浪费,所以我们可以设定,如下命令

iptables -A INPUT -m state –state ESTABLISHED,RLATED -j ACCEPUT表示已经连接过的数据包和正在连接的数据包直接通过

-m,–state:表示iptables的状态机制,共有四种状态机制

NEW:该数据包想要开始一个新的连接

ESTABLISHED:已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包,即只要发送并接到应答

RELATED:该包是属于已经建立的某个连接所建立的新连接

INVALID:该包不匹配于任何连接,通常这些被DROP

11、iptables   -t  nat   -A  POSTROUTING  -o eth0  -j  SNAT  – -to-source  172.25.254.105

POSTROUTING表示路由后转发,即在访问后进行转换

配置两块网卡eth0为172.25.254.105,eth1为192.168.0.105

然后把内核路由打开在/etc/sysctl.conf 里写入net.ipv4.ip_forward =  1

sysctl -p激活

访问端配置一块网卡为192.168.0.205

此时ping192.168.0.105可以通,但要想访问172.25.254.5,还不可以,如何实现

在desktop加上网关设置为server的192.168.0.105

现在可以ssh连接到172.25.254.5,但是w查看显示的是172.25.254.105在连接,实现了伪装,双网卡主机端起到中转路由的作用

12、继续上面,现在想要用172.25.254.5去连接192.168.0.205,怎么实现

在双网卡主机端,输入策略

iptables -t nat -A PREROUTING -i eth0(172) -j DNAT –to-dest 192.168.0.205

此时用172.25.254.5去ssh 172.25.254.105连接后可以看到连接的是192.168.0.205,双网卡主机端起到中转作用




版权声明:本文为hello_xiaozhuang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。