码迷,mamicode.com
首页 > 系统相关 > 详细

Linux下使用iptables

时间:2016-04-29 19:41:54      阅读:376      评论:0      收藏:0      [点我收藏+]

标签:

关于iptables

什么是iptables?

常见于linux系统下的应用层防火墙工具。

使用iptables的人员

系统管理人员:基于iptables的NAT的包转发,linux主机安全策略
网络工程人员:局域网网络控制或对员工上网行为的控制,机房中用来替换昂贵的网络设备
安全人员:利用iptables内核或策略做安全设置

场景

模拟用iptables控制并发的http访问
机器分配:

机器类型 IP地址 主机名
server [IP2]10.10.163.233 Jeson233
client [IP1]10.10.163.232 Jeson232

场景描述:
IP1(通过ab命令进行压力测试)->IP2(http服务)

[root@Jeason232 ~]# ab -n 1000000 -c 40 http://10.10.163.233/test.txt

// 服务器设置iptables后,这里显示有拒绝访问的情况
// 查看服务器是否运行
[root@Jeason233 ~]#/etc/init.d/httpd status
// 查看服务器负载
#w 
// 查看服务器并发情况
#netstat -an |grep 80|grep 10.10.163.232|grep EST -c
// 设置iptables
#iptables -I INPUT -p tcp --dport 80 -s 10.10.163.232 -m connlimit --connlimit-above 10 -j REJECT

学习iptables的意义

  1. 使用iptables搭建一套符合企业实际使用的防火墙规则
  2. 使用iptables进行防攻击
  3. 使用iptables进行数据包转发
  4. 明白iptables的强大及实际使用意义

Netfilter

什么是Netfilter

NetFilter是Linux操作系统核心层内部的一个数据包处理模块

什么是Hook point

数据包在内核Netfilter中的五个挂载点其中包括:PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。

Netfilter与iptables

技术分享

iptables规则组成

组成部分:四张表+五条链(Hook point) + 规则

四张表:filter表、nat表、mangle表、raw表
filter表:访问控制、规则匹配
nat表:地址转发
mangle表:修改数据包,改变包头中内容(TTL、TOS、MARK),需要交换机支持
raw表:数据包状态跟踪和分析

五条链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

技术分享

iptables规则组成

数据包访问控制:ACCEPT、DROP(无返回信息)、REJECT(有返回信息)
数据包改写:SNAT、DNAT
信息记录:LOG
技术分享

iptables配置

场景一

规则1、对所有的地址开放本机的tcp(80、22、10-21)端口的访问
规则2、允许对所有的地址开放本机的基于ICMP协议的数据包访问
规则3、其他未被允许的端口禁止访问

// 查看iptables版本
#iptables -v
// 查看iptables中已经设置的规则
#iptables -L
// 让主机名等不显示出来
#iptables -nL
// 清除iptables之前设置的规则
#iptables -F

// iptables设置规则1
#iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#iptables -I INPUT -p tcp --dport 22 -j ACCEPT
#iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT

// iptables设置规则2
#iptables -I INPUT -p icmp -j ACCEPT

// iptables设置规则3
#iptables -A INPUT -j REJECT

// 删除访问80端口的规则,并设置80端口不可访问
#iptables -D INPUT -p tcp --dport 80 -j ACCEPT
#iptables -I INPUT -p tcp --dport 80 -j REJECT

iptables配置存在的问题
1 本机无法访问本机
2 本机无妨访问其他主机

// 修改上面规则设置
#iptables -I INPUT -i lo -j ACCEPT
#ipatables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

在场景一基础上,只允许10.103.188.233访问本机的http服务

#iptables -D INPUT -p tcp --dport 80 -j ACCEPT
#iptables -nL
#iptables -I INPUT -p tcp -s 10.10.188.233 --dport 80 -j ACCEPT

场景二

1、ftp主动模式下iptables的规则设置
2、ftp被动模式下iptables的规则设置

ftp主动模式下iptables的规则设置

技术分享
1、ftp两节的默认模式为被动模式
2、vsftpd服务支持主动模式需要注意配置选项

port_enable=yes
connect_from_port_20=YES

3、iptables需要开启21端口的访问权限

#iptables -F
#iptables -I INPUT -p tcp -dport 21 -j ACCEPT
#iptables -I INPUT -p tcp -dport 22 -j ACCEPT
#iptables -I INPUT -p icmp -j ACCEPT
#iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -j REJECT
#iptables -nL

ftp被动模式下iptables的规则设置

技术分享
方法一:
为vsftpd指定数据端口,并且通过iptables开放相应需要传输的端口端

#iptables -I INPUT -p tcp --dport 21 -j ACCEPT
#vim /etc/vsftpd/vsftpd.conf
pasv_min_port=50000
pasv_max_port=60000
#iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT

方法二:
使用连接追踪模块

#iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -I INPUT -p tcp --dport 21 -j ACCEPT
// 1 临时加载 nf_conntrack_ftp模块
#modprobe nf_conntrack_ftp 
// 2 永久加载nf_conntrack_ftp模块
#vim /etc/sysconfig/iptables-config 
IPTABLES_MODULES="nf_conntrack_ftp"

场景三

1、员工在公司内部(10.10.155.0/24,10.10.188.0/24)能访问服务器上的任何服务
2、当员工出差例如在上海,通过VPN连接到公司
外网(员工)—拨号到—->VPN服务器—–>内容FTP、SAMBA、NFS、SSH
3、公司有一个门户网站需要允许公网访问

常见端口梳理:
常见允许外网访问的服务

服务 协议 端口
网站 www http 80/tcp
https 443/tcp
邮件mail smtp 25/tcp
smtps 465/tcp
pop3 110/tcp
pop3s 995/tcp
imap 143/tcp

一些常见不允许外网访问的服务

服务 协议 端口
文件服务器 NFS 123/udp
SAMBA 137,138,139/tcp 445/tcp
FTP 20/tcp,21/tcp
远程管理 ssh 22/tcp
数据库 MYSQL 3306/tcp
ORACLE 1521/tcp

配置规则基本思路
ACCEPT规则:

  • 允许本地访问
  • 允许已监听状态数据包通过
  • 允许规则中允许的数据包通过(注意开放ssh远程管理端口)

DENY规则:

  • 拒绝未被允许的数据包
  • iptables规则保存成配置文件,防止宕机或误删除。
#iptables -F
#iptables -I INPUT -i lo -j ACCEPT
#iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -L
#iptables -A INPUT -s 10.10.155.0/24 -j ACCEPT
#iptables -A INPUT -s 10.10.188.0/24 -j ACCEPT

#iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#iptables -A INPUT -p tcp --dport 1723 -j ACCEPT // VPN
#iptables -I INPUT -p icmp -j ACCEPT

#iptables -A INPUT -j REJECT
// 保存iptables设置方法一
// 保存设置到配置文件中(一般为/etc/sysconfig/iptables)
#/etc/init.d/iptables save
#cat /etc/sysconfig/iptables

// 设置iptables服务开机启动
chkconfig iptables on
// 保存iptables设置方法二
// 把iptables执行的命令保存成shell脚本,如:/opt/iptables_set.sh
// 把/bin/sh /opt/iptables_set.sh 保存到/etc/rc.local这个开启启动的配置文件

iptables防火墙nat表规则配置

分类 功能 作用链
SNAT 源地址转换 出口 POSTROUTING
DNAT 目标地址转换 进口 PREROUTING

SNAT场景模拟

技术分享

// 准备工作
// Server: 10.10.188.173上安装http服务,并在web目录上放置hello.txt文件
// NAT Server: 两个网卡:10.10.188.232和10.10.177.232
// Client: 10.10.177.233
// NAT Server:10.10.177.232
// 设置内核参数允许转发
#vim /etc/sysctl.conf
net.ipv4.ip_forward=1 // 开启转发
// 执行内核参数
#sysctl -p
// 查看转发设置是否生效
#sysctl -a|grep ip_forward
// 设置SNAT转发
#iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232
#iptables -t nat -L
// Client: 10.10.177.233
// 确保client的网关为10.10.177.232
// 1 /etc/sysconfig/network中设置GATWAY=10.10.177.232
// 2 route add 0.0.0.0 gw 10.10.177.232

// 进行测试
#curl http://10.10.188.173/hello.txt

DNAT场景模拟

技术分享

// Nat Server: 10.10.177.232和10.10.188.232
// 确定未开启80端口
// 清除nat表中转发规则

#iptables -t nat -A PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.233:80
// Server:10.10.177.233 
// 确保开启web服务
// Client:10.10.188.173
#curl http://10.10.188.232/hello.txt

iptables防火墙防CC攻击

connlimit模块

作用:用于限制每一个客户端ip的并发连接数。
参数:-connlimit-above n 限制并发个数

#iptables -I INPUT -p tcp -syn -dport 80 -m connlimit -connlimit-above 100 -j REJECT

Limit模块

作用:限速,控制流量

// 每小时3个包
#iptables -A INPUT -m limit --limit 3/hour 

// --limit-burst 10 超过10个流量按照每分钟1个
#iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
#iptables -A INPUT -p icmp -j DROP

// 使用其他机器的测试结果:超过10个一分钟允许1个icmp包访问

iptables实例脚本

1、系统化的介绍iptables规则配置
2、相应介绍iptables中的其他模块
3、防攻击策略的补充

// 实例脚本:example_iptables.sh

/bin/sh
# 加载模块
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

# 清除原iptables规则
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

# iptables配置
iptables -P INPUT DROP #如果满足以下规则放行,不满足则丢弃
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp -m multiport --dports 110,80,25 -j ACCEPT
iptables -A INPUT -p tcp -s 10.10.0.0/24 --dport 139 -j ACCEPT

iptables -A INPUT -i eth1 -p udp -m multiports --dports 53 -j ACCEPT

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT

iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP

iptables -A INPUT -p icmp -j DROP

iptables -t nat -A POSTROUTING -o ppp0 -s 10.10.0.0/24 -j MASUERADE

iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT


iptables -P FORWARD DROP
iptables -A FORWARD -p tcp -s 10.10.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPT
iptables -A FORWARD -p udp -s 10.10.0.0/24 --dport 53 -j ACCEPT
iptables -A FORWARD -p gre -s 10.10.0.0/24 -j ACCEPT
iptables -A FORWARD -p icmp -s 10.10.0.0/24 -j ACCEPT

# 上班时间禁止上qq
iptables -A FORWARD -m state --state ESTABLISHED,RELATE -j ACCEPT
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "qq.com" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "qq.com" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "qq.com" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
# 防止上关于某岛国动作电影的网站等
iptables -I FORWARD -s 10.10.0.0/24 -m string --string "ay2000.net" -j DROP
iptables -I FORWARD -s 10.10.0.0/24 -m string --string "eroticism" -j DROP

sysctl -w net.ipv4.ip_forward=1 &>/dev/null
sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null

# 允许本机完全权限
iptables -I INPUT -s 10.10.0.50 -j ACCEPT
iptables -I INPUT -s 10.10.0.50 -j ACCEPT

参考资料

用iptables搭建一套强大的安全防护盾
Netfilter&IPtables(一)
netfilter/iptables 简介
(一)洞悉linux下的Netfilter&iptables:什么是Netfilter?

Linux下使用iptables

标签:

原文地址:http://blog.csdn.net/renwotao2009/article/details/51225359

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!