标签:提前 process src 辅助ip 用户密码 linux 模块 table 相关
第1章 Iptables 网络安全Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具 Netfilter一个系统的内核模块,通过netfilter内核控制硬件设备 Iptables相当于是一个控制软件 iptables+zebra+squid == 一台硬件防火墙 iptables主要工作在OSI七层的二、三、四层 实现应用层访问控制:nginx WAF实现应用访问控制 |
防火墙通过审查经过的每一个数据包, 判断它是否有相匹配的过滤规则, 根据规则的先后顺序进行一一比较, 直到满足其中的一条规则为止, 然后依据控制机制做出相应的动作. 如果都不满足, 则将数据包丢弃, 从而保护网络的安全。 |
容器:用来包装或装载物品的贮存器(如箱、罐、坛)或者成形或柔软不成形的包覆材料 第一个容器:iptables(表) 第二个容器:表(链) 第三个容器:链(规则) |
1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。 2. 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则。 3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。 4. 防火墙的默认规则是所有规则执行完才执行的。 |
iptables包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度。 |
iptables -L -n -v --line-number -L --- 显示防火墙规则信息,以列表形式显示 -n --- 显示防火墙规则信息,以数字形式显示 -v --- 以更详细的形式显示防火墙规则信息(排错时候有用) --line-number --- 显示规则序号信息 iptables -L --- 以列表显示所有规则信息 iptables -L -n --- 以数字形式显示IP地址和端口号信息 iptables -nL iptables -nL -v --- 显示详细规则信息 iptables -nL --line-number --- 显示规则序号信息 |
iptables -F --- 清空所有规则信息 iptables -X --- 清空所有自定义链信息 iptables -Z --- 清空计数器信息 计数器1:记录规则匹配了多少数据包 计数器2:记录规则匹配了多少流量信息 说明:以上三个清空操作完成,表示防火墙初始化过程完毕 |
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP -t --- 指定表的信息 -A --- 在指定链上,添加规则信息 -p --- 指定协议信息(tcp udp icmp) --dport -- 指定目标端口信息 --sport -- 指定源端口信息 -j -- 对数据包要做什么处理(ACCEPT DROP REJECT) |
恢复连接方式: 01. 重启iptables,/etc/init.d/iptables restart 02. iptables -F 简单粗暴(企业中不推荐) 03. 删除指定有问题规则策略 iptables -t filter -D INPUT -p tcp --dport 22 -j DROP iptables -t filter -D INPUT 1 |
iptables -A INPUT -i eth1 -p tcp --dport 22 -j DROP -i --- 指定流量进入的接口信息(只能应用在INPUT链上) -o --- 指定流量出去的接口信息(只能应用在OUTPUT链上) |
iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 22 -j DROP -s --- 指定源地址或源网段信息 -d --- 指定目标地址或目标网段信息 |
允许172.16.1.9主机可以访问172.16.1.8这个地址上的22端口服务 iptables -A INPUT -s 172.16.1.9 -d 172.16.1.8 -p tcp --dport 22 -j ACCEPT iptables -I INPUT -s 172.16.1.9 -d 172.16.1.8 -p tcp --dport 22 -j ACCEPT -A --- 追加/附加 将新设置的规则放在已有的规则后面 -I --- 插入 将新设置的规则插入到规则列表中(默认放在所有规则最前面) -D --- 删除 删除指定规则信息 -R --- 替换/修改 修改相应规则策略 |
iptables -A INPUT -i eth0 -s 10.0.0.1 -d 10.0.0.8 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -i eth0 -s 0.0.0.0/0 -d 10.0.0.8 -p tcp --dport 22 -j DROP |
iptables -A INPUT -i eth0 ! -s 10.0.0.1 -d 10.0.0.8 -p tcp --dport 22 -j DROP (centos6) iptables -A INPUT -i eth0 -s !10.0.0.1 -d 10.0.0.8 -p tcp --dport 22 -j DROP (centos5) ! --- 表示取反,或者排除 |
iptables -A INPUT -i eth0 -s 10.0.0.1 -p tcp --dport 23:80 -j DROP |
iptables -A INPUT -i eth0 -s 10.0.0.1 -p tcp -m multiport --dport 23,24,30,80 -j DROP -m extended match (may load extension) 指定加载扩展功能参数 multiport --- 不连续的多端口配置,扩展参数 icmp --- 进行icmp协议访问控制 state --- 指定匹配状态扩展模块 |
禁止ping策略原则 iptables -A INPUT -p icmp --icmp-type 8 -j DROP iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP iptables服务器是ping命令发起者或是接受者 发起者: input链: 禁止icmp-type 0 iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j DROP output链: 禁止icmp-type 8 iptables -A OUTPUT -o eth0 -p icmp --icmp-type 8 -j DROP 接受者: input链: 禁止icmp-type 8 iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP output链: 禁止icmp-type 0 iptables -A OUTPUT -o eth0 -p icmp --icmp-type 0 -j DROP 简化配置: iptables -A INPUT -i eth0 -p icmp --icmp-type any -j DROP iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type any -j DROP iptables -A INPUT -p icmp --icmp-type 8 iptables -A INPUT -p icmp --icmp-type 8 -j DROP iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT 说明:只有类型8是真正会影响ping,或者也可以采用any;了解很多icmp类型iptables -p icmp -h |
icmp type8:Echo request——回显请求(Ping请求) 出去的信息 icmp type0: Echo Reply——回显应答(Ping应答) 回来的信息 |
NEW | 表示新建立连接的数据包状态 |
ESTABLISHED | 表示新建立连接数据包发送之后,回复响应的数据包状态 |
RELATED | 表示借助已经建立的链路,发送新的连接数据包 |
INVALID | 无效无法识别的数据包 |
防火墙服务配置在FTP服务器上时,需要配置以下策略 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT |
实现发现sent_syn状态 iptables -A INPUT -m state --state NEW -j DROP --- 防火墙所连接客户端上配置 |
实现发现sent_rcvd状态 iptables -I INPUT -i eth0 -s 10.0.0.201 -m state --state ESTABLISHED -j DROP --- 防护墙上配置的 |
# 限制指定时间包的允许通过数量及并发数 -m limit --limit n/{second/minute/hour}: --limit 6/min 解释:指定时间内的请求速率”n”为速率,后面为时间分别为:秒 分 时 --limit-burst [n] 解释:在同一时间内允许通过的请求”n”为数字,不指定默认为5 |
实现策略命令: iptables -A INPUT -s 10.0.0.9 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT iptables -A INPUT -s 10.0.0.9 -j DROP |
项目:部署一个最安全的企业级防火墙(案例) 两种思想:针对默认规则而言。 1、默认规则默认是允许的状态。 2、默认规则默认是不允许的状态。更安全。 |
1)保存防火墙配置文件信息 cp /etc/sysconfig/iptables{,.bak} |
2)清除配置规则 iptables -F <- 清空iptables所有规则信息(清除filter) iptables -X <- 清空iptables自定义链配置(清除filter) iptables -Z <- 清空iptables计数器信息(清除filter) |
3)别把自己踢出到门外 iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT |
4)配置防火墙filter上各个链的默认规则 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT -P --- 指定相应链的默认规则策略,是允许还是阻止 |
5)允许iptables服务端ping自己的网卡地址 iptables -A INPUT -i lo -j ACCEPT --- 让自己可以ping自己 |
指定外网可以访问的端口信息 iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT |
企业中内网之间不要配置防火墙策略 iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT |
企业之间有合作关系的,不要将友商的网络禁止(主要经常改动) iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT iptables -A INPUT -s 10.0.2.0/24 -j ACCEPT |
如果防火墙上配置了FTP服务,需要配置网络状态机制(允许相应流量返回) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT |
实现iptables策略配置永久保存 ①. 利用防火墙启动脚本命令参数,实现永久保存 /etc/init.d/iptables save ②. 利用防火墙配置信息保存命令,实现永久保存 iptables-save >/etc/sysconfig/iptables |
01. 去机房重启系统或者登陆服务器删除刚才的禁止规则。 02. 让机房人员重启服务器或者让机房人员拿用户密码登录进去 03. 通过服务器的远程管理卡管理(推荐) 04. 先写一个定时任务,每5分钟就停止防火墙 05. 测试环境测试好,写成脚本,批量执行 |
iptables NAT:(配置NAT表示就是配置以下两个链) 01. postrouting(内网---外网-NAT 源私网IP地址---源公网IP地址 端口转化) 路由之后,进行地址映射转换,把源地址进行转换(源私网地址==>源公网地址) 02. prerouting(外网---内网-NAT 目标公网IP地址---目标私网IP地址 映射目标端口) 路由之前,进行地址映射转换,把目标地址进行转换(目标公网地址==>目标变为私网地址) |
配置内网主机 第一个历程:配置内网服务器,设置网关地址 /etc/init.d/iptables stop --- 内网服务器停止防火墙服务 ifdown eth0 --- 模拟关闭内网服务器外网网卡 setup --- 修改内网网卡网关和DNS地址信息 [root@oldboyedu42-lnb-02 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1 0.0.0.0 172.16.1.7 0.0.0.0 UG 0 0 0 eth1 说明:内网服务器网关地址指定为共享上网服务器内网网卡地址 |
配置iptables服务器 第一个历程:配置共享上网服务器,开启共享上网服务器路由转发功能 [root@oldboyedu42-lnb-02 ~]# vim /etc/sysctl.conf [root@oldboyedu42-lnb-02 ~]# sysctl -p net.ipv4.ip_forward = 1 第三个历程:配置共享上网服务器,实现内网访问外网的NAT映射 iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.8 -s 172.16.1.0/24 --- 指定将哪些内网网段进行映射转换 -o eth0 --- 指定在共享上网哪个网卡接口上做NAT地址转换 -j SNAT --- 将源地址进行转换变更 -j DNAT --- 将目标地址进行转换变更 --to-source ip地址 --- 将源地址映射为什么IP地址 --to-destination ip地址 --- 将目标地址映射为什么IP地址 扩展如果开启:forward默认drop策略,如果配置forward链 iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE <- 伪装共享上网 说明:在企业中如何没有固定外网IP地址,可以采取以上伪装映射的方式进行共享上网 |
总结:配置映射方法 01. 指定哪些网段需要进行映射 -s 172.16.1.0/24 02. 指定在哪做映射 -o eth0 03. 用什么方法做映射 -j SNAT/DNAT 04. 映射成什么地址 --to-source ip地址/--to-destination ip地址 |
10.0.0.8 9000 === 172.16.1.9 22 需求:将网关的IP和9000端口映射到内网服务器的22端口 端口映射 10.0.0.7:9000 -->172.16.1.8:22 实现命令: iptables -t nat -A PREROUTING -d 10.0.0.7 -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.201:22 iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 9000 -i eth0 -j DNAT --to-destination 172.16.1.8:22 (1)-d 10.0.0.8目标地址。 (2)-j DNAT 目的地址改写。 |
172.16.1.10 == 10.0.0.10 辅助IP: ip addr add 10.0.0.81/24 dev eth0 label eth0:0 #<==辅助IP iptables -t nat -I PREROUTING -d 10.0.0.81 -j DNAT --to-destination 172.16.1.51 iptables -t nat -I POSTROUTING -s 172.16.1.51 -o eth0 -j SNAT --to-source 10.0.0.81 检查: ping 10.0.0.81 -t tcpdump|grep -i icmp(两台机器上分别监测) telnet 10.0.0.81 873(51上提前配好) |
方法1: iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.240.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16 三层交换机或路由器,划分VLAN。 |
方法2: iptables -t nat -A POSTROUTING -s 10.0.1.0/22 -o eth0 -j SNAT --to-source 124.42.60.11 iptables -t nat -A POSTROUTING -s 10.0.2.0/22 -o eth0 -j SNAT --to-source 124.42.60.12 扩大子网,增加广播风暴。 |
有关iptables的内核优化 调整内核参数文件/etc/sysctl.conf 以下是我的生产环境的某个服务器的配置: ------------解决time-wait过多------------- net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_max_tw_buckets = 36000 ---------------------------------- net.ipv4.ip_local_port_range = 4000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 ---------------------------------- #dmesg里面显示 ip_conntrack: table full, dropping packet.的错误提示,什么原因?如何解决? #iptables优化 net.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_tcp_timeout_established = 180 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120 |
标签:提前 process src 辅助ip 用户密码 linux 模块 table 相关
原文地址:http://blog.51cto.com/zhuzhiwei/2137324