iptables 入门详解
一、 iptables介绍
采用数据包过滤机制工作的,所以会对请求的数据包的包头数据进行分析,并根据预先规定的规则进行匹配来决定是否可以进入主机。iptables主要工作在OSI的二、三、四层。
iptables工作流程小结:
1、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2、如果匹配上规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
3、如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向
下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4、防火墙的默认规则是对应链的所有的规则执行完才会执行的。
iptables是表的容器,iptables有四张表。表是链(chain)的容器,链是规则(policy)的容器。
四表: (1) filter(筛选作用,最常用) :INPUT OUTPUT FORWARD
(2) nat (负责数据包改写,网关共享) :OUTPUT PREROUTING POSTPREROUTING
(3)mangle(硬件常使用) :INTPUT OUTPUT FORWARD PREROUTING POSTROUTING
(4)raw
查看4表5链: man iptables
二、工作原理
强调:.上 图可以用北京地铁1,2号线来描述:
1号线:主要是NAT功能,
企业案例:
1)局域网上网共享(路由和网关),使用NAT的POSTROUTING链。.
2)外部P和端口映射为内部P和端口(DMZ功能),,使用 NAT的PREROUTING链
2号线:主要是FIltER功能,即防火墙功能FILTRR NPUT FORWARD.
企业案例:
1)主要应用就是主机服务器防火墙,使用FILTER的INPUT链。
三、常用命令
iptables -n :数字
iptables -L :列表
iptables -F (iptables --flush):清除所有规则,不会处理默认规则
iptables -X (iptables --delete -chain) :删除用户自定义的链
iptables -Z : 链的计数器清零
-t :指定表
-A :添加规则
-p :协议(all,tcp,udp,icmp),默认all。 匹配端口范围时用冒号分隔: -p 10:80
--dport :目的端口
--sport:源端口
-j :jump 处理行为(ACCEPT、DROP 、REJECT)
-A: 将规则添加到链的结尾
-I :将规则添加到指定位置,默认第一条
--line-number : 显示规则的序号
-D : 删除规则
-s :源地址,网段
-i :匹配进入的网卡接口 如:iptables -A INPUT -i eth0
-o :匹配出去的网卡接口 如:iptables -A FORWARD -o eth0
-m state --state 匹配网络状态
-m limit --limit n/{second/minite/hour}:限制指定时间包的允许通过数量和最大并发数量
-limit -burst 2 -j ACCEPT
-P :改变默认规则
注意:
## Drop: 把包丢弃,可能会再次访问 ,建议使用。
Refuse:拒绝,会告诉。
## -p 要在 -dport 前面
## 使用-D -I -R时需要在链后面加第几行 ,使用-A时不用加,只能加在最后一行。
(1) 增删查改
查看表: iptables -t 表名 -L (直接输入iptables -L 打开的是filter这张表)
(1)一般查看一个表后面接触 -nvL 如:iptables -t 表名 -nvL
(2)删除某个策略: iptables -D INPUT 1(行数)
(3)增加某个策略:iptables -A INPUT -p tcp --dport 80 (-A 默认添加到最后)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT (插入用-I,默认插入在第一行)
(4)修改策略 : iptables -R INPUT 7 -p tcp --dport 80 -j ACCEPT
OUTPUT相关:
禁止目的地址为某个特定地址时:iptables -A OUTPUT -d baidu.com -j DROP
(2) iptables 默认加载的内核模块
lsmod |egrep “nat|filter”
linux 默认加载模块为空,通过modprobe加载如下模块到linux内核。
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
(3)禁用端口
查看ssh端口:netstat -lntup|grep ssh
禁用ssh:iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
使用禁用端口范围的方式:iptables -t filter -A INPUT -p tcp --dport 22:23 -j DROP
若多个端口不连续可以使用 -m multiport (!)–dport 22,23的方式
进入linux,查看iptables
删除该条规则(规则较多时,用iptables -nvL --line-number 显示规则的序号)
(4)禁用网段
基于客户端源地址网段控制:-s 192.168.40.0/24
取非(端口,协议等等都可以使用非): iptables -A INPUT ! -s 192.168.40.0/24 -j DROP
(注意:centos5.8 及之前!放在-s后面 ,centos6开始,!放在-s前面)
(5) 匹配icmp类型
iptables -I INPUT -p icmp --icmp-type 8 -j DROP (这样设置后ping不通)
iptables -I INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
(6)匹配网络状态
-m state --state
NEW:已经或将启动新的连接
ESTABLISHED:已经建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别的
如:允许关联(RELATED)的状态包通过(WEB服务器不要使用FTP服务)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
四、防火墙的应用
iptables防火墙的应用:
1)主机防火墙
2)网关的应用(IP映射,端口映射)
3)过滤信息,监控限制流量及员工上网行为( squid(正向代理缓存加过滤)+ntop (图形流量
监控) +tc (流量限制) +iptrfiftop (流量查看) )
如果IPTABLES的服务器升级内核可以实现类似squid的过滤的功能。
4)网关装杀毒软件软件监听9999端口,(网关杀毒)
smtp gateway anti-vinus
-A PREROUTING -i eth0 -d 211.167.253.109 _p tcp -m tcp -dport 25 j DNAT --to-destination
192.168. 10.6:9025
5)结合zebra配置企业级路由器。
五、总结
iptables常用企业案例:
1、linux 主机防火墙(表:FILTER链: INPUT) 。
2、局域网机器共享上网(表: NAT链: POSTROUTING)
iptables -t nat -A POSTROUTING -S 192.168.1.0/24 -0 eth0 d SNAT - to source 10.0.0.7
3、外部地址和端口,映射为内部地址和端口(表: NAT链: PREROUTING)
iptables -t nat -A PREROUTING -d 10.0.0.7 -P tcp --dport 80 j DNAT --to-destination
192.168.1.8:9000