iptables防火墙

iptables防火墙


防火墙分类:硬件防火强(要钱的,获取那g bin)并且和我们没关系)。软件防火墙:iptables
http:// blog.youkuaiyun.com/sdytlm/article/details/6544913
规则链:

  • 规则的作用:对数据包进行过滤或处理
  • 链的作用:容纳各种防火墙规则
  • 链的分类依据:处理数据包的不同时机
  • INPUT:处理入站数据包
  • OUTPUT:处理出战数据包
  • FORWARD:处理转发数据包
  • POSTROUTING:在进行路由选择后处理数据包
  • PREROUTING:在进行路由选择前处理数据包

iptables命令:

iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

注意事项:

  • 不指定表名,默认指 filter表
  • 不制动链名,默认指表内的所有链
  • 除非设置链的默认策略,否则必须指定匹配条件
  • 选项、链名、控制类型使用大小写字母,其余均为小写

数据包常见的控制类型:

  • ACCEPT:允许通过
  • DROP:直接丢弃,不给出任何回应
  • REJECT:拒绝通过,必要时会给出提示
  • LOG:记录日志信息,然后传给下一条规则继续匹配

单词:
-[root@moban6 ~]# iptables -t nat -L -nv
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

  • policy:规则
  • source:源(src)
  • destination:目标(dest)
  • out:从那个网卡出去
  • in:从哪个网卡进来

常见选项:

  1. 增加新的规则(链下面已有好多规则)
    -A: 再链的末尾追加一条规则
    -I: 再链的开头(或指定序号)插入一条规则
    例:iptables -I INPUT

  2. 查看规则列表
    -L: 列出所有的规则条目
    -n: 以数字形式显示地址,端口等信息
    -v: 以更详细的方式显示规则信息
    –line-numbers: 查看规则是,显示规则的序号. --line 与之同效
    例:iptables -L -nv

  3. 删除清空规则(iptables stop : 指所有链还原成默认允许通过状态)
    -D: 删除链内指定序号(或内容)的一条规则
    -F: 清空所以的规则(细节规则,链下面的具体的规则)不清空链规则(默认规则)
    例:iptables -F INPUT(指定链) iptables -D INPUT 2 (指定某一个链的某个规则)

  4. 修改替换规则
    -R: 修改替换规则
    例:iptables -R INPUT 1 -p icmp -j ACCEPT

  5. 设置默认链规则(修改时,优先在相应链下面给自己设置允许,然后DROP。)
    -P:为指定的链设置默认规则
    例:iptables -P FORWARD DROP(指定forward默认关闭,这是链默认规则,其下面可以添加允许)

  6. 对数据包处理
    -j:对数据包的处理。ACCEPT/DROP
    例:iptables -j DROP

  7. 模块
    -m 附加模块

规则的匹配类型

  1. 通用匹配:可直接使用,不依赖与其它条件或扩展,包括网络协议,IP地址,网络接口等条件
  2. 隐含匹配:要求以特定的协议匹配作为前提,包含端口,TCP标记,ICMP类型等条件
  3. 显示匹配:要求以-m 扩展模块 的形式明确指出类型,包括多端口,MAC地址,IP范围,数据包等条件

通用匹配

  • 协议匹配: -p 协议名 -p icmp
  • 地址匹配: -s 源地址 -d 目标地址
  • 接口匹配: -i 入站网卡 -o 出站网卡

例:(NAT模式,入网:源ip就是网关)
iptables -I INPUT -s 192.168.200.1 -d 192.168.200.164 -p tcp --dport 22 -j ACCEPT
iptables -I OUTPUT -s 192.168.200.164 -d 192.168.200.1 -p tcp --sport 22 -j ACCEPT

隐含匹配(基于上面协议)

  • 端口匹配: --sport 源端口 --dport 目标端口
  • TCP 标记匹配: --tcp-flags 检查范围 被设置的标记
  • ICMP类型匹配: --icmp-type ICMP类型(ping)
    • 常见的icmp:
      • 8 Echo request --回应请求(Ping请求) --icmp-type 8
      • 0 Echo Reply --回显应答(Ping应答) --icmp-type 0
      • 3 错误回显 --icmp-type 3
      • 获取帮助: iptables -p icmp -h
        例:iptables -I FORWARD ! -p icmp -j DROP (除了icmp协议其他都丢弃)

显示匹配

  • 多端口匹配: -m multiport --sports 源端口列表;-m multiport --dports 目的端口列表
    例:iptables -I INPUT -p tcp -m multiport --dports 22,33,44,80,123 -j ACCEPT
  • IP范围匹配: -m iprange --src-range IP 范围
    例:iptables -I INPUT -p tcp -m iprange --src-range 192.168.100.100-192.168.200.100 -j ACCEPT
  • MAC地址匹配: -m mac --mac-source MAC 地址
    例:iptables -I INPUT -p tcp -m mac --mac-source 00:0c:29:c2:83:32 -j ACCEPT
  • 状态匹配: -m state --state 连接状态
    例:iptables -I INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    • 常见的连接状态:
      • NEW: 新连接,与任何连接无关
      • ESTABLISHED: 响应请求或已建立连接
      • RELATED: 与已连接有相关性的.如FTP数据连接

简单解释:

iptables -I INPUT -p icmp -j DROP
iptables -t filter -A INPUT -p tcp -j ACCEPT -t nst
iptables -L -nv #查防火墙规则 非常具体 -L:具体 -n:很具体 -v:非常具体 默认看filter表
数据包的目标ip不是网关自己,就会进入FORWARD进行转发,如果IP是网关自己,就会进入INPUT

#默认就是看filter表(input output forward这三个链)
[root@moban6 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
#看nat表,他的OUTPUT和filter中的相通的,所以,我们只需修改filter中的OUTPUT
[root@moban6 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

例:NAT模式下:限制filter链全部DROP 但是,Xshell保持连接,并且不断

[root@moban6 ~]# iptables -I INPUT -s 192.168.200.1 -d 192.168.200.164 -p tcp --dport 22 -j ACCEPT
[root@moban6 ~]# iptables -I OUTPUT -s 192.168.200.164 -d 192.168.200.1 -p tcp --sport 22 -j ACCEPT
[root@moban6 ~]# iptables -P INPUT DROP
[root@moban6 ~]# iptables -P OUTPUT DROP
[root@moban6 ~]# iptables -P FORWARD DROP
[root@moban6 ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.200.1        192.168.200.164     tcp dpt:ssh 

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.200.164      192.168.200.1       tcp spt:ssh 

实验:在内网,通过防火墙,让其他两台互通

准备:
一个服务器iptables01,一个网卡 200网段 NAT模式
一个服务器iptables02,两个网卡 100网段和200网段
一个服务器iptables03,一个网卡 100网段 仅主机模式
要求:通过iptables02实现01ping通03,但03不能ping通01

iptables01.png-48kB

iptables02.png-63.4kB

iptables03.png-48.1kB

iptables04.png-92.1kB

[root@iptables02 ~]# vim /etc/sysctl.conf 
 7 net.ipv4.ip_forward = 0 #0改成1,开启forward转发数据包
#即时生效
[root@iptables02 ~]# sysctl -p
#ping通了,但是此时反过来也能ping通,继续修改防火墙
[root@iptables01 ~]# ping -c 2 192.168.100.222
PING 192.168.100.222 (192.168.100.222) 56(84) bytes of data.
64 bytes from 192.168.100.222: icmp_seq=1 ttl=63 time=0.352 ms
64 bytes from 192.168.100.222: icmp_seq=2 ttl=63 time=0.451 ms

--- 192.168.100.222 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.352/0.401/0.451/0.053 ms

## 先给自己的Xshell设置连接防止掉线
[root@iptables02 ~]# iptables -I INPUT -s 192.168.200.1 -d 192.168.200.200 -p tcp --dport 22 -j ACCEPT
[root@iptables02 ~]# iptables -I OUTPUT -s 192.168.200.200 -d 192.168.200.1 -p tcp --sport 22 -j ACCEPT
#关闭防火墙
[root@iptables02 ~]# iptables -P INPUT DROP
[root@iptables02 ~]# iptables -P OUTPUT DROP
[root@iptables02 ~]# iptables -P FORWARD DROP
#查看状态
[root@iptables02 ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.200.1        192.168.200.200     tcp dpt:ssh 

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.200.200      192.168.200.1       tcp spt:ssh 

#实现01和互通,继续修改
[root@iptables02 ~]# iptables -A FORWARD -s 192.168.100.222 -d 192.168.200.111 -p icmp  -j ACCEPT
[root@iptables02 ~]# iptables -A FORWARD -s 192.168.200.111 -d 192.168.100.222 -p icmp  -j ACCEPT
#实现单通
#01ping03 做请求 --icmp-type 8
[root@iptables02 ~]# iptables -A FORWARD -s 192.168.100.222 -d 192.168.200.111 -p icmp --icmp-type 8 -j ACCEPT
#针对上面的请求,03对01的回显应答  --icmp-type 0
[root@iptables02 ~]# iptables -A FORWARD -s 192.168.100.222 -d 192.168.200.111 -p icmp --icmp-type 0 -j ACCEPT

SNAT

  • 准备:三台服务器,如上面一样,但是,唯一不同的是03服务器没有了网关,这样相当于一个外网,一个内网。
  • 要求:01内网,03外网,01ping通03.
#SNAT模式能进就能出,不用再次设置-d 192.168.200.111 -j DNAT 
[root@iptables02 ~]# iptables -t nat -I POSTROUTING -s 192.168.200.111 -o eth1 -j SNAT --to-source 192.168.100.100
#
[root@iptables02 ~]# iptables -I FORWARD -s 192.168.200.111 -j ACCEPT
[root@iptables02 ~]# iptables -I FORWARD -d 192.168.200.111 -j ACCEPT

DNAT

  • 准备:三台服务器,如上面一样,但是,唯一不同的是03服务器没有了网关,这样相当于一个外网,一个内网。
  • 要求:01内网,03外网,03ping通01.
#首先01服务器安装nginx
#然后03 做本地映射,vim /etc/hosts===》 192.168.100.200 www.why.com
[root@iptables02 ~]# iptables -t nat -I PREROUTING -s 192.168.100.222 -d 192.168.200.111 -j DNAT --to-destination 192.168.100.200
[root@iptables02 ~]# iptables -t nat -I PREROUTING  -d 192.168.200.111 -i eth1 -j DNAT --to-destination 192.168.100.100

企业防火墙脚本编成与规范

网关型防火墙脚本

  • 定义基本标量,便于脚本维护,重用
  • 加载必要的内核模块,将频繁用到的模块载入到内核
  • 调整/proc参数,Linux内核控制及调优
  • 具体防火墙规则,按表、链分别设置规则,包括默认策略
[root@why ~]# vim firewall.sh
#!/bin/bash
# Filename: firewall.sh
# Author: Amber
# Date: 2019-05-06
# 定义基本变量
INET_IF="eth0"
INET_IP="192.168.1.108"
LAN_IF="eth1"
LAN_IP="192.168.100.1"
LAN_NET="192.168.100.0/24"
LAN_WWW_IP="192.168.100.100"
IPT="/sbin/iptables"
MOD="/sbin/modprobe"
CTL="/sbin/sysctl"
# 加载必要的内核模块
$MOD ip_tables
$MOD ip_conntrack
$MOD ipt_REJECT
$MOD ipt_LOG
$MOD ipt_iprange
$MOD xt_state
$MOD xt_multiport
$MOD XT_mac
$MOD ip_nat_ftp
$MOD ip_cnntrack_ftp

#Linux内核控制及调优
$CTL -w net.ipv4.ip_forward=1
$CTL -w net.ipv4.ip_default_ttl=128
$CTL -w net.ipv4.icmp_echo_ignore_all=1
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts=1
$CTL -w net.ipv4.tcp_syncookies=1
$CTL -w net.ipv4.tcp_syn_retries=3
$CTL -w net.ipv4.tcp_synack_retries=3
$CTL -w net.ipv4.fin_timeout=60
$CTL -w net.ipv4.tcp_max_syn_backlog=3200

#具体的防火墙规则
#清空原有的规则
$IPT -t filter -X
$IPT -t nat -X
$IPT -t filter -F
$IPT -t nat -F
#设置默认策略 
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
#其他具体规则
$IPT -I INPUT -p tcp --dport 22 -j ACCEPT
$IPT -t nat -A POSTROUTING -s $LAN_NAT -o $INET_IF -j SNAT --to-source $INET_IP
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP

iptables05.png-126.9kB

主机型防火墙脚本

  • 将OUTPUT链的默认策略设置为允许,不添加其他规则
  • 将INPUT链的默认策略设置拒绝,只放行对Web服务的访问,以及响应本机访问请求的数据包
[root@why ~]# vim firewall_host.sh
#!/bin/bash
# Filename: firewall_host.sh
# Author: Amber
# Date: 2019-05-06
# 定义基本变量
LAN_NET="192.168.100.0/24"
LAN_IF="eth1"
LAN_WWW_IP="192.168.100.100"
IPT="/sbin/iptables"
MOD="/sbin/modprobe"
CTL="/sbin/sysctl"
# 加载必要的内核模块
$MOD ip_tables
$MOD ip_conntrack
$MOD ipt_REJECT
$MOD ipt_LOG
$MOD ipt_iprange
$MOD xt_state
$MOD xt_multiport
$MOD XT_mac
$MOD ip_nat_ftp
$MOD ip_cnntrack_ftp

#Linux内核控制及调优
$CTL -w net.ipv4.ip_forward=1
$CTL -w net.ipv4.ip_default_ttl=128
$CTL -w net.ipv4.icmp_echo_ignore_all=1
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts=1
$CTL -w net.ipv4.tcp_syncookies=1
$CTL -w net.ipv4.tcp_syn_retries=3
$CTL -w net.ipv4.tcp_synack_retries=3
$CTL -w net.ipv4.fin_timeout=60
$CTL -w net.ipv4.tcp_max_syn_backlog=3200

#具体的防火墙规则
#清空原有的规则
$IPT -t filter -X
$IPT -t filter -F
#设置默认策略 
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
#其他具体规则
$IPT -A INPUT -m multiport -p tcp --dport 22,80 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

防火墙备份与还原

iptables06.png-296.1kB

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值