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:从哪个网卡进来
常见选项:
-
增加新的规则(链下面已有好多规则)
-A: 再链的末尾追加一条规则
-I: 再链的开头(或指定序号)插入一条规则
例:iptables -I INPUT -
查看规则列表
-L: 列出所有的规则条目
-n: 以数字形式显示地址,端口等信息
-v: 以更详细的方式显示规则信息
–line-numbers: 查看规则是,显示规则的序号. --line 与之同效
例:iptables -L -nv -
删除清空规则(iptables stop : 指所有链还原成默认允许通过状态)
-D: 删除链内指定序号(或内容)的一条规则
-F: 清空所以的规则(细节规则,链下面的具体的规则)不清空链规则(默认规则)
例:iptables -F INPUT(指定链) iptables -D INPUT 2 (指定某一个链的某个规则) -
修改替换规则
-R: 修改替换规则
例:iptables -R INPUT 1 -p icmp -j ACCEPT -
设置默认链规则(修改时,优先在相应链下面给自己设置允许,然后DROP。)
-P:为指定的链设置默认规则
例:iptables -P FORWARD DROP(指定forward默认关闭,这是链默认规则,其下面可以添加允许) -
对数据包处理
-j:对数据包的处理。ACCEPT/DROP
例:iptables -j DROP -
模块
-m 附加模块
规则的匹配类型
- 通用匹配:可直接使用,不依赖与其它条件或扩展,包括网络协议,IP地址,网络接口等条件
- 隐含匹配:要求以特定的协议匹配作为前提,包含端口,TCP标记,ICMP类型等条件
- 显示匹配:要求以-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协议其他都丢弃)
- 常见的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




[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

主机型防火墙脚本
- 将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
防火墙备份与还原

886

被折叠的 条评论
为什么被折叠?



