IPTABLES防火墙

1.防火墙iptables介绍

防火墙相关概念

此处先描述一些相关概念。

从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。

主机防火墙:针对于单个主机进行防护。

网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。

网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。

 

从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。

硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。

软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter

iptables是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

网络地址转换(Network Address Translate)

数据包内容修改

以及数据包过滤的防火墙功能

1.1iptables基础四表五链

四表

filter表:负责过滤功能,防火墙;内核模块:iptables_filter  企业工作场景:主机防火墙

nat表:network address translation,网络地址转换功能;内核模块:iptable_nat

mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle

raw表:关闭nat表上启用的连接追踪机制;iptable_raw

也就是说,我们自定义的所有规则,都是这四种分类中的规则,或者说,所有规则都存在于这4张”表”中。

五链

PREROUTING      的规则可以存在于:raw表,mangle表,nat表。

INPUT          的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。

FORWARD         的规则可以存在于:mangle表,filter表。

OUTPUT         的规则可以存在于:raw表mangle表,nat表,filter表。

POSTROUTING      的规则可以存在于:mangle表,nat表。

表和链的关系

表(功能)<–>   链(钩子):

raw     表中的规则可以被哪些链使用:PREROUTING,OUTPUT

mangle  表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

nat     表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)

filter  表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

处理动作

处理动作在iptables中被称为target(这样说并不准确,我们暂且这样称呼),动作也可以分为基本动作和扩展动作。

ACCEPT:允许数据包通过。

DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。

SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。

MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。

DNAT:目标地址转换。

REDIRECT:在本机做端口映射。

LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

2.iptables命令介绍

选项

-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

iptables命令选项输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

实例

清除已有iptables规则

iptables -F
iptables -X
iptables -Z

开放指定的端口

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

屏蔽IP

iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是

查看已添加的iptables规则

iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 5075  589K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 191K   90M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
1499K  133M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
4364K 6351M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
 6256  327K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 5075  589K ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

删除已添加的iptables规则

将所有iptables以序号标记显示,执行:

iptables -L -n --line-numbers

比如要删除INPUT里序号为8的规则,执行:

iptables -D INPUT 8

3.实用命令记录

1).禁用ssh端口

~]# iptables -t filter -A INPUT 1 -p tcp --dport 22 -j DROP   ##禁止访问22端口,指定位置
~]# iptables -t filter -D INPUT -p tcp --dport 22 -j DROP     ##删除规则

2).禁止192.168.56.0网段接入

~]# iptables -t filter -A -i eth0 -s 192.168.56.0/25 -j DROP
~]# iptables -t filter -A -i eth0 ! -s 192.168.56.0/25 -j DROP  ##取反

3).禁用端口及网段接入

~]# iptables -t filter -A INPUT -p tcp --dport 22:52113 -i eth0 ! -s 192.168.56.0/24 -j DROP

4).禁ping服务器

~]# iptables -t filter -A INPUT -p icmp --icmp-type 8 -j DROP
~]# iptables -t filter -A INPUT -p icmp --icmp-type 8 -s 192.168.56.0/24 -j ACCEPT

5).状态匹配

~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##ESTABLISHED  已建立的连接
##RELATED      正在启动的新连接

6).限制指定时间内的允许通过数量及并发数

 -m limit --limit n/(second/miuute/hour)  ##指定时间内的请求速率"n"不指定默认为5,分别为(秒,分,时) --limit-burst [2]
 ~]# iptables -t filter -I INPUT -s 192.168.56.0/24 -p icmp --icmp-type 8 -m limit --limit 5/min --limit-burst 2 -j ACCEPT

7).脚本

#!/bin/bash

#define variable PATH
IPT=/sbin/iptables

#Remove any existing rules
$IPT -F
$IPT -X
$IPT -Z

#setting default firewall policy
$IPT --policy OUTPUT ACCEPT
$IPT --policy FORWARD DROP
$IPT -P INPUT DROP

#setting for loopback interface
$IPT -A INPUT -i lo -j ACCEPT

#setting access rules
#one,ip access rules,allow all the ips of 
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -s 202.81.17.0/24 -p all -j ACCEPT
$IPT -A INPUT -s 202.81.18.0/24 -p all -j ACCEPT
$IPT -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT
$IPT -A INPUT -s 192.168.56.0/24 -p all -j ACCEPT


#icmp
$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

#others RELATED
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

8).局域网上网

1.环境
server-网关A 能上网      eth0:118.190.201.21 eth1:192.168.56.21
client01-服务器B         eth1:192.168.56.32

2.说明
网关B eth0 118.190.201.21 配上级网关 118.190.201.2
      eth1 192.168.56.21 不配网关
服务器C eth1 192.168.56.32 配网关 192.168.56.21

3.实践步骤
3.1添加静态网关-client01
~]# route add default gw 192.168.56.21

3.2打开内核转发-server
编辑/etc/sysctl.conf永久生效
net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1
~]# sysctl -p
关闭iptables stop方便测试
临时生效
~]# echo 1 > /proc/sys/net/ipv4/ip_forward
~]# sysctl -w net.ipv4.ip_forward=1 ##-w 临时改变某个指定参数的值

4.载入内核模块
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
~]# lsmod |egrep ^ip

5.局域网共享上网两条命令
1.适合有固定外网地址的-server21:
~]# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -o eth0 -j SNAT --to-source 118.190.201.21
命令说明:
1)-s 192.168.56.0/24 办公室或IDC内网网段
2)-o eth0 为网关的外网卡接口
3)-j SNAT --to-source 118.190.201.21 是网关外网卡IP地址

2.适合变化的外网地址(ADSL):
~]# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j MASQUERADE


使用route命令
route add -net 192.168.56.0/24 gw 118.190.201.21
tcpdump -nnn -i eth1 -s 1000 -A host 192.168.56.21

9).端口映射

=====================================================
浏览器访问 118.190.201.21:9000  ===>  192.168.56.32:80
NAT表 PREROUTING链
=====================================================
~]# iptables -t nat -A PREROUTING -d 118.190.201.21 -p tcp --dport 9000 -j DNAT --to-destnation 192.168.56.32:80

10).一对一地址映射

===============================================================================
实现外部IP 118.190.201.21 一对一映射到内部 server:192.168.56.32
网关IP:118.190.201.12 eth1:192.168.56.254
===============================================================================
首先在路由网关上绑定VIP 118.190.201.21 可以是别名或辅助IP的方式
~]# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -d 118.190.201.21 -j SNAT --to-source 192.168.56.254
~]# iptables -t nat -A PREROUTING -d 118.190.201.21 -j DNAT --to-destination 192.168.56.32
~]# iptables -t nat -A POSTROUTING -s 192.168.56.32 -o eth0 -j SNAT --to-source 118.190.201.21

写入配置文件/etc/sysctl.conf
-A POSTROUTING -s 192.168.56.0/24 -d 118.190.201.21 -j SNAT --to-source 192.168.56.254
-A PREROUTING -d 118.190.201.21 -j DNAT --to-destination 192.168.56.32
-A POSTROUTING -s 192.168.56.32 -o eth0 -j SNAT --to-source 118.190.201.21

11).映射多个外网IP上网

~]# iptables -t nat -A POSTROUTING -s 192.168.56.32 -o eth0 -j SNAT --to-source 118.190.201.21-118.190.201.26

命令小记

# 清理Iptables表
## 注意:如果节点Iptables有特殊配置,以下命令请谨慎操作
sudo iptables --flush
sudo iptables --flush --table nat
sudo iptables --flush --table filter
sudo iptables --table nat --delete-chain
sudo iptables --table filter --delete-chain

Get busy living or get busy dying. 努力活出精彩的人生,否则便如行尸走肉

1
如无特殊说明,文章均为本站原创,转载请注明出处
  • 转载请注明来源:IPTABLES防火墙
  • 本文永久链接地址:https://www.xionghaier.cn/archives/128.html

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到