服务器安全之iptables iptables

服务器安全之iptables

感谢老男孩老师为我们讲解iptables 
优化之路


iptables防火墙简介

Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的安全自由的**基于包过滤的防火墙工具**,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。特别是它可以在一台非常低的硬件配置下跑的非常好
Iptables是Linux2.4及2.6内核中集成的服务。其功能与安全性比其**ipfwadm,ipchains**强大的多,iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持**7层控制**(squid代理+iptables)

iptables 名词和术语

容器:包含和被包含的关系 
iptables是表的容器 
iptables包含表 (4张表)表是链的容器,每个表都包含若干个链 
链是规则的容器,真正过滤规则是属于链里面的 
级别介绍

iptables国家 
表省 
链 市 
规则 县

iptables工作流程

iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则来进行匹配是否可以进入到主机。

1.png-66.7kB

iptables工作流程小结

1.防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。 
2.如果匹配上规则,即明确表是阻止还是通过,此时数据包就不在向下匹配新规则了。 
3.如果所有规则中没有明确是阻止还是通过这个数据包,也就是么有匹配上新规则,向下进行匹配,直到匹配默认规则得到明确的组织还是通过 
4.防火墙的默认规则是对应链的所有规则执行完才会执行的。

iptables表(tables)和链(chains)

iptables根据功能和表的定义划分包含三个表,filter,nat,mangle,其每个表又包含不同的操作链(Chains)

2.png-37.3kB

3.png-67.8kB

Filter表 是真正的防火墙功能 
INPUT 进服务器 OUTPUT出服务器 FORWARD 流经服务器 
Nat 表 负责数据包改写 网关共享上网、IP和端口映射 
OUTPUT 
PREROUTING 
POSTROUTING 
Mangle表 路由标记 用的不多 
####所有链全有 
RAW 表 用处很少和Mangle一样 
我们可以通过man iptables 来获取

表介绍

表1.png-99.9kB

对于filter表的控制是我们实现本机防火墙的重要手段,特别是对INPUT链的控制 
表2.png-97kB
表3.png-80.4kB
表4.png-69.7kB
表5.png-26.8kB

iptables表和链工作流程图

表流.png-37.1kB
22.png-26.7kB

提示: iptables主要由2个作用,第一是防火墙,第二是路由。 
NAT功能: 
企业案例:1)局域网上网共享(路由和网关)NAT POSTROUTING 
2)外部IP和端口映射为内部IP和端口(DMZ功能),NAT PREROUTING 
Filter功能,即防火墙FILTER INPUT FORWARD 
企业案例:主要应用于服务器防火墙

配置iptables

iptables默认已经安装

  1. [root@web02 ~]# iptables -V
  2. iptables v1.4.7
  3. [root@web02 ~]# rpm -qa iptables
  4. iptables-1.4.7-16.el6.x86_64
  5. [root@web02 ~]# /etc/init.d/iptables status
  6. iptables: Firewall is not running.

查看iptables规则

  1. [root@web02 ~]# iptables -nL
  2. Chain INPUT (policy ACCEPT)

表示针对input链 ACCEPT是默认规则,默认是运行通过的

  1. target prot opt source destination
  2. input链下面具体的规则
  3. ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
  4. ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
  5. ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
  6. ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
  7. REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  8. Chain FORWARD (policy ACCEPT)
  9. target prot opt source destination
  10. REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  11. Chain OUTPUT (policy ACCEPT)
  12. target prot opt source destination

如果没有指定表,默认就是filfer表

iptables默认加载的内核模块

  1. [root@web02 ~]# lsmod |egrep "nat|filter|ipt"
  2. ipt_REJECT 2351 2
  3. iptable_filter 2793 1
  4. ip_tables 17831 1 iptable_filter

加载如下模块到linux内核

  1. modprobe ip_tables
  2. modprobe iptable_filter
  3. modprobe iptable_nat
  4. modprobe ip_conntrack 连接跟踪
  5. modprobe ip_conntrack_ftp 连接跟踪
  6. modprobe ip_nat_ftp
  7. modprobe ipt_state

再次过滤,查看生效情况

  1. [root@web02 ~]# lsmod |egrep "nat|filter|ipt"
  2. nf_nat_ftp 3443 0
  3. nf_conntrack_ftp 11953 1 nf_nat_ftp
  4. iptable_nat 5923 0
  5. nf_nat 22676 2 nf_nat_ftp,iptable_nat
  6. ipt_REJECT 2351 2
  7. nf_conntrack_ipv4 9154 5 iptable_nat,nf_nat
  8. nf_conntrack 79206 6 nf_nat_ftp,nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,xt_state
  9. iptable_filter 2793 1
  10. ip_tables 17831 2 iptable_nat,iptable_filter

清空所有的规则,只留下默认规则

  1. [root@web02 ~]# iptables -F
  2. [root@web02 ~]# iptables -X
  3. [root@web02 ~]# iptables -Z

iptables -F 清除所有规则 
iptables -X 删除用户自定义规则 
iptables -Z 链的计数器清零


禁止规则

查看端口

  1. [root@web02 ~]# netstat -lntup|grep ssh
  2. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1329/sshd
  3. tcp 0 0 :::22 :::* LISTEN 1329/sshd

命令如下:

  1. iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

-A 添加规则到指定链的结尾,最后一条 
-I 添加规则到指定链的开头,第一条 
-t 指定表,也可以不指定默认是filter 
-p 指定协议(all.tcp,udp.icmp)默认all 
--dport 指定端口 
-j 处理的行为 
ACCPET接收、DROP丢弃、REJECT拒绝

最好使用ACCPETDROP,因为拒绝会返回给用户信息。 
333.png-9.6kB

清除规则可以使用iptables -F 
还可以使用iptables -D INPUT 1 
-D指定删除的链 
--line-number 显示序列号 
iptables -nl --line-number 
3333.png-9.7kB

提示:需要写上链和序列号

温馨提示:恢复刚才断掉的SSH连接 
1)去机房重启系统或登录服务器删除刚才的禁止规则 
2)让机房人员重启服务器或者让机房人员拿用户密码登录进去 
3)通过服务器的远程管理卡管理(推荐) 
4)先写一个定时任务,每5分钟就停止防火墙 
5)测试环境测试好,写成脚本,批量执行


企业案例

案例1: 加-A-I的区别

  1. [root@web02 ~]# iptables -A INPUT -p tcp --dport 80 -j DROP
  2. [root@web02 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

按照iptables匹配规则,首先会先匹配第一行,依次向下。这样设置拒绝就没有用 
如果想在中间插入可以指定插入行号

  1. [root@web02 ~]# iptables -nL
  2. Chain INPUT (policy ACCEPT)
  3. target prot opt source destination
  4. ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
  5. DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
  6. Chain FORWARD (policy ACCEPT)
  7. target prot opt source destination
  8. Chain OUTPUT (policy ACCEPT)
  9. target prot opt source destination

还可以通过序列号插入iptables 命令

  1. [root@web02 ~]# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
  2. [root@web02 ~]# iptables -nL --line-number
  3. Chain INPUT (policy ACCEPT)
  4. num target prot opt source destination
  5. 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
  6. 2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
  7. 3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
  8. Chain FORWARD (policy ACCEPT)
  9. num target prot opt source destination
  10. Chain OUTPUT (policy ACCEPT)
  11. num target prot opt source destination

小结:总结下删除规则的方法 
1. iptables -D INPUT -p tcp –dport 8080 -j DROP 
2. iptables -F 删所有规则 
3. /etc/init.d/iptables restart (用iptables命令行配置的命令都是临时生效) 
4. iptables -D INPUT 规则序号

案例:禁止10.0.0.0网段接入 
基于客户端网段控制

  1. [root@web02 ~]# iptables -A INPUT -s 10.0.0.0/24 -j DROP

-s指定源地址 
还可以使用不是这个网段的进行操作

  1. [root@web02 ~]# iptables -A INPUT ! -s 10.0.0.0/24 -j DROP

案例:控制22端口 eth0网卡进来的数据

  1. iptables -A INPUT -p tcp --dport 22 -i eth0 ! -s 10.0.0.0/24 -j DROP
  2. iptables -A INPUT -p tcp --dport 22 -i eth0 ! -s 192.168.1.1 -j DROP

封掉3306端口

  1. iptables -A INPUT -p tcp --dport 3306 -j DROP

匹配指定的协议

  1. iptables -A INPUT -p tcp
  2. iptables -A INPUT -p udp

匹配指定协议外的所有协议

  1. iptables -A INPUT ! -p tcp

“匹配单一端口**

  1. iptables -A INPUT -p tcp --sport 22 源端口
  2. iptables -A INPUT -p udp --dport 22 目的端口

匹配端口范围:

  1. iptables -A INPUT -p tcp --sport 22:80
  2. iptables -A INPUT -p tcp --dport 21,22,23 -j DROP---->错误语法
  3. iptables -I INPUT -p tcp -m multiport --dport 22,23,24,25 -j DROP
  4. iptables -I INPUT -p tcp -m multiport ! --dport 22,23,24,25 -j DROP
  5. iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
  6. iptables -I INPUT -p tcp --dport 18:80 -j DROP <----最佳方法

匹配ICMP类型

  1. iptables -A INPUT -p icmp-type 8

icmp中有很多类型,其中8代表ping 
例:

  1. iptables -A INPUT -p icmp --icmp-type 8 -j DROP
  2. iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

因为icmp类型很多可以使用anyicmp的所有类型全禁

  1. iptables -A INPUT -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT

企业场景禁ping

  1. iptables -A INPUT -p icmp --icmp-type 8 -s 10.0.0.0/24 -j ACCEPT

根据需求来设定

匹配网络状态

  1. -m state --state
  2. NEW:已经或启动新的连接
  3. ESTABLISHED:已建立的连接
  4. RELATED:正在启动的新连接
  5. INVALID:非法或无法识别的
  6. FTP服务是特殊的,需要配状态连接

允许关联的状态包通过(Web服务不要使用FTP服务) 
允许关联的状态包

  1. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  2. iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

限制指定时间包的允许通过数量及并发数

  1. -m limit --limit n/{second/minute/hour}

指定时间内的请求速率“n”为速率,后面为时间分别为:秒、分、时

  1. --limit-burst [n]

在同一时间内允许通过的请求“n”为数字,不指定默认为5

  1. iptables -I INPUT -s 10.0.1.0/24 -p icmp --icmp-type 8 -m limit --limit 5/min --limit-burst 2 -j ACCEPT

手动执行iptables命令配置企业生产环境防火墙

生产环境配置主机防火墙的两种模式 
1. 允许所有程序,对操作伤害的进行拒绝操纵 应用场景:企业配置上网网关路由 
2. 拒绝所有操作,允许指定的操作 应用场景:服务器主机防火墙


配置企业主机防火墙

  1. [root@web02 ~]# iptables -F
  2. [root@web02 ~]# iptables -X
  3. [root@web02 ~]# iptables -Z

1.设置允许SSH登录端口

  1. [root@web02 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCETP
  2. [root@web02 ~]# iptables -A INPUT -p tcp -s 10.0.0.1/24 -j ACCEPT

2.设置允许本机lo通信规则

  1. [root@web02 ~]# iptables -A INPUT -i lo -j ACCEPT
  2. [root@web02 ~]# iptables -A OUTPUT -o lo -j ACCEPT

3.设置默认规则

  1. [root@web02 ~]# iptables -P INPUT DROP
  2. [root@web02 ~]# iptables -P OUTPUT ACCEPT
  3. [root@web02 ~]# iptables -P FORWARD DROP

轻松应对IDC机房带宽突然暴涨问题 
查看规则(现在的服务器是最安全的)

  1. [root@web02 ~]# iptables -nL --line-number
  2. Chain INPUT (policy DROP)
  3. num target prot opt source destination
  4. 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
  5. 2 ACCEPT tcp -- 10.0.0.0/24 0.0.0.0/0
  6. 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
  7. Chain FORWARD (policy DROP)
  8. num target prot opt source destination
  9. Chain OUTPUT (policy ACCEPT)
  10. num target prot opt source destination
  11. 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

4.开启信任的IP网段 
允许IDC LAN/WAN 和办公网IP的访问,及对外合作机构访问

  1. iptables -A INPUT -s 124.23.62.96/27 -p all -j ACCEPT #办公室固定IP段
  2. iptables -A INPUT -s 192.168.2.0/24 -p all -j ACCEPT #IDC机房的内网网段
  3. iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT #其他机房的内网网段
  4. iptables -A INPUT -s 203.82.24.0/24 -p all -j ACCEPT #IDC机房的外网网段
  5. iptables -A INPUT -s 203.82.23.0/24 -p all -j ACCEPT #其他IDC机房的外网网段

现在还只是我们可以访问,对外还无法访问 
5.允许icmp类型协议通过

  1. iptables -A INPUT -p icmp -m icmp-type any -j ACCEPT

提示:如果不想开,就不执行此命令

  1. iptables -A INPUT -p icmp -s 10.0.0.0/24 -m icmp --icmp-type any -j ACCEPT

6.允许关联的状态包通过(Web服务不要使用FTP服务)

  1. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  2. iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

提示:以上配置就是合格服务器应该配置的

保存

默认使用iptables并没有永久保存,重启失效。 
第一种方法:

  1. /etc/init.d/iptables save 保存到/etc/sysconfig/iptables 下面

显示如下格式

  1. [root@web02 ~]# cat /etc/sysconfig/iptables
  2. # Generated by iptables-save v1.4.7 on Mon Aug 15 01:33:44 2016
  3. *nat
  4. :PREROUTING ACCEPT [1413:153792]
  5. :POSTROUTING ACCEPT [132:8834]
  6. :OUTPUT ACCEPT [132:8834]
  7. COMMIT
  8. # Completed on Mon Aug 15 01:33:44 2016
  9. # Generated by iptables-save v1.4.7 on Mon Aug 15 01:33:44 2016
  10. *filter
  11. :INPUT DROP [1798:662465]
  12. :FORWARD DROP [0:0]
  13. :OUTPUT ACCEPT [288:21100]
  14. -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
  15. -A INPUT -s 10.0.0.0/24 -p tcp -j ACCEPT
  16. -A INPUT -i lo -j ACCEPT
  17. -A OUTPUT -o lo -j ACCEPT
  18. COMMIT
  19. # Completed on Mon Aug 15 01:33:44 2016

第二种方法:

  1. [root@web02 ~]# iptables-save >/etc/sysconfig/iptables

推荐使用第一种方式


测试:我通过其他服务器扫描我们配置的防火墙 
使用nmap工具进行分析,此工具需要安装

  1. [root@web02 ~]# yum -y install nmap

使用如下:更多可以使用nmap –help

  1. [root@web02 ~]# nmap 10.0.0.8 -p 1-65535
  2. Starting Nmap 5.51 ( http://nmap.org ) at 2016-08-15 04:28 CST
  3. Nmap scan report for 10.0.0.8
  4. Host is up (0.0000070s latency).
  5. Not shown: 65532 closed ports
  6. PORT STATE SERVICE
  7. 22/tcp open ssh
  8. 80/tcp open http
  9. 3306/tcp open mysql
  10. Nmap done: 1 IP address (1 host up) scanned in 14.21 seconds

生产维护

(1)确定的规则; 
编辑/etc/sysconfig/iptables 
加入想要的规则:例如

  1. -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT
  2. /etc/init.d/iptables reload

或者改配置的同时命令在执行,也是永久生效。 
(2)命令试错,没问题了,然后放配置文件,这时不需要重启了


恶意IP封杀

封IP,在第一行封。10.0.0.1 这个机器攻击我们服务器或者在BBS里发垃圾帖子 
手工封IP:

  1. iptables -I INPUT -s 10.0.0.1 -j DROP #粗,范围大,外部攻击者
  2. Iptables -I INPUT -s 10.0.0.1 -j DROP
  3. iptables -I INPUT -p tcp -s 10.0.0.1 --dport 80 -j DROP #细,范围小。内部

自动封IP:分析Web或应用日志或者网络连接状态封掉垃圾IP 
脚本:

  1. #!/bin/bash
  2. #this is a server firewall created by oldboy 17:03 2006-7-26
  3. # e_mail:31333741@qq.com
  4. # qqinfo:49000448
  5. # function: a server firewall
  6. # version:1.1
  7. ################################################
  8. # oldboy trainning info.
  9. # QQ 1986787350 70271111
  10. # site: http://www.etiantian.org
  11. # blog: http://oldboy.blog.51cto.com
  12. # oldboy trainning QQ group: 208160987 45039636
  13. ################################################
  14. #define variable PATH
  15. IPT=/sbin/iptables
  16. #Remove any existing rules
  17. $IPT -F
  18. $IPT -X
  19. $IPT -Z
  20. #setting default firewall policy
  21. $IPT --policy OUTPUT ACCEPT
  22. $IPT --policy FORWARD DROP
  23. $IPT -P INPUT DROP
  24. #setting for loopback interface
  25. $IPT -A INPUT -i lo -j ACCEPT
  26. $IPT -A OUTPUT -o lo -j ACCEPT
  27. #setting access rules
  28. #one,ip access rules,allow all the ips of
  29. $IPT -A INPUT -s 10.0.10.0/24 -p all -j ACCEPT
  30. $IPT -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT

##下面的是重复的,作为知识点保留,单个服务的配置

  1. #second,port access rules
  2. #nagios
  3. $IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 5666 -j ACCEPT
  4. $IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 5666 -j ACCEPT
  5. #db
  6. $IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 3306 -j ACCEPT
  7. $IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 3307 -j ACCEPT
  8. $IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 3306 -j ACCEPT
  9. $IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 3307 -j ACCEPT
  10. #ssh difference from other servers here.>>
  11. $IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 52113 -j ACCEPT
  12. $IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 52113 -j ACCEPT
  13. $IPT -A INPUT -p tcp --dport 22 -j ACCEPT
  14. #http
  15. $IPT -A INPUT -p tcp --dport 80 -j ACCEPT
  16. #snmp
  17. $IPT -A INPUT -s 10.0.0.0/24 -p UDP --dport 161 -j ACCEPT
  18. $IPT -A INPUT -s 10.0.10.0/24 -p UDP --dport 161 -j ACCEPT
  19. #rsync
  20. $IPT -A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
  21. $IPT -A INPUT -s 10.0.10.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
  22. #icmp
  23. #$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
  24. #others RELATED
  25. $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  26. $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

企业案例:写一个脚本解决DOS攻击生产案例 
提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -I INPUT -s 10.0.1.10 -j DROP
本脚本使用测试文件进行编写 
相关博文:答案见博客shell板块

  1. [root@db02 scripts]# cat test_6.sh
  2. #!/bin/sh
  3. #
  4. [ -f /etc/init.d/functions ] && . /etc/init.d/functions
  5. IP_file="/server/scripts/ddos.txt"
  6. IP_filter_command="iptables -I INPUT -j DROP -s"
  7. IP_recover_command="iptables -D INPUT -j DROP -s"
  8. function IP_check(){
  9. grep "EST" ${IP_file}|awk -F "[ |:]+" '{print $6}'|sort |uniq -c|sort -rn -k1 > /server/scripts/ip.txt
  10. }
  11. function IP_filter(){
  12. exec < /server/scripts/ip.txt
  13. while read line
  14. do
  15. IP_count=`echo $line|awk '{print $1}'`
  16. IP=`echo $line|awk '{print $2}'`
  17. IP_fil=`iptables -L -n|grep "\b${IP}\b"|wc -l`
  18. if [ ${IP_count} -gt 25 -a ${IP_fil} -eq 0 ];then
  19. ${IP_filter_command} ${IP}
  20. echo "${IP}" >> /server/scripts/ip_filtered.txt
  21. action "Filter ${IP}" /bin/true
  22. fi
  23. done
  24. }
  25. function IP_recover(){
  26. exec < /server/scripts/ip.txt
  27. while read line
  28. do
  29. IP_count=`echo $line|awk '{print $1}'`
  30. IP=`echo $line|awk '{print $2}'`
  31. IP_fil=`iptables -L -n|grep "\b${IP}\b"|wc -l`
  32. if [ ${IP_count} -le 25 -a ${IP_fil} -eq 1 ];then
  33. ${IP_recover_command} ${IP}
  34. echo "${IP}" >> /server/scripts/ip_filtered.txt
  35. action "Recover ${IP}" /bin/true
  36. fi
  37. done
  38. }
  39. function main(){
  40. case "$1" in
  41. filter)
  42. IP_check
  43. echo "$(date +%F-%H:%M:%S) filtered by $(whoami)" >> /server/scripts/ip_filtered.txt
  44. IP_filter
  45. ;;
  46. recover)
  47. IP_check
  48. echo "$(date +%F-%H:%M:%S) recovered by $(whoami)" >> /server/scripts/ip_filtered.txt
  49. IP_recover
  50. ;;
  51. *)
  52. echo "USAGE:$0 {filter|recover}"
  53. exit 1
  54. esac
  55. }
  56. main $*

生产环境iptables脚本讲解

技巧:具备外网IP的服务器不对外的服务最好要做源地址限制。对外提供的服务,不能做源地址限制,例如:80 端口 
问题:企业硬件防火墙和IPTABLES防火墙是否要同时用。 
解决:可以同时使用企业硬件防火墙一般放在网关位置,相当于大厦的保安,但是楼里的每个屋子还是需要有人锁门的iptables

问题: IDC机房部署了硬件防火墙,我们的服务器可以不开防火墙吗? 
解答:绝对不可以,大厦有了保安,你的办公室门就不锁了吗?


NAT表设置

1.png-16.8kB

共享上网设置 
linux网关B: 
局域网共享的两条命令方法:

方法1:适合于有固定外网地址的:

  1. iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7

(1)-s192.168.1.0/24 办公室或IDC内网网段。 
(2)-oeth0 为网关的外网卡接口。 
(3)-jSNAT –to-source 10.0.0.7 是网关外网卡IP地址。 
方法2:适合变化外网地址(ADSL):

  1. iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE ç伪装。

配置如下

第一步:外网服务器配置

  1. [root@lb01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.5
  2. [root@lb01 ~]# iptables -t nat -L -n

开启内核转发

  1. net.ipv4.ip_forward = 1
  2. vim /etc/sysctl.conf

sysctl -p 生效 
需要上网服务器设置 
添加路由

  1. route add default gw 172.16.1.5

#此处写提供外网的IP地址

  1. vim /etc/resolv.conf

添加 nameserver 223.5.5.5 
2.png-6.6kB

route -n 检查


案例2:实现把访问10.0.0.5:80的请求转到172.16.1.8:80

  1. [root@web02 ~]# iptables -t nat -A PREROUTING -d 10.0.0.5 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.8:80
  2. [root@web02 ~]# iptables -P FORWARD DROP

3.png-34.1kB

iptables常用企业案例:

1、Linux主机防火墙(表:FILTER 控制链:INPUT) 
2、局域网机器共享上网(表:NAT 控制链:POSTROUTING

  1. iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7

3、外部地址和端口,映射为内部地址和端口(表:NAT 控制的链:PREROUTING

  1. iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.8:9000

企业案例:实现外部IP 124.42.34.112 一对一映射到内部server 10.0.0.8 
网关Ip:eth0:124.42.60.109 eth1:10.0.0.254 
首先在路由网关上绑定VIP 124.42.34.112,可以是别名辅助IP的方式。

  1. -A POSTROUTING -s 10.0.0.0/255.255.240.0 -d 124.42.34.112 -j SNAT --to-source 10.0.0.254
  2. -A PREROUTING -d 124.42.34.112 -j DNAT --to-destination 10.0.0.8
  3. -A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.34.112

相关文章 
(1)生产环境大于254台机器网段划分及路由解决方案详解01 
(2) linux route命令深入浅出与实战案例精讲[1] 
(3) linux route命令深入浅出与实战案例精讲[2]

4.png-20.9kB


iptables 生产应用场景

1)局域网共享上网(适合做企业内部局域网上网网关,以及IDC机房内网的上网网关[nat POSTROUTING]) 
2)服务器防火墙功能(适合IDC机房具有外网IP的服务器)(主要是filter INPUT的控制) 
3)把外部IP及端口映射到局域网内部(可以一对一IP映射,也可以针对某一个端口映射)也可能是IDC把网站的外网VIP及网站端口映射到负载均衡器上(硬件防火墙)。(nat PREROUTING) 
4)办公路由器+网关功能(zebra路由+iptables过滤及NAT+squid正向透明代理)80+ntop/iftop/iptraf流量查看+tc/cbq流量控制限速 
5)邮件的网关

iptables防火墙的应用

1)主机防火墙 
2)网关的应用(IP映射,端口映射) 
3)过滤信息,监控限制流量及员工上网行为(squid(正向代理缓存加过滤)+ntop(图形流量监控)+通常(流量限制)+iptraf/iftop(流量查看)) 
如果IPTABLES的服务器升级内核可以实现类似squid的过滤功能 
4)网关装杀毒软件监听9999端口,(网关杀毒

  1. iptables -A PREROUTING -i eth0 -d 211.167.253.109 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.10.6:9025

5)结合zebra配置企业级路由器

映射多个外网IP上网

  1. iptables -t nat -A POSTROUTING -s 10.0.0.1/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16
  2. iptables -t nat -A POSTROUTING -s 172.16.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.103-124.42.60.106
  3. #iptables -t nat -A postrouting -S 192.168.1.0/22 -o eth0 -j SNAT --to-source 10.0.0.241-10.0.0.249

问题: 
1、2000人被封 
2、可用65535端口资源有限


企业案例: ip_conntrack: table full, dropping packet.的错误提示 
以下是我的生产环境的某个服务器的配置:

  1. net.ipv4.tcp_fin_timeout = 2
  2. net.ipv4.tcp_tw_reuse = 1
  3. net.ipv4.tcp_tw_recycle = 1
  4. net.ipv4.tcp_syncookies = 1
  5. net.ipv4.tcp_keepalive_time = 600
  6. net.ipv4.ip_local_port_range = 4000 65000
  7. net.ipv4.tcp_max_syn_backlog = 16384
  8. net.ipv4.tcp_max_tw_buckets = 36000
  9. net.ipv4.route.gc_timeout = 100
  10. net.ipv4.tcp_syn_retries = 1
  11. net.ipv4.tcp_synack_retries = 1

#5、dmesg里面显示ip_conntrack: table full, dropping packet.的错误提示.如何解决。 
#以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。 
c58:

  1. net.ipv4.ip_conntrack_max = 25000000
  2. net.ipv4.netfilter.ip_conntrack_max=25000000
  3. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
  4. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
  5. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
  6. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120

################################################################ 
C64:

  1. net.nf_conntrack_max = 25000000
  2. net.netfilter.nf_conntrack_max = 25000000
  3. net.netfilter.nf_conntrack_tcp_timeout_established = 180
  4. net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
  5. net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
  6. net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

调整内核参数/etc/sysctl.conf后,需执行/sbin/sysctl -p使得修改生效。 
强调:如果并发比较大,或者日PV多的情况下,开启防火墙要注意,很可能导致网站访问缓慢 
大并发(并发1万,PV日3000万)要么购买硬件防火墙,要么不开iptables防火墙


iptables 参数简介

-n 数字 
-L 列表 
-F 清除所有规则,不会处理默认规则 
-X 删除用户自定义的链 
-Z链的计数器清零 
-A 添加规则到指定链的结尾,最后一条 
-I 添加规则到指定链的开头,第一条 
-t指定表,也可以不指定默认是filter 
-p 指定协议(all.tcp,udp.icmp)默认all 
-P 设置默认规则 
-s指定源地址 
-d 目的地址 
--dport 指定端口 
-j处理的行为 ACCPET接收、DROP丢弃、REJECT拒绝 
-iinput 匹配进入的网卡接口 
-ooutput 匹配出去的网卡接口 
-m state –state 匹配网络状态 
-mlimit –limit n/{second/minute/hour}限制限定时间包的允许通过数量及并发数

更多命令可以使用man iptables 或iptables -h

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MC新手入门(三十)------ 逻辑运算符和表达式

游戏设计中提供了三种逻辑运算符&#xff1a; 1&#xff09;&& 与运算 2&#xff09;|| 或运算 3&#xff09; &#xff01;非运算 游戏设计中我们常常要用到上面的逻辑运算&#xff0c;例如&#xff1a;当在双人游戏中都要实现两人同时存活才能过关&#xff0c;…

Nagios 配置及监控

Nagios 监控 在互联网日益发展的今天&#xff0c;监控的重要性已经不言而喻。可能打开一个URL要经过6-7层的处理&#xff0c;如果出了问题而没有监控将很难定位到问题所在。那哪些内容需要监控呢&#xff1f; 1.本地资源 (1) 负载&#xff1a;uptime&#xff1b; (2) CPU&…

SSH 配置

SSH 批量管理 SSH介绍 SSH是Secure Shell Protocol的简写&#xff0c;由IETF网络工作小组&#xff08;Network working Group&#xff09;指定&#xff1b;在进行数据传输之前&#xff0c;SSH先对联机数据包通过加密技术进行加密处理&#xff0c;加密后在进行数据传输。确保了传…

服务器重启导致无法启动MySQL

今天服务器受到DDOS攻击&#xff0c;笔者脑残重启了一下服务器。结果造成MySQL服务器无法启动mysql日志见下图。160803 17:43:47 mysqld_safe Starting mysqld daemon with databases from /application/mysql/data160803 17:43:47 [Note] /application/mysql/bin/mysqld (mysq…

架构师之DNS实战

架构师 DNS实战 老男孩教育 DNS简介 1. DNS的出现及演化 网络出现的早起是使用IP地址通讯的&#xff0c;那是就几台主机通讯。但是随着接入网络主机的增多&#xff0c;这种数字标识的地址非常不便于记忆&#xff0c;UNIX上就出现了建立一个叫做hosts的文件&#xff08;Linux和W…

打包jar文件后的spring部署及hibernate自动建表经验总结

楔子 用springhibernate做一个服务器运行程序&#xff0c;在部署到服务器时&#xff08;打包成jar&#xff0c;在window server2008下运行&#xff09;&#xff0c;出现了以下两个纠结问题&#xff1a; 1. 加载不了Spring容器 2. hibernate.hbm2ddl.auto 到了服务器不能自动建表…

我是一个线程 [转]

我是一个线程&#xff0c;我一出生就被编了个号&#xff1a;0x3704&#xff0c;然后被领到一个昏暗的屋子里&#xff0c;在这里我发现了很多和我一模一样的同伴。 我身边的同伴0x6900 待的时间比较长&#xff0c;他带着沧桑的口气对我说&#xff1a;“我们线程的宿命就是处理包…

自动化运维之–Cobbler

Cobbler 自动化 Cobbler简介 Cobbler是一个快速网络安装linux的服务&#xff0c;而且在经过调整也可以支持网络安装windows。该工具使用python开发&#xff0c;小巧轻便&#xff08;才15k行python代码&#xff09;&#xff0c;使用简单的命令即可完成PXE网络安装环境的配置&…

开源jumpserver 堡垒机搭建

一、环境 CentOS 6.x x86_64 mini service iptables stop 关闭SELinux的方法&#xff1a; 修改/etc/selinux/config文件中的SELINUX”” 为 disabled &#xff0c;然后重启。 如果不想重启系统&#xff0c;使用命令setenforce 0 1.指定yum源 wget -O /etc/yum.repos.d/e…

Shell 变量及函数讲解 [2]

Shell 变量的输入 Shell变量除了可以直接赋值或脚本传参外&#xff0c;还可以使用read命令从标准输入获得&#xff0c;read为bash内置命令&#xff0c;可以通过help read查看帮助【语法格式】read [参数] [变量名]【常用参数】-p prompt&#xff1a;设置提示信息-t timeout&…

java大作业私人管家系统_重庆管家婆软件丨管家婆工贸PRO的E-MES管理详解

其实&#xff0c;ERP和MES在制造操作中扮演着独立而又互补的角色。ERP能将企业所有方面的数据进行实时、可用的全面集成&#xff0c;为管理决策提供高效、准确的业务决策支持;MES则能加强MRP计划的执行&#xff0c;把MRP计划同车间作业现场控制通过执行系统联系起来。这些“现场…

监控体系 [精]

监控体系 zabbix 监控对象&#xff1a;     1. 监控对象的理解&#xff1a;CPU是怎么工作的&#xff0c;原理     2. 监控对象的指标&#xff1a;CPU使用率 CPU负载 CPU个数 上下文切换     3. 确定性能基准线&#xff1a;怎么样才算故障&#xff1f;CPU负载多…

vs 设置起始页不见了_发朋友圈屏蔽爸妈,结果不小心设置成了仅家人可见...场面一发不可收拾哈哈哈哈!...

一提到爸妈的朋友圈&#xff0c;就会想到养生鸡汤&#xff0c;中老年流量谣言&#xff0c;土味表情包而出于保护个人隐私拒绝被爸妈误解而遭受灵魂拷问的考虑很多人选择了两全其美的分组法给家人看到阳光可爱正能量的一面沙雕的一面只展现给沙雕网友们可如果不小心把屏蔽的内容…

KVM 安装

KVM介绍 Kernel-based Virtual Machine的简称&#xff0c;是一个开源的系统虚拟化模块&#xff0c;自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理&#xff0c;所以相对于Xen&#xff0c;其核心源码很少。KVM目前已成为学术界的主流VMM之…

彼聆智能语音机器人_电销行业的人工智能:智能语音电话机器人

随着人工智能的发展&#xff0c;越来越多的机器人出现在我们的日常生活中&#xff0c;用于电话营销公司的自动打电话机器人、快递公司用来送快递的机器人、餐厅里用来上菜的机器人&#xff0c;最近更是有一款会后空翻的机器人。机器人正活跃在各行各业中&#xff0c;代替人类去…

Shell 基础介绍 [1]

本文目录1.什么是Shell&#xff1f;2.脚本语言类型3.其他常用的脚本语句种类4.Shell脚本的建立和执行5.Shell 变量类型6.普通变量7.Shell 特殊重要变量8.Shell进程状态变量9.Parameter Expansion10.扩展&#xff1a;其他变量的替换11.变量的数值&#xff08;整数&#xff09;计…

c++创建二叉树_数据结构:查找(4)|| 平衡二叉树

在介绍平衡二叉树之前&#xff0c;应该先了解平衡因子的概念&#xff0c;平衡因子定义为左子树深度减去右子树深度&#xff0c;这个值的绝对值越大&#xff0c;非常容易理解它就对应着越不平衡的情况。一棵平衡的二叉树的平衡因子只能是1&#xff0c;0&#xff0c;-1如何构建一…

华睿相机sdk 开发_索尼发布相机远程操作SDK(软件开发工具包)

索尼从2020年12月9日开始&#xff0c;向开发者免费提供针对索尼数码相机的软件开发工具包“ Camera Remote SDK” 1.03版。“ Camera Remote SDK”开发的软件可以远程更改相机设置、并执行诸如快门释放&#xff0c;实时取景监视(如取景和对焦)之类的操作。支持的操作系统包括Wi…

Linux 字体颜色设置

本文主要介绍Linux 字体颜色的调整&#xff0c;常用于shell脚本当中。我们举一个例子&#xff1a;echo-e"\033[44;37;5m ME \033[0m COOL" 以上命令设置背景成为蓝色&#xff0c;前景白色&#xff0c;闪烁光标&#xff0c;输出字符“ME”&#xff0c;然后重新设置屏幕…

利用Unity实现AOP

.NET程序中&#xff0c;可以利用Unity来实现AOP&#xff0c;用来进行日志、缓存或权限的处理。这里我们来写一个简单的程序&#xff0c;让其实现简单的AOP功能。 1.使用NuGet&#xff0c;在项目中获取Microsoft.Practices.Unity。 2.新建一个ITalk类及其实现 public interface …