iptables配置

zhongcanw 2019-12-09

防火墙是设在不同网络或网络安全域之间的一系列部件的组合。它能增强机构内部网络的安全性,它通过访问控制机制,确定哪些内部服务允许外部访问,它可以根据网络传输类型决定ip包是否可以传进或传出内部网络。
访火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规的先后顺序进行一一比较,直到满足其中一条规则为止,然后依据控制机制做出相应的动作,如果都不满足,则将数据包丢弃,从而保护网络的安全。
防火墙是工作在主机和网络的边缘。
防火墙机制
一种机制是拦阻传输流通行。
一种机制是允许传输流通行。
一些防火墙偏重拦阻传输流的通行,而另一种防火墙偏重允许传输流通行,
防火墙实现功能。
可以保护易受攻击的服务
控制内外网之间网络系统的访问。
集中管理内网的安全性,降低管理成本。
提高网络的保密性和私有性。
记录网络的使用状态,为安全规划和网络维护提供依据。
防火墙----过滤器
netfilter/iptables 分别是内核态模块和用户态工具。netfilter位于linux内核的包过滤功能的体系,iptables为于/sbin/iptables ,用来管理防火墙的工具,管理员通过iptables 给netfilter变更规则实现防火作用。
kernel2.0.x        ipfw               ipfwadmin
kernel2.2.x        ipchains         ipchains
kernel2.4.x        netfilter         iptables 
kernetl3.13.x     firewall          nftables>iptables 
tcp数据包结构
iptables配置

 iptables配置

iptables配置
mangle表,是标记这个数据包是干什么用的。链是包含在表中的
iptables配置
表中包含链,链中包含规则。
 
表和链的对应关系
iptables配置
iptables配置iptables配置iptables配置
iptables配置
语法的构成。
iptables [-t 表名] 选项 [链名] [条件] [-j控制类型] 
几个注意事项
不指定表名时,默认指filter表。
不指定链名时,默认指定表内的所有链。
除非设置链的默认策略,否则必须指定匹配条件。
选项、链名、控制类型使用大写字母,其余均为小写字母。
保存和恢复防火墙。
防火墙只在计算机开启的状态的下生效,如果系统被重新引导,这些规则就会被自动清除并重设,要保存规则请使用以下命令。
sbin/service iptables save。
保存在/etc/sysconfig/iptables 中的规则会在服务启动和重新启动时(包括机器被重新引导时)被应用。
[ sysconfig]# cat iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
数据包的常见控制类型。
ACCEPT    允许通过
DROP    直接丢弃不给出任何回应。
REJECT    拒绝通过,必要时会给出提示。
LOG    记录日志信息,然后传给下一条规则继续匹配。
 
添加的新的规则。
-A:    链的末尾追加一条规则,
-I:    在链的开头(或指定序号)插入一条规则
 
iptables -t filter -A INPUT -p tcp -j ACCEPT
表名为filter,协议tcp,ACCEPT允许通过,-A在链的末尾追加一条规则,INPUT入站。
iptables -t filter -I INPUT  -p icmp -j ACCEPT
iptables -t filter -I INPUT 3 -p tcp -j ACCEPT
查看规则列表
-L:    列出所有规则列表。
-n:    以数字形式显示地址,端口等信息。
-v:    以更详细的方式显示规则信息。
--line-numbers:    查看规则时,显示规则的序号。
 
iptables -L --line-numbers
iptables 选项说明 
 -L查看filter表的iptables规则,包括所有的链iptables -L
 -L [-t 表名]只查看某个表中的规则, 表名一共有三个:filter,nat,mangle,如果没有指定表名,则默认查看filter表的规则, iptables -L -t filteriptables -L nat
 -L [-t 表名] [链名]这里多了个链名,就是规则链的名称。iptables -L INPUT
 
 -n -L
以数字形式显示规则。如果没有-n,规则中可能会出现anywhere,有了-n,它会变成0.0.0.0/0 
 -nv -L你也可以使用“iptables -L -nv”来查看,这个列表看起来更详细,对技术人员更友好,呵呵。 
 iptables -nL --line-numbers显示规则的行号,使用操作。 
 -A在链的末尾追加一条规则。 
 -I在链的开头(或指定序号)插入一条规 
 -t指定表名 
 -p指定协议 
 -j指定操作类型,如ACCEPT、DROP、REJECT、LOG 
 -D删除链内指定的序号
iptables -D INPUT 2
iptables -n -L INPUT 3
 -P为指定的链设置默认规则 
 
iptables配置
A网络发出来的数据,首先匹配(raw、mangle、nat)表的PREROUTING(在路由选择前处理数据包),三个表的PREROUTING都匹配上了,就到路由了,路由选择有两种,一种是直接扔给本机,不经过路由。在主机这前有一个input规则(mangle、filter有input)的防火墙,对应的mangle和filter表就会写两个inpu规则。如果这两条规则都匹配成功,就可以进入主机进程。如果有一个input是拒绝的就进不去。成功进入进程处理完毕数据要返回,先要从主机里出来,output(raw、mangle、nat、filter都有)会顺序匹配这4个表里的output规则。如果匹配成功直接把回A网络
匹配(raw、mangle、nat)表的PREROUTING(在路由选择前处理数据包),三个表的PREROUTING都匹配上了,就到路由了,但是他的ip地址不是本机的,那就要进行一次路由转发,就要匹本FORWARD(mangle、filter表里有)规则,如果匹配上FORWARD规则,那么重新打个包转发,如果没匹配上直接丢弃或者拒绝。路由后的操作就是POSTROUTING(mangle nat),如果匹成功就发往B网络。
同一网段之间发送数据,如A主机发送数据到B主机,只要匹配A主机的出站防火墙和B主机的入站防火墙就行了,不用过路由。
 
防火墙放置的地方,一般有这么几个地方。单台主机边缘位置,有入站出站的限制,同时也可以做为出来后路由前路由后的规则限制。一般做为路由前。局域网边缘的防火墙限制。
四表五链:4表,raw、mangle、nat、filter。五链,input、output、forward、postrouting、prerouting。
控制类型:
        ACCEPT    接受
        DROP       丢弃
        REJECT     拒绝
        LOG         日志
        REDIRECE 重定向
iptables配置
设置默认策略:-P 为指定的链设置默认规则。
iptables -t filter -P FORWARD DROP        所有的路由转发全拒绝。
iptables -t filter -P OUTPUT ACCEPT        所有的出站都允许。
默认规则是不显示的。
[ ~]# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
  470 33724 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            state NEW tcp dpt:ssh
  285 30183 REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere            
 
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited
 
Chain OUTPUT (policy ACCEPT 32 packets, 3744 bytes)
pkts bytes target     prot opt in     out     source               destination         
 
防火墙规则/语法
iptables -t 表名 参数(-A、-I)    链名    -p  协议    -j    动作(ACCEPT、DROP等)
    注意事项:不指定表名时,默认的是filter表。
                    不指定链名时,表中所有的链都写
                        除非有默认的规则,要不然必须写指定的规则。
                        选项、链名、控制类型这三类都必须大写。
                   
添加规则:
                -A     添加规则到尾部。
                -I    添加规则到头部,指定序号添加在指定位置。
             
删除规则:
                -D    删除指定规则
                -F    清空防火墙列表。
                 -P    设置默认规则
                -X    清空自定义规则
显示规则:
                   -L    显示所有
                    -v    显示详细信息
                    --line-number    显示规则的序号
                    -n     以数字形式显示地址、端口等信息。
条件匹配
1、通用匹配
可直接使用,不依赖其他条件或扩展,包括网络协议、ip地址、网络接口等条件。
2、隐含匹配
要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。
3、显式匹配
要求以"-m扩展模块"的开式明确指出类型,包括多端口、MAC地址、ip范围、数据包状态等条件。
觉的通用匹配条件。
协议匹配:-p协议名。
地址匹配:-s源地址,-d 目的地址。
接口区配:-i入站网卡,-o是出站网卡。
iptables -I INPUT -s 192.168.10.197 -j DROP
原地址为192.168.10.197的数据包全部丢弃
iptables -I INPUT -s 192.168.10.197 -j REJECT
允许接收数据包但是拒绝返回
iptables -I INPUT -d 192.168.10.150 -j REJECT  
[ ~]# ping 192.168.10.150
PING 192.168.10.150 (192.168.10.150) 56(84) bytes of data.
From 192.168.10.150 icmp_seq=1 Destination Port Unreachable
From 192.168.10.150 icmp_seq=2 Destination Port Unreachable
拒绝返回。
iptables -A INPUT -i eth0 -j DROP    拒绝访问eth0网卡。
 
[ ~]# iptables -A INPUT -i lo -j DROP
[ ~]# ping 192.168.10.150
PING 192.168.10.150 (192.168.10.150) 56(84) bytes of data.
自己ping不通自己了。
 
[ ~]# iptables -I INPUT -i lo -j ACCEPT
[ ~]# ping 192.168.10.150              
PING 192.168.10.150 (192.168.10.150) 56(84) bytes of data.
64 bytes from 192.168.10.150: icmp_seq=1 ttl=64 time=0.039 ms
64 bytes from 192.168.10.150: icmp_seq=2 ttl=64 time=0.061 ms
放行了。
 
iptables -A INPUT ! -s 192.168.10.200 -j DROP        !取反的意思,就是除了192.168.10.200其他所有地址都丢弃。
iptables配置
隐含匹配
常用隐含匹配条件:--sport源端口,--dport目的端口。
ICMP匹配类型:--icmp-type ICMP类型。
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 20:21 -j DROP        20和21是两个连续的端口就用:号隔开,
iptables -A INPUT -p tcp --dport 80,23 -j DROP        80和23是两个不连续的端口就用,号隔开。iptables配置
8    别人给发送的请求拒绝掉。
0    我给别人发送的允许
3    接受别人的确认包(回显)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
 
常用的显式匹配条件
多端口匹配:-m multiport --sport源端口列表。
                    -m multiport  --dport目的端口列表。
ip范围匹配:-m iprange --src-range ip范围
MAC地址匹配:    -m mac -macl -source MAC地址
状态匹配:        -m state --state连接状态。        
iptables -A INPUT -p tcp -m multiport --dport 22,80 -j DROP        禁止访问22、80端口。
iptables配置
iptables -A INPUT -p tcp -m iprange --src-range 192.168.10.196-192.168.10.198 -j DROP                 
iptables -A INPUT -m mac --mac-source 00:0c:29:41:65:19 -j DROP
 
NEW接受第一次数据包的时候
ESTABLISHED   后来再接受数据包
RELATED    一直处于连接,又建立了另外一个边接FTP两个端口有关系。
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
 
显示匹配条件
        多端口:-m multiport --sport (--dport)源端口和目标端口列表。
        ip范围:-m iprange --src-iprange   ip范围。
        MAC地址:-m mac --mac-source MAC地址
        连接状态:    -m state --state 状态类型(NWE,ESTABLISHED,RELATED)
iptables配置
局域网共享上网
iptables配置
iptables配置
iptables配置
DNAT策略
局域网的web服务器能够访问internet
网关的外网ip地址有正确的DNS解析记录。
linux网关支持Ip路由转发。
实现方法
编写DNAT转换规则。
iptables -t nat -A PREROUTINTG -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6
PREROUTING入站之前,eth0网卡,目标地址218.29.30.31,更换目标地址为192.168.1.6
iptables配置
发布时修改目标端口
在DNAT规则中以"ip port "形式指定目标地址
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.21 -p tcp -dport 2346 -j DNAT --to-destination 192.168.1.6:22
目标地址218.29.30.31,目标端口2346映射为内网服务器ip,192.168.1.6:22
 
 
防火墙脚本
导出备份脚本 
iptables-save工具
可结合重定向输出保存到指定文件
[ ~]# iptables-save >1.ipt
[ ~]# ls
1.ipt  anaconda-ks.cfg  install.log  install.log.syslog  nagios安装包
[ ~]# cat 1.ipt
# Generated by iptables-save v1.4.7 on Tue Mar 13 13:03:36 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2946:249142]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Tue Mar 13 13:03:36 2018
 
导入还原规则
iptables-restore工具
可结合重定向输入指定规则来源
iptables-restore < 1.ipt
 
iptables服务
脚本位置:/etc/init.d/iptables 
规则文件位置:/etc/sysconfig/iptables 
定义变量
iptables配置
加载必要的内核模块
iptables配置
修改配置参数调优
iptables配置
定义具体的防火墙规则,最好先清空原先的规则。
iptables配置
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

相关推荐