标签:
常见于linux系统下的应用层防火墙工具。
系统管理人员:基于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
NetFilter是Linux操作系统核心层内部的一个数据包处理模块
数据包在内核Netfilter中的五个挂载点其中包括:PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。
组成部分:四张表+五条链(Hook point) + 规则
四张表:filter表、nat表、mangle表、raw表
filter表:访问控制、规则匹配
nat表:地址转发
mangle表:修改数据包,改变包头中内容(TTL、TOS、MARK),需要交换机支持
raw表:数据包状态跟踪和分析
五条链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
数据包访问控制:ACCEPT、DROP(无返回信息)、REJECT(有返回信息)
数据包改写:SNAT、DNAT
信息记录:LOG
规则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的规则设置
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
方法一:
为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规则:
DENY规则:
#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这个开启启动的配置文件
分类 | 功能 | 作用链 |
---|---|---|
SNAT | 源地址转换 | 出口 POSTROUTING |
DNAT | 目标地址转换 | 进口 PREROUTING |
// 准备工作
// 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
// 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
作用:用于限制每一个客户端ip的并发连接数。
参数:-connlimit-above n 限制并发个数
#iptables -I INPUT -p tcp -syn -dport 80 -m connlimit -connlimit-above 100 -j REJECT
作用:限速,控制流量
// 每小时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包访问
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?
标签:
原文地址:http://blog.csdn.net/renwotao2009/article/details/51225359