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