小壮学运维29--Linux中的iptables服务

一 、简述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,双网卡主机端起到中转作用




猜你喜欢

转载自blog.csdn.net/hello_xiaozhuang/article/details/80711046