iptables配置过程:
防火墙初始化配置:
iptables -F 删除链上所有信息
iptables -Z 清除所有计数器信息
iptables -X 清除用户自定义链信息
防火墙查看方法:
iptables -nL -v --line-numbers -t xxx
查看防火墙配置信息

-L 列表显示防火墙配置的规则信息
-n 规则中地址或者端口信息以数字方式显示
-v 详细配置信息
-t 指定表中的配置信息
–line-numbers 显示配置规则需要的信息
删除已有配置规则信息
方式一:根据已有规则进行删除
iptables -D INPUT ! -s 10.0.0.1 -p tcp --dport 22 -j DROP
方式二:根据规则序号进行删除
iptables -D INPUT 2

-A    指定在那个链上添加规则
-I  指定在那个链上插入规则
-D  指定在那个链上删除规则
-R    指定在那个链上修改规则
-p     指定规则的协议(tcp  udp  icmp)
--dport    目标端口信息  
--sport    源端口信息
-s  源地址
-d      目标地址
-i     数据包进入网卡
-o   数据包离开网卡
-j   对匹配信息做什么处理
-m    匹配扩展防火墙配置
multiport  识别多端口配置信息
limit    实现流量限速功能

nat表配置方法(映射)

postrouting原理:先路由再映射
内网用户访问外网服务器

云主机-----eth1 iptables eth0-----内网用户

内网用户访问外网服务器时
①:172.16.1.1经过eth0路由到外网网卡eth1中
②:eth1将路由过来的数据包进行映射,将172.16.1.1映射为10.0.0.1 发送给外网云主机
③:云主机响应的数据包从eth1进入,先反向映射为内网地址172.16.1.1,再路由给eth0,发送到内网主机

prerouting 先映射再路由
外网用户访问内网服务器

用户-----eth1 iptables eth0 -----内网主机
①:用户访问内网先访问到iptables外网网卡eht1 ;
②:eht1外网接收到数据包时,先根据链中的信息进行映射,在发送给内网网卡eth0
③:内网网卡eth0接收到数据包时,进行路由给内网主机。

案例一:内网主机访问外网

第一个历程:配置内网主机路由信息
关闭外网网卡eth0

ifdown  eth0

此时会出现无法使用xshell登录的情况
使用ssh命令利用linux远程到内网主机上
修改eth1的网卡配置文件

[root@web01 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=172.16.1.7
PREFIX=16
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
UUID=a2dcc8cb-069f-3e39-b0b3-401a6996c822
DEVICE=eth1
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
DNS1=223.5.5.5
GATEWAY=172.16.1.81

DNS1=223.5.5.5
GATEWAY=172.16.1.81
这两条是新加的,其中172.16.1.81表示iptables的内网IP地址;
使用iptables的外网网卡作为网关,使得数据包经过内网主机发送给网关(172.16.1.81)

第二个历程:让iptables服务器开启路由转发功能

[root@iptables ~]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
[root@iptables ~]# sysctl   -p
net.ipv4.ip_forward = 1

使配置生效

第三历程:iptables服务器的配置:

iptables  -A  INPUT -s  10.0.0.0/24 -p tcp  --dport  22  -j ACCEPT(防止将自己给提出门外)
iptables -A  INPUT  -s   172.16.1.0/16 -j  ACCEPT(允许内网主机访问)
iptables  -P  INPUT  DROP  (其余禁止)
iptables   -P   FORWARD  DROP(其余禁止)

百度外网------eth1-iptables–eth0------内网用户

①:内网用户的数据包172.16.1.7发送给自己的网关(也就是iptables的内网主机地址172.16.1.81)
②:iptables主机开启路由转发功能,使用nat表做映射,将172.16.1.7映射为10.0.0.81
发送给百度外网
iptables  -t  nat  -P  POSTROUTING -s  172.16.1.7/16  -o eth0  -j SNAT  --to-source 10.0.0.81

解释:
-t 指定nat表
-P 指定表中的链
-s 指定源地址
-o 指定出去的网卡
-j 指定转换的动作
–to-source 指定转换后的地址
如果此时访问(内网用户访问外网)其实是不通的

排错思路:
1 查看nat表的映是否起作用
iptables -t nat -nL -v
2 防火墙各种表和链的匹配顺序关系

简单理解匹配顺序(表和链的匹配顺序)
目的:
①–数据–>nat:prerouting----路由分叉口----filter:INPUT------路由选择-----①nat OUTPUT ②filter output

流经:
②—数据—>nat:prerouting----->路由分岔口—>filter:FORWARD ---->nat:postrouting

提示:利用匹配原理图时,站在最终想实现的结果上去运用匹配流程图,比如案例一中,eth0是流经的网卡,所以要查看filter:forward是否通畅。
问题原因就是filter的forward链改为accept,这也是解决方式之一,将filter链改为放行。

方式二:写filter表中的forward链中的规则。

流经也是又去有回的。

iptables  -A  FORWAED  -i eth1  -s  172.16.1.7 -j ACCEPT
iptables  -A FORWARD  -o  eth0  -s  172.16.1.7 -j  ACCEPT

[root@iptables ~]# iptables  -A  FORWARD  -i  eth0  -d  172.16.1.7  -j  ACCEPT
[root@iptables ~]# iptables  -A  FORWARD  -o  eth1  -d  172.16.1.7  -j  ACCEPT
[root@iptables ~]# iptables -nL -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 7668  568K ACCEPT     tcp  --  *      *       10.0.0.0/24          0.0.0.0/0            tcp dpt:22
  298 38232 ACCEPT     all  --  *      *       172.16.0.0/16        0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    9   600 ACCEPT     all  --  eth1   *       172.16.1.7           0.0.0.0/0           
    0     0 ACCEPT     all  --  *      eth0    172.16.1.7           0.0.0.0/0           
    1    76 ACCEPT     all  --  eth0   *       0.0.0.0/0            172.16.1.7          
    0     0 ACCEPT     all  --  *      eth1    0.0.0.0/0            172.16.1.7          

Chain OUTPUT (policy ACCEPT 17 packets, 1772 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@iptables ~]#

案例二:实现外网用户访问内网主机

prerouting 先映射再路由
用户-----eth0–iptables–eth1-----内网172.16.1.7

用户访问 内网172.16.1.7 从eth0进入数据包
,eth0接受数据包后先进行映射再进行路由转发。eth0为映射,eth0(内网网卡)为路由。

iptables服务器上配置

[root@iptables ~]# iptables -t nat -A  PREROUTING  -d  10.0.0.81 -p tcp  --dport 9000  -i eth0 -j  DNAT  --to-destination 172.16.1.7:22

解释:指定nat表 指定prerouting链 -d 目标地址 -p tcp 协议 --dort 目标端口 -i eth0 进入 -j 动作 作为目标转换 DNAT --to-destination 转换为172.16.1.7:22

保证可以ping通10.0.0.81防火墙外网地址

iptables  -A INPUT  -p  icmp  -j ACCEPT

测试:

[c:\~]$ ssh   10.0.0.81 9000

如果:外网想访问内网多台主机;建议配置vpn

iptables防火墙配置过程:
a 防火墙包过滤配置方法filter表
b 防火墙包映射配置方法nat表

iptables防火墙企业应用

第一个历程:保存自己已有的默认配置信息
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
第二个历程:重新初始配置
iptables -Z /-F/-X
第三历程:将自己不要提出门外,注意一开始的默认配置规则

第四个历程:默认策略规则
iptables -P INPUT DROP
iptables -P FORWARD DROP

第五个历程:是否需要实现禁用ping功能
允许自己ping自己 iptables -A INPUT -i lo -p icmp -j ACCEPT
第六个历程:设置允许访问的白名单
打开dns解析:

iptables  -A  INPUT  -p  tcp  --sport  53  -j  ACCEPT

iptables  -A  INPUT  -p  udp  --sport  53  -j  ACCEPT

允许公司合作方访问:iptables -A INPUT -s 合作方地址 -p 协议 --dport 服务端口 -j ACCEPT
第七个历程:实现nat地址映射
iptables -t nat -A POSTROUTING XXX

内网主机访问外网

iptables -t nat -A PREROUTING XXX

实现外网主机访问内网

第九个历程:配置完毕,进行保存

iptables配置是立即生效的,但是重启会丢失配置

iptables-save > /etc/sysconfig/iptables