iptables防火墙工具;
iptables是一款优秀且完全免费的包过滤的防火墙工具,它的功能非常强大,且灵活;
netfilter/iptables网络过滤 ;
它是表的容器 ;
表是链的容器 ;
链是规则的容器 ;
规则就是iptables一系列过滤信息规范和具体操作方法;
iptables的过滤流程
client请求数据-------------->iptables filter-------------->获取主机 Service
| |
数据包能匹配上规则则通过 不能匹配则丢弃
匹配上了拒绝规则也是匹配,因此,不在继续向下进行;
例如:同时执行以下规则
[[email protected] ~]# iptables -A INPUT -P tcp --dport 3306 -j DROP
[[email protected] ~]# iptables -A INPUT -P tcp --dport 3306 -j ACCEPT
表:filter,nat,mangle ;
链:INPUT,FORWARD,OUTPUT, PREROUTING,POSTROUTING;
filter表:负责防火墙功能,过滤本机流入流出的数据包,是iptables默认使用的表,包含三个链:
INPUT:负责过滤所有目标地址是本机地址的数据包;
FORWARD:负责转发流经主机但不进入本机的数据包,起转发作用 ;
OUTPUT:处理所有原地址是本机地址的数据包,就是处理从主机发出去的数据包;
nat表:网络地址转换,负责来源与目的的ip地址和port的转换,和主机本身无关,一般用于局域网多人共享或内网映射外网ip及不同端口转换服务等功能,
包含三个链:
OUTPUT:同上 ;
PREROUTING:在数据包到达防火墙时,进行路由判断之前执行的规则改变包的目的地址,端口等。
POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则,改变包的原地址,端口等。
mangle表:主要负责修改数据包由特殊的路由标记,如:TTL,TOSMARK等,
这个表包含了5个链: INPUT,FORWARD,OUTPUT,PREROUTING,PSOTROUTING;
====================================================================================
查看帮助,如何使用iptables;
[[email protected] ~]# iptables -h
实践iptables命令及规则:
启动iptables:
[[email protected] ~]# /etc/init.d/iptables start
查看iptables状态:
[[email protected] ~]# /etc/init.d/iptables status
列出所有的规则:默认是filter表;
[[email protected] ~]# iptables -L -n
指定列出哪张表;
[[email protected] ~]# iptables -L -n -t filter
[[email protected] ~]# iptables -L -n -t nat
[[email protected] ~]# iptables -L -n -t mangle
临时清除默认规则,
重启后失效 iptables -F
删除所有规则 iptables -X
删除用户自定义的链 iptables -Z 把所有规则的指针清零,就是计数器清零;
禁止ssh默认的22端口 ;
-D 删除;
-t 指定表,不加-t默认是filter表;
-I 插入到第一条进行生效,
-A是添加到最后一条进行生效 -A 添加 INPUT 链,
-p 协议 tcp、udp协议 --dport 端口 ;
-j 行为 行为参数 ACCEPT(接受), DROP(丢弃), REJECT(拒绝);
添加规则:
[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
删除规则:
[[email protected] ~]# iptables -D INPUT -p tcp --dport 22 -j DROP
显示规则号:
[[email protected] ~]# iptables -L -n --line-num
显示行号,根据行号删除规则:
[[email protected] ~]# iptables -L -n --line-num
[[email protected] ~]# iptables -D INPUT 1
禁止某个网段连入: -i 指定哪张网卡,进 -o 指定哪张网卡, 出 -s 对原地址进行过滤;
[[email protected] ~]# iptables -t filter -A INPUT -i eth0 -s 192.168.1.1/24 -j DROP
删除禁止网段联网规则;
[[email protected] ~]# iptables -t filter -D INPUT -i eth0 -s 192.168.1.1/24 -j DROP
拒绝规则: ! 测试(非) ;
[[email protected] ~]# iptables -t filter -D INPUT -i eth0 -s ! 192.168.1.0/24 -j DROP
[[email protected] ~]# iptables -t filter -D INPUT -i eth0 -s ! 192.168.1.105 -j DROP
对网卡,端口的设置规则与上面方法相似 端口范围可以使用冒号隔开,如: 23:30
对指定多端口使用逗号隔开,如:23,24,25
安全保护: 防止洪水攻击的保护:限制1秒钟一次 ;
[[email protected] ~]# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s ACCEPT
端口扫描的一个保护;
[[email protected] ~]# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s ACCEPT
防止被ping死:
[[email protected] ~]# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s ACCEPT
===================================================================================== iptables 防火墙 filter 表生产实战例子:
清除当前的防火墙所有规则和计数器;
iptables -F //清除当前所有链(chain)的规则;
iptables -Z //清除当前链(chain)指针(计数器);
iptables -X //清除当前用户自定义的链;
配置允许SSH登入端口进入;
[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[[email protected] ~]# iptables -A INPUT -i lo -j ACCEPT
[[email protected] ~]# iptables -A OUTPUT -o lo -j ACCEPT
[[email protected] ~]# iptables -L -n
设置默认的防火墙和允许规则(电影院模式);
[[email protected] ~]# iptables --policy OUTPUT ACCEPT
[[email protected] ~]# iptables -P FORWARD DROP
[[email protected] ~]# iptables -P INPUT DROP [[email protected] ~]# iptables -L -n
开启信任的ip网段;
[[email protected] ~]# iptables -A INPUT -s 192.168.1.100/24 -p all -j ACCEPT
允许http服务无条件通过 ;
#允许普通的外部服务80;
[[email protected] ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 443 端口 HTTPS加密协议端口 ;
[[email protected] ~]# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
允许icmp类型协议通过,(#以下如果不想开就不执行) ;
[[email protected] ~]# iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
[[email protected] ~]# iptables -A INPUT -p icmp -s 192.168.1.1/24 -m icmp --icmp-type any -j ACCEPT
[[email protected] ~]# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT #如果不想开就不执行;
允许关联的状态包通过 ;
[[email protected] ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[[email protected] ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[[email protected] ~]# iptables -L -n --line-number
永久保存配置文件,更改配置文件之前一定要记得备份 ;
[[email protected] ~]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.olboy.bak
[[email protected] ~]# /etc/init.d/iptables save
查看更改后的配置文件 ;
[[email protected] ~]# less /etc/sysconfig/iptables
===============================================================================
阻止某个ip进行攻击;
[[email protected] ~]# iptables -I INPUT -s 27.168.22.24 -j DROP
==============================================================================
iptables防火墙nat表生产实战 ;
将linux服务器配置成上网网关或者路由器 DNAT全称目的网络地址转换,它是一种改变数据包ip地址的技术,
它可以使多台服务器共享一个ip地址连入Internet,并且继续提供服务 ;
例如: iptables -t nat -A PREROUTING -d 203.81.17.88 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.16:80
//将所有访问ip 203.81.17.88并且是80端口的请求,地址改写为内部web服务器10.0.0.16的80端口,从而实现内部ip对外提供服务的目的。
SNAT全称源网络地址转换,它是一种改变数据包源ip地址的技术,经常用来使多台计算机分享一个Internet地址访问互联网,
如办公室内部机器上网,IDC机房的内部机器上网等,
例如:
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 203.81.17.88
//将源地址是10.0.0.0的数据包地址改写成为公司203.81.17.88出网,这是办公室或机房内部服务器共享上网的常用方法;
MASQUERADE 为动态源地址转换,即当外部ip非固定ip时的场合经常使用 ;
例如:ASDL拨号上网: iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
将源地址是192.168.0.0/24的数据包进行地址伪装,此命令可以实现ADSL线路多台计算机共享上网;
-------------------------------------------------------------------------
演示前期准备:
1)服务器网关B需具备如下条件;
1,B需要的物理条件是双网卡,建议eth0外网地址,eth1地址,并且内外处于联通状态 ;
2.确保服务器B自身可以上网,这样才能带动下面的机器上网,ping baidu.com ;
3.网关内核文件/etc/sysctl.conf里需要开启转发功能,在网关172.163.1.3机器上开启路由转发功能,
编辑/etc/sysctl.conf,将内容改为net.ipv4_forward = 1,然后执行sysctl -p使之生效。
[[email protected] ~]# vim /etc/sysctl.conf
[[email protected] ~]# sysctl -p
查看iptables的filter表的FORWARD链是否允许转发 ;
[[email protected] ~]# iptables -L -n Chain FORWARD (policy ACCEPT) target prot opt source destination
ipotables 是在内核中运行的,我们需要检查或载入如下基本内核模块;
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_nat_ftp
modprobe ipt_state
实例: 以下为网关B上操作 如果配不好,可以先关iptables;
----------------------------------------------------------------------------------
问题1:
实现C可经过B,通过A上网
# iptables -t -nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.3
#iptables -t -nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
-----------------------------------------------------------------------------------
问题2:
实现外部ip地址端口到内部服务器ip和端口映射;
#iptables -t -nat -A PRETOUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80
提示:以上方法仅仅是端口之间的映射,实际上也可以实现ip一对一的映射,即DMZ的功能,
方法:
-A PREROUTING -d 124.42.60.112 -j DNAT --to-destination 10.0.0.8 -A POSTROUING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.60.112
-------------------------------------------------------------------------------------
问题3:
实现172段机器和10段机器互访;
route add -net 172.16.1.0/24 gw 10.0.0.3
提示:对于办公室小流量的跨网段访问这样实现是可以的,但是如果是IDC机房大流量跨网段访问 ;
我们就需要使用三成交换机来实现了;