Linux 之 iptables 网络过滤器

一、iptables的认识
1、iptables和firewalld一样,都是一种动态控制防火墙的工具,通过设定一系列的策略从而保证在与其他主机进行数据传输时系统的安全性。

2、iptables具有filter、nat、mangle、raw四种内建表,各个表中又有内建链,有各自不同的功能。

二、iptables常用内建表
1、filter表:filter表示iptables的默认表,如果没有自定义表,则默认为filter表,具有三种内建链
INPUT:处理来自外部的数据;
OUTPUT:处理往外发送的数据;
FORWARD链:将数据转发至本机的其他网卡上。

2、nat表:nat表中有三种内建链:
PREROUTING:处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址、
POSTROUTING:处理即将离开本机的数据包。它会转换数据包中的源IP地址
OUTPUT:处理本机产生的数据包

3、mangle表:Mangle表用于指定如何处理数据包。有五个内建表
PREROUTINGOUTPUTPOSTROUTINGFORWARDINPUT

4、raw表:用于处理异常,有两个内建表:PREROUTINGOUTPUT

三、iptables的基本使用

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
[root@localhost ~]# systemctl start iptables.service 
[root@localhost ~]# systemctl enable iptables.service 
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
[root@localhost ~]# iptables -nL      ##列出所有策略

这里写图片描述

[root@localhost ~]# iptables -F                      ##清空所有策略
[root@localhost ~]# iptables -nL
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         
[root@localhost ~]# service iptables save                  ##保存
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@localhost ~]# vim  /etc/sysconfig/iptables           ##保存位置所在文件

这里写图片描述

四、iptables的策略

-t 后面接内建表的名称
-A 添加一个策略
-I 插入一个策略
-D 删除一个策略
-s 来源(策略所指定的ip)
-d 目的
-p 协议
--dport 端口(策略所指定的接口)
-i 匹配从什么接口进来 lo(回环接口)
-P 修改默认规则
-R 修改某一条规则
-N 增加自定的链
-E 修改链名称
-X 删除自定义链
-j ACCEPT|DROP(不回应)|REJECT 执行的动作

【例题:只允许172.25.254.66用ssh连接】

[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT    ##拒绝所有人用ssh连接
[root@localhost ~]# iptables -nL    ##查看
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

这里写图片描述

这里写图片描述

[root@localhost ~]# iptables -I INPUT 1 -s 172.25.254.66 -p tcp --dport 22 -j ACCEPT  ##在第一行插入允许250连接ssh
[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  172.25.254.66       0.0.0.0/0            tcp dpt:22
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22 

这里写图片描述
这里写图片描述

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

[root@desktop ~]# iptables -nL    ##查看所有策略均允许,在真机和server虚拟机测试可以看到阿帕其测试界面

这里写图片描述

真机测试:
这里写图片描述
虚拟机测试:
这里写图片描述

[root@desktop ~]# iptables -t filter -nL    查看filter表策略
[root@desktop ~]# iptables -t nat -nL  查看nat表策略
[root@desktop ~]# iptables -t mangle -nL   查看mangle表策略

这里写图片描述
这里写图片描述

[root@desktop ~]# iptables -P INPUT DROP   设置为丢弃状态
[root@desktop ~]# iptables -nL   ##用真机和虚拟机测试一直转圈,因为丢弃状态不返回值 

这里写图片描述

真机测试:
这里写图片描述
虚拟机测试:
这里写图片描述

[root@desktop ~]# iptables -P INPUT ACCEPT  重新改到接受
[root@desktop ~]# iptables -nL  查看策略
[root@desktop ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT  将80端口设置为拒绝
[root@desktop ~]# iptables -nL  查看策略
[root@desktop ~]# iptables -D INPUT 1 删除策略 

这里写图片描述
这里写图片描述

[root@desktop ~]# iptables -A INPUT -s 172.25.254.84 -p tcp --dport 80 -j ACCEPT  设置84主机可以访问,用真机和虚拟机测试发现均可以连接,80端口为http的端口
[root@desktop ~]# iptables -nL  查看策略

这里写图片描述
真机测试:
这里写图片描述
虚拟机测试:
这里写图片描述

root@desktop ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT  拒绝其他用户访问,iptables从上到下读取,不拒绝的话其他用户还可以访问
[root@desktop ~]# iptables -nL  查看策略

这里写图片描述
真机可以访问,虚拟机测试不可以访问:
这里写图片描述

五、iptables的常规配置:

这里写图片描述

1)该策略表示新建自定义链westos
[root@desktop ~]# iptables -N westos

这里写图片描述

2)该策略表示修改自定义链的名称
[root@desktop ~]#  iptables -E westos WESTOS  ##更改名字为大写

这里写图片描述

3)该策略表示删除自定义链
[root@desktop ~]#  iptables -X WESTOS  删除WESTOS表

这里写图片描述

[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT  ##允许访问22端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT  ##允许访问53端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT  ##允许访问80端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 3260 -j ACCEPT  ##允许访问3260端口
[root@localhost ~]# iptables -A INPUT -i lo  -j ACCEPT  ##允许访问回环端口
[root@localhost ~]# iptables -nL

这里写图片描述

[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ##将已经建立的和正在进行的设置允许访问
[root@localhost ~]# iptables -nL

这里写图片描述

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

NEW:该数据包想要开始一个新的连接
ESTABLISHED:已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包,即只要发送并接到应答
RELATED:该包是属于已经建立的某个连接所建立的新连接
INVALID:该包不匹配于任何连接,通常这些被DROP

[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT   ##允许22端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT   ##允许53端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT   ##允许80端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 3260 -j ACCEPT  ##允许3260端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT   ##允许443端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -i lo -j ACCEPT  ##允许回环端口

这里写图片描述

[root@localhost ~]# iptables -A INPUT -j REJECT  ##拒绝其他
[root@localhost ~]# iptables -nL

这里写图片描述

[root@localhost ~]# service iptables save    保存策略
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@localhost ~]# cat /etc/sysconfig/iptables   查看策略文件

这里写图片描述
这里写图片描述

[root@desktop Desktop]# iptables -F  刷新
[root@desktop Desktop]# iptables -nL 查看策略
[root@desktop Desktop]# rpm -e httpd  卸载阿帕其

这里写图片描述

六、iptables的地址伪装:

这里写图片描述

[root@localhost ~]# iptables -F   刷新策略
[root@localhost ~]# iptables -t nat -nL  查看nat策略

这里写图片描述

[root@localhost ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.129
在nat表中添加若ip为172.25.4.229的主机连接172.25.254.66的主机时,通过本台主机的eth1网卡路由转换伪装为172.25.254.129这个ip去连接的策略.
[root@localhost ~]# iptables -t nat -nL  查看策略

这里写图片描述

[root@localhost yum.repos.d]# sysctl -a | grep ip_forward   打开路由协议
net.ipv4.ip_forward = 1
[root@localhost yum.repos.d]# sysctl -p
net.ipv4.ip_forward = 1

这里写图片描述

在server单网卡中ping 172.25.254.66可以ping通,ssh root@172.25.254.66 
[root@localhost ~]# w -i  ##则会出现172.25.254.129 登陆 伪装成功

这里写图片描述

继续上面,现在想要用172.25.254.66去连接172.25.4.229,怎么实现在双网卡主机端,输入策略

[root@localhost ~]# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 22 -j DNAT --to-dest 172.25.4.229 ##在nat表中添加若ip为172.25.254.66的主机发现连接自己的主机ip为172.25.254.129,主动去连接时直接显示server主机的IP
[root@localhost ~]# iptables -t nat -nL  查看策略

这里写图片描述

策略里的PREROUTING表示路由前转发,即在访问前进行转换
-i: 表示数据包从eth0网卡进来
-d: 表示目的地址
DNAT 表示目的地址转换

在再主机172.25.254.66中ping172.25.254.129可以通 ssh 连接上 ifconfig 出现的是server单网卡的IP 172.25.4.229

这里写图片描述

此时,server 单网卡的IP成了主机的IP 172.25.254.66

这里写图片描述

猜你喜欢

转载自blog.csdn.net/janenancy/article/details/80697587