iptables

一、简介

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。

netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

二、安装iptables服务

运维学习之iptables防火墙基本设定_Linux

运维学习之iptables防火墙基本设定_Linux_02

三、参数用法解释与示例

iptable 

-t ##指定表名称 

-n ##不作解析

-L ##列出指定表中的策略

-A ##增加策略

-p ##网络协议

--dport ##端口

-s ##数据来源

-j ##动作

ACCEPT ##允许

REJECT  ##拒绝

DROP ##丢弃

-N ##增加链

-E ##修改链名称

-X ##删除链

-D ##删除指定策略

-I ##插入

-R ##修改策略

-P ##修改默认策略

iptables  -t filter -nL #查看filter表中的策略

iptable  -F #刷掉filter表中的所有策略,当没有用-t指定表名称时默认时filter

service iptables save #保存当前策略

进行IP解析

运维学习之iptables防火墙基本设定_Linux_03

不进行IP解析

运维学习之iptables防火墙基本设定_Linux_04

刷掉filter表中的策略,不加-t默认为filter表,保存当前策略

运维学习之iptables防火墙基本设定_Linux_05

变为空

运维学习之iptables防火墙基本设定_Linux_06

iptables -A INPUT -i lo -j ACCEPT #允许lo

iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##允许访问22端口

允许回环接口,把默认策略改为丢弃所有数据包,无法正常访问http

运维学习之iptables防火墙基本设定_Linux_07

运维学习之iptables防火墙基本设定_Linux_08

更改为通过所有,可以正常访问

运维学习之iptables防火墙基本设定_Linux_09

运维学习之iptables防火墙基本设定_Linux_10

拒绝所有主机来源

运维学习之iptables防火墙基本设定_Linux_11

iptables -A INPUT -s 172.25.254.250 -j ACCEPT ##允许250主机访问本机所有端口

iptables -A INPUT -j REJECT ##拒绝所有主机的数据来源

iptables -N redhat ##增加链redhat

iptables -E redhat westos ##改变链名称

iptables -X westos ##删除westos链

iptable -D INPUT 2 ##删除INPUT链中的第二条策略

iptables -I INPUT  -p tcp --dport 80  -j REJECT ##插入策略到INPUT中的第一条

iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT ##修改第一条策略

iptable -P INPUT DROP ##把INPUT表中的默认策略改为drop

允许访问22端口

运维学习之iptables防火墙基本设定_Linux_12

删除INPUT链中的第二三条

运维学习之iptables防火墙基本设定_Linux_13

在第三条的位置插入允许访问80端口

运维学习之iptables防火墙基本设定_Linux_14

第一条插入26可以访问80端口

运维学习之iptables防火墙基本设定_Linux_15

不能连接126

运维学习之iptables防火墙基本设定_Linux_16

增加链westos

运维学习之iptables防火墙基本设定_Linux_17

修改westos链名称为redhat

运维学习之iptables防火墙基本设定_Linux_18

删除Redhat链

运维学习之iptables防火墙基本设定_Linux_19

四、数据包状态策略

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

iptables -A INPUT -i lo -m state --state NEW -j ACCEPT 

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

iptables -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT

iptables -A INPUT -j REJECT 

运维学习之iptables防火墙基本设定_Linux_20

运维学习之iptables防火墙基本设定_Linux_21

策略第一次通过后状态变为RELATED或ESTABLISHED,减缓访问压力

五、vsftpd在iptables开启下的配置

ftp主动模式会随机打开大于1024的端口,开启防火墙后会被禁止,无法正常使用

运维学习之iptables防火墙基本设定_Linux_22

vsftpd配置文件中修改端口为7000

运维学习之iptables防火墙基本设定_Linux_23

添加iptables允许通过7000端口策略

运维学习之iptables防火墙基本设定_Linux_24

可以登录ftp

运维学习之iptables防火墙基本设定_Linux_25

六、iptables伪装和端口装换

sysctl -a | grep forward

echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf

sysctl -p

iptables -t nat -A PREROUTING  -i eth1 -j DNAT --to-dest 172.25.0.11

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.100

客户机修改IP为172.25.26.226,添加网关

运维学习之iptables防火墙基本设定_Linux_26

刷掉iptables现有的策略,保存策略

运维学习之iptables防火墙基本设定_Linux_27

设置从客户端从服务端eth0出去的数据伪装成源数据为172.25.254.126

运维学习之iptables防火墙基本设定_Linux_28

测试,暂时未连通

运维学习之iptables防火墙基本设定_Linux_29

查看网络功能表

运维学习之iptables防火墙基本设定_Linux_30

启动内核路由转发功能

运维学习之iptables防火墙基本设定_Linux_31

运维学习之iptables防火墙基本设定_Linux_32

测试,可以连通

运维学习之iptables防火墙基本设定_Linux_33

客户端连接真机,显示登陆用户为www.westos.com,查看hosts本地解析,知其为服务端的主机名

运维学习之iptables防火墙基本设定_Linux_34

设置将真机从服务端eth0进去的数据伪装成源数据为172.25.26.226

运维学习之iptables防火墙基本设定_Linux_35

真机连接服务端,显示IP为172.25.26.226

运维学习之iptables防火墙基本设定_Linux_36