如何保存及重载规则:

保存规则至指定文件:
iptables-save > /PATH/TO/SOMEFILE
# iptables-save > /root/iptables.1
# cat iptables.1
# Generated by iptables-save v1.4.21 on Tue Oct 16 21:47:02 2018
*filter
:INPUT DROP [267:22395]   //设定默认策略
:FORWARD DROP [0:0]
:OUTPUT DROP [326:21082]
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -d 192.168.184.142/32 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED -j ACCEPT
COMMIT
# Completed on Tue Oct 16 21:47:02 2018 
从指定文件重载规则:
iptables-restore < /PATH/FROM/SOMEFILE
 
CentOS 6规则保存
service iptables save   相当于  iptables-save > /etc/sysconfig/iptables
service iptables restart   相当于  iptables-restore < /etc/sysconfig/iptables
如果此前禁用了iptables,那么/etc/sysconfig/iptables这个文件是不存在的,可以使用service iptables save创建iptables文件
 
CentOS 7:  (要在centos7上使用iptables,首先要禁用firewalld)
引入了新的iptables前端管理服务工具:firewalld
firewalld-cmd
firewalld-config

关于firewalld:

http://www.ibm.com/developerworks/cn/linux/1507_caojh/index.html

iptable-nat演示

网络拓扑图

iptables string 字符串 白名单 iptables -i output -p all -m string --string_内网

设置防火墙服务器物理网卡

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_02

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_03

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_04

# ifconfig ens37 172.16.100.10/24 up    //为内网网卡添加IP

iptables string 字符串 白名单 iptables -i output -p all -m string --string_内网_05

 

设置内网主机物理网卡(在设置内网之前先安装好web服务,并添加网页)

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_06

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_07

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_08

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_09

# route add default gw 172.16.100.10   //为内网主机网络设置默认网关

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_10

用内网主机ping服务器的外网网卡

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_11

以上网络配置好,那么内网主机172.16.100.9可以ping通外网主机192.168.184.143吗?

首先服务器需要开启网络间转发功能

# cat /proc/sys/net/ipv4/ip_forward   
0     //此时服务器是没有打开网络间转发功能,意味着内网主机只能ping服务器的外网IP,却无法ping通服务器以外的外网主机IP

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_12

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_13

设置打开防火墙服务器网络转发功能
# sysctl -w net.ipv4.ip_forward=1  //只是临时生效

net.ipv4.ip_forward = 1

# cat /proc/sys/net/ipv4/ip_forward

1

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_14

失败的原因

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_15

这里在外网主机上添加路由

# route add -net 172.16.100.0/24 gw 192.168.184.141  //如果访问目标是172.16.100.0网络,那么网关是192.168.184.141

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_16

iptables string 字符串 白名单 iptables -i output -p all -m string --string_内网_17

现在内外网已经可以通信了

在内网主机启动web服务

iptables string 字符串 白名单 iptables -i output -p all -m string --string_内网_18

服务器可以访问内网主机的web服务

iptables string 字符串 白名单 iptables -i output -p all -m string --string_内网_19

外网主机也可以访问内网主机的web服务

下面是在服务器上添加规则控制

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_20

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_21

用服务器为内网主机加一个防火墙,只允许外网主机143访问内网主机访的web服务,不允许外网主机ping内网主机

# iptables -P FORWARD DROP  //在服务器上把FORWOARD链的默认配置改为DROP,此时外网主机无法ping内网主机,也无法访问内网主机的web服务
下面放行web服务,是外网主机可以访问内网主机,因为只有一台服务器,所以报文的请求与响应都会经过本服务器的FORWARD链
# iptables -A FORWARD -d 172.16.100.9 -p tcp --dport 80 -j ACCEPT  //服务器转发放行任何主机对内网主机web服务请求
# iptables -A FORWARD -s 172.16.100.9 -p tcp --sport 80 -j ACCEPT  //服务器转发放行内网主机对任何主机请求报文的响应

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_22

下面配置服务器放行内网主机的22号端口

# iptables -F FORWARD
# iptbales -P FORWARD DROP
# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT  //在服务器上FORWARD链上添加只要是ESTABLISHED状态,无论进出统统转发放行
# iptables -A FORWARD -d 172.16.100.9 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT  //假设请求一般是外网请求

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_23

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_24

假如内网主机有frp服务,如何开放?

内网主机无法直接直接链接外网,想要安装软件直接通过源码或者rpm包安装,由于上图内网主机与外网主机143已经开通了22号端口,所以本文利用SSH协议把vsftpd软件包经过scp命令传输到内网根目录下进行安装。SCP协议基于SSH协议:

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_25

iptables string 字符串 白名单 iptables -i output -p all -m string --string_服务器_26

iptables string 字符串 白名单 iptables -i output -p all -m string --string_内网_27

# cp /etc/fstab /var/ftp/pub/    //在内网主机上,把fstab文件放到vsftpd服务的默认目录下
# yum install lftp -y   //在服务器上(192.168.184.141)安装lftp

iptables string 字符串 白名单 iptables -i output -p all -m string --string_内网_28

但是外网143是无法访问的,引文服务器141并没有放行服务

下面把ftp服务的请求功能打开

1、装载模块

# modprobe nf_conntrack_ftp

2、放行命令链接、放行数据链接、放行响应连接

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_29

# iptables -R FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT   //对之前配置的规则进行修改
# iptables -R FORWARD 2 -d 172.16.100.9 -p tcp -m multiport --dports 21,22,80 -m state --state NEW -j ACCEPT   //同样对规则进行修改
3、外网主机安装lftp
# yum install lftp -y

iptables string 字符串 白名单 iptables -i output -p all -m string --string_外网_30

要想规则永久有效,应该保存下来,

# iptables-save > /root/iptables.2   //对服务器规则连进行存贮

练习:

主机防火墙:

放行telnet, ftp, web服务;

放行samba服务;

放行dns服务(查询和区域传送);

 

 

telnet: 23/tcp

 

samba: 137/udp, 138/udp, 139/tcp, 445/tcp

 

dns: INPUT: 53/udp, OUTPUT: 53/udp

 

 

 

网络防火墙:

放行telnet, ftp, web服务;

放行samba服务;

放行dns服务(查询和区域传送);

 

 

核心转发:/proc/sys/net/ipv4/ip_forward

 

/etc/sysct.conf

 

net.ipv4.ip_forward = 1

 

telnet: 23/tcp

samba: 137/udp, 138/udp, 139/tcp, 445/tcp

dns: INPUT: 53/udp, OUTPUT: 53/udp