iptables防火墙

防火墙

防火墙

 

iptables防火墙(一)

 

防火墙概述

1、概念与作用 
网络中的防火墙,是一种将内部网络和外部网络分开的方法,是一种隔离技术。防火墙 
在内网与外网通信时进行访问控制,依据所设置的规则对数据包作出判断,最大限度地阻止 
网络中的黑客破坏企业网络,从而加强企业网络安全。

2、防火墙的分类 
(1)硬件防火墙:如思科的 ASA 防火墙,H3C 的 Sepath 防火墙等。 
(2)软件防火墙:如 iptables 等 
按架设的位置,可以分为主机防火墙、网关防火墙

3、iptables 防火墙 
Linux 操作系统中默认内置一个软件防火墙,即 iptables 防火墙 
(1)netfilter 
位于 Linux 内核中的包过滤功能体系,称为 Linux 防火墙的“内核态” 
(2)iptables 
位于/sbin/iptables,用来管理防火墙规则的工具,称为 Linux 防火墙的“用户态”

4、包过滤的工作层次 
主要是网络层,针对 IP 数据包,体现在对包内的 IP 地址、端口等信息的处理上。

 

iptables规则链

1、规则链 
规则的作用:对数据包进行过滤或处理 
链的作用:容纳各种防火墙规则 
链的分类依据:处理数据包的不同时机

2、默认包括 5 种规则链 
INPUT:处理 入站数据包 
OUTPUT:处理 出站数据包 
FORWARD:处理 转发数据包 
POSTROUTING:在进行 路由选择后处理数据包 
PREROUTING:在进行 路由选择前处理数据包

 

iptables规则表

1、规则表 
表的作用:容纳各种规则链 
表的划分依据:防火墙规则的动作相似

2、默认包括 4 个规则表 
raw 表:确定是否对该数据包进行状态 跟踪 
mangle 表:为数据包设置 标记 
nat 表: 修改数据包中的源、目标 IP 地址或端口 
filter 表:确定是否被放行该数据包(过滤)

3、链表结构关系图

image_1cs6o6hcm11jkvmbq55du81h5q9.png-279.7kB

 

iptables匹配流程

1、规则表之间的顺序: 
raw→mangle→nat→filter

2、规则链之间的顺序: 
入站:PREROUTING→INPUT 
出站:OUTPUT→POSTROUTING 
转发:PREROUTING→FORWARD→POSTROUTING

3、规则链内的匹配顺序 
·按顺序依次检查,匹配即停止(LOG 策略例外) 
·若找不到相匹配规则,按该链的默认策略处理

 

 

iptables命令

1、语法构成 
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

注意事项: 
不指定表名时,默认指 filter 表 
iptables -t nat -L --->看nat表 
iptables -F --->只是清空链规则 
不指定链名时,默认指表内的所有链 
除非设置链的默认策略,否则必须指定匹配条件 
选项、链名、控制类型使用大写字母,其余均为小写

2、数据包的常见控制类型 
ACCEPT:允许通过 
DROP:直接丢弃,不给出任何回应 
REJECT:拒绝通过,必要时会给出提示 
LOG:记录日志信息,然后传给下一条规则继续匹配

常用选项 
(1)增加新的规则 
-A:在链的末尾追加一条规则 
-I:在链的开头(或指定序号)插入一条规则 
-p icmp --->-p指定协议,icmp是ping的协议

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

(3)删除、清空规则 
-D:删除链内指定序号(或内容)的一条规则 
-F:清空所有的规则

(4)修改、替换规则 
-R:修改替换规则

(5)设置默认规则 
-P:为指定的链设置默认规则

需要注意的是,若要设置 filter 表中 INPUT 链或者 OUTPUT 链的默认规则为 DROP 时, 
要先设置 tcp 协议 22 端口(ssh 远程连接)为 ACCEPT,否则通过远程操控的主机将断开连 
接,若在真实生产环境中,需要到服务器所在机房重新设置才可以,造成不必要的麻烦。

 

规则的匹配类型

1、通用匹配 
可直接使用,不依赖与其他条件或扩展 
包括网络协议、IP 地址、网络接口等条件

2、隐含匹配 
要求以特定的协议匹配作为前提 
包含端口、TCP 标记、ICMP 类型等条件

3、显式匹配 
要求以“-m 扩展模块”的形式明确指出类型 
包括多端口、MAC 地址、IP 范围、数据包状态等条件

 

常用管理选项汇总表

image_1cs6oq7npimqfs7ikpet66eqcb.png-54.9kB

 

通用匹配

常见的通用匹配条件: 
1、协议匹配:-p 协议名

2、地址匹配:-s 源地址、-d 目的地址

3、接口匹配:-i 入站网卡、-o 出站网卡

 

规则链都DROP的情况下SHELL连接不掉线

把所有规则链都DROP的情况下SHELL连接不掉线

SHELL走的是INPUT和OUTPUT规则链

iptables -I INPUT -s 192.168.200.1 -d 192.168.200.69 -p tcp --dport 22 -j ACCEPT

iptables -I OUTPUT -s 192.168.200.69 -d 192.168.200.1 -p tcp --sport 22 -j ACCEPT

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP

iptables -L -nv

image_1cso2a66h1g1g1fqv1c0umvn118319.png-102.6kB

 

拿一台服务器充当网关,让iptables1和iptables3主机能跨网段ping通

 

iptables1主机网卡配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0

 
  1. DEVICE=eth0
  2. TYPE=Ethernet
  3. ONBOOT=yes
  4. NM_CONTROLLED=yes
  5. BOOTPROTO=none
  6. IPADDR=192.168.200.69
  7. NETMASK=255.255.255.0
  8. GATEWAY=192.168.200.100
 

网关服务器配置文件及IP地址

需要2块网卡在不同网段

 
第一块网卡配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0

 
  1. DEVICE=eth0
  2. TYPE=Ethernet
  3. ONBOOT=yes
  4. NM_CONTROLLED=yes
  5. BOOTPROTO=none
  6. IPADDR=192.168.200.100
  7. NETMASK=255.255.255.0
 
第一块网卡配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eth1

 
  1. DEVICE=eth1
  2. TYPE=Ethernet
  3. ONBOOT=yes
  4. NM_CONTROLLED=yes
  5. BOOTPROTO=none
  6. IPADDR=192.168.100.100
  7. NETMASK=255.255.255.0
 
IP地址

image_1cso9tc8h8mg1ml1hpf1b2ncb59.png-89.2kB

 

iptables3主机网卡配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0

 
  1. DEVICE=eth0
  2. TYPE=Ethernet
  3. ONBOOT=yes
  4. NM_CONTROLLED=yes
  5. BOOTPROTO=none
  6. IPADDR=192.168.100.166
  7. NETMASK=255.255.255.0
  8. GATEWAY=192.168.100.100
 

测试阶段

 
iptables1主机ping网关服务器

这里为何能跨网段ping通192.168.100.100是因为网关服务器不需要转发只在本地就有这个IP

image_1csoa4ink17f7n7ebdleqnlfk26.png-65.9kB

image_1csoa8nr61h6n1lfu1oto1ais1o4r4f.png-10kB

 
跨网段ping通iptables3

开启网关服务器ipv4地址网卡配置之间的转换

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1   --->默认是0关闭状态

sysctl -p --->即时生效

image_1csoadj1c24rkg21ipqhbr1d634s.png-44.4kB

image_1csoae6vjcvj1n9p1u9l5gg7rg5p.png-52.5kB

 
关闭除了FORWARD规则链测试

因为Xshell是从input端口进来的所以这里在虚拟机上测试,而ping只是通过网关服务器转发(FORWARD)给主机3

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -L -nv

image_1csoako5q1tdbl2346d18tijc966.png-14.1kB

image_1csoaok0rqakocl1i7vu6od0s6j.png-37kB

 

iptables防火墙(二)

 

隐含匹配

常见的隐含匹配条件: 
1、端口匹配:--sport 源端口、--dport 目的端口

2、TCP 标记匹配:--tcp-flags 检查范围 被设置的标记

3、ICMP 类型匹配:--icmp-type ICMP 类型 
常见的 icmp 类型 
8 Echo request——回显请求(Ping 请求) 
0 Echo Reply——回显应答(Ping 应答) 
3 错误回显

获取帮助:iptables -p icmp -h

 

显式匹配

常用的显示匹配条件: 
1、多端口匹配:-m multiport --sports 源端口列表、-m multiport --dports 目的端口列表

2、IP 范围匹配:-m iprange --src-range IP 范围

3、MAC 地址匹配:-m mac --mac-source MAC 地址

4、状态匹配:-m state --state 连接状态 
常见的连接状态: 
NEW:新连接,与任何连接无关 
ESTABLISHED:响应请求或已建立连接的 
RELATED:与已连接有相关性的,如 FTP 数据连接

 

 

常见匹配条件汇总表

image_1cs6p63si1qp61qve1ur2lrh115qd.png-76.8kB

 
 

iptables防火墙应用

 

SNAT策略

 

SNAT测试阶段

iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o eth1 -j SNAT --to-source 192.168.100.100

image_1csoknuem15jrmbdp1s14j11jde9.png-76.1kB

image_1csokonnated1nprt1giga1b23m.png-88.4kB

image_1csokp0u41km81j0p299ne5apa13.png-28.1kB

 

DNAT策略

 

DNAT测试阶段

 
首先安装一个Nginx在iptables1上,Nginx配置文件如下(安装过程忽略)
 
  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10. server {
  11. listen 8080;
  12. server_name sl.yunjisuan.com;
  13. location / {
  14. root html;
  15. index index.html index.htm;
  16. }
  17. error_page 500 502 503 504 /50x.html;
  18. location = /50x.html {
  19. root html;
  20. }
  21. }
  22. }

cd /usr/local/nginx/html/

echo "`hostname -I` sl.yunjisuan.com" > index.html

echo "`hostname -I` sl.yunjisuan.com" >> /etc/hosts

/usr/local/nginx/sbin/nginx

curl sl.yunjisuan.com:8080 --->默认访问是80,配置文件修改的是8080所以需要指定端口

image_1csolsigp1js6hjb1f8if8r1lstp.png-51.2kB

 
网关服务器网卡配置文件及IP地址

image_1csom67ku1tsj1o7t7mi1q114om16.png-44.5kB

 
网关服务器DNAT规则

iptables -t nat -A PREROUTING -i eth1 -d 192.168.100.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.200.69:8080

image_1csomv3jrigcbf8fge1k8i69s20.png-86kB

 
iptables3上配置

echo "192.168.100.100 sl.yunjisuan.com" >> /etc/hosts --->映射网关服务器

image_1csomqbra2rs6ql1vte1fll1v4a1j.png-57kB

 
最终测试阶段

image_1cson13a5avo1liodf71l58no42t.png-17.7kB

 

iptables 防火墙规则的备份与还原

设置完防火墙规则后,可备份规则到文件中,以便日后进行还原,或以备份规则为依据 
编写防火墙脚本

1、导出(备份)规则 
iptables-save 工具

2、导入(还原)规则 
iptables-restore 工具

重定向出的文件也可以是任意自定义的文件,若将规则保存到/etc/sysconfig/iptables 中, 
iptables 启动时自动还原规则。

 

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

1、“网关型”防火墙脚本 
好的防火墙脚本要包括以下部分: 
·定义基本变量,便于脚本的维护、重用 
·加载必要的内核模块,将频繁用到的模块载入到内核 
·调整/proc 参数,Linux 内核控制及调优 
·具体的防火墙规则,按表、链分别设置规则,包括默认策略

(1)定义基本变量 
便于脚本的维护、重用

 
  1. #!/bin/bash
  2. INET_IF=”eth0
  3. INET_IP=”192.168.1.108
  4. LAN_IF=”eth1
  5. LAN_IP=”192.168.100.1
  6. LAN_NET=”192.168.100.0/24
  7. LAN_WWW_IP=”192.168.100.100
  8. IPT=”/sbin/iptables
  9. MOD=”/sbin/modprobe
  10. CTL=”/sbin/sysctl

(2)加载必要的内核模块 
将频繁用到的模块载入内核

 
  1. $MOD ip_tables
  2. $MOD ip_conntrack
  3. $MOD ipt_REJECT
  4. $MOD ipt_LOG
  5. $MOD ipt_iprange
  6. $MOD xt_tcpudp
  7. $MOD xt_state
  8. $MOD xt_multiport
  9. $MOD xt_mac
  10. $MOD ip_nat_ftp 支持 FTP 访问的地址转换
  11. $MOD ip_conntrack_ftp 支持 FTP 访问的连接状态跟踪

(3)调整/proc 参数 
Linux 内核控制及调优

 
  1. $CTL -w net.ipv4.ip_forward=1 开启路由转发功能
  2. $CTL -w net.ipv4.default_ttl=128 默认生存周期
  3. $CTL -w net.ipv4.icmp_echo_ignore_all=1 根本不要响应 echo 包。请不要设置为缺省,它可
  4. 能在你正被利用成为 DoS 攻击的跳板时可能有用
  5. $CTL -w net.ipv4.icmp_echo_ignore_broadcasts=1 ping 子网的子网地址,所有的机器都应该
  6. 予以回应。这可能成为非常好用的拒绝服务攻击工具。设置为 1 来忽略这些子网广播消息
  7. 以下配置为优化 TCP 响应能力
  8. $CTL -w net.ipv4.tcp_syncookies=1 tcp syncookie,默认关闭
  9. $CTL -w net.ipv4.tcp_syn_retries=3 外向 syn 握手重试次数,默认 4
  10. $CTL -w net.ipv4.tcp_synack_retries=3 syn-ack 握手状态重试次数,默认 5,遭受 syn-flood
  11. 击时改为 1 2
  12. $CTL -w net.ipv4.tcp_fin_timeout=60 默认 60tcp fin 状态超时时间
  13. $CTL -w net.ipv4.tcp_max_syn_backlog=3200 syn队列,默认1024,> 1280可能工作不稳定,
  14. 需要修改内核源码参数

(4)具体的防火墙规则 
按表、链分别设置规则,包括默认策略

 
  1. 清空原有规则:
  2. $IPT -t filter -X 删除 filter 表内的用户自定义的链
  3. $IPT -t nat -X
  4. $IPT -t filter -F
  5. $IPT -t nat -F
  6. 设置默认策略:
  7. $IPT -P INPUT DROP
  8. $IPT -p FORWARD DROP
  9. $IPT -P OUTPUT ACCEPT
  10. 其他具体规则:
  11. $IPT -I INPUT -p tcp --dport 22 -j ACCEPT
  12. $IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP
  13. $IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination
  14. $LAN_WWW_IP

示例

image_1cs6q4jer16sm1ou15197i7sge1mu.png-49.5kB

image_1cs6q4rmc1el4kkc1ss01vh22071nb.png-36.9kB

image_1cs6q51j91gt4kkn1v5kaju1ut91no.png-55.8kB

image_1cs6q55qs1rujde9l2p18o91obv1o5.png-63.6kB

2、“主机型”防火墙脚本 
将 OUTPUT 链的默认策略设为允许,不添加其他规则 
将 INPUT 链的默认策略设为拒绝,只放行对 Web 服务的访问,以及响应本机访问请求 
的数据包 
#!/bin/bash

(1)定义基本变量 
IPT=”/sbin/iptables”

(2)调整/proc 参数

(3)设置具体的防火墙规则 
1>删除自定义的链、清空已有规则

 
  1. $IPT -t filter -X
  2. $IPT -t filter -F
  3. 2>定义默认策略
  4. $IPT -P INPUT DROP
  5. $IPT -p FORWARD DROP
  6. $IPT -P OUTPUT ACCEPT
  7. 3>设置 filter 表中的各种规则
  8. $IPT -A INPUT -m multiport -p tcp --dport 22,80 -j ACCEPT
  9. $IPT -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

示例

image_1cs6q876p1h8rvged1u12ahusq1oi.png-42.7kB

image_1cs6q89t637h1elni1g17jb1bi41ov.png-37.3kB

 

image_1cs6q8h9i1uj61sprc5b1rj46m91pp.png-51kB

转载于:https://www.cnblogs.com/linyaonie/p/9993006.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值