iptables实现网络防火墙及地址转换

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

iptables主机防火墙功能及常用命令

FSM:Finite State Machine 有限状态机

客户端:closed -->syn_sent -->established --> fin_wait_1 -->find_wait_2 --> timewait(2MSL)
服务器:closed -->listen -->syn_rcvd -->establised --> close_wait -->last_ack


-m state:追踪连接状态
   模板:内存中会维持一个空间
       NEW
       ESTABLISHED
       RELATED
       INVALID
在前端的服务器中尽量不要开启追踪连接


iptables子命令
  规则:-A,-I,-D,-R
  链:-N,-X,-F,-Z,-E,-P -S
      通:默认 DROP
      堵:默认ACCEPT
  显示:-L -S
      -L 
       -n -v -x --line-numbers


  规则定义:iptables -t table -A|-I|-R chain 匹配条件 -j target
      匹配条件
         通用匹配:-s -d -i -o -p
         扩展匹配
             隐含扩展
               -p tcp
                --sport --dport --tcp-flags
                --syn
               -p udp
                 --sport --dport
               -p icmp
                  --icmp-type
                    echo-request 8
                    echo-reply 0
              显示扩展:
                 -m state 
                    --state
                 -m multiport
                    --sprots, --dports,  --ports
                 -m iprange
                    --src-range, --dst-range
                 -m string
                    -algo {bm|kmp} --string --hex-string
                 -m connlimit
                   ! --connlimit-above
                 -m limit
                   --limit n(/second|/minute|/hour|/day), --limit-burst
                 -m time
                    --datestart --datestop
                    --timestart -- timestop
                    --weekdays
           -j
             ACCEPT,DROP,REJECT,LOG,REDIRECT,SNAT,DNST,MASQUERADE,MARK,RETURN,自定义链


四表:raw mangle nat filter 
五链:PREROUTING INPUT FOEWARD OUTPUT POSTOUTING


规则保存和恢复:iptables-save iptables-restore


主机防火墙:INPUT OUTPUT

网络防火墙:FORWARD

    路由:
    NAT:
/proc/sys/net/ipv4/ip_forward


地址属于内核,地址当前属于主机的都给予响应


路由:对Linux主机而言,设定/proc/sys/net/ipv4/ip_forward的值为1,即为开启路由
     路由表的生成
       静态:手动添加
       动态:基于路由协议学习,RIP2 OSPF
NAT:网络地址转换
     A:10
     B:172.16-172.31
     C:192.168.0-192.168.255


     NAT: 工作于传输层和网络层
        过载技术
        Basic NAT:静态NAT
        NAPT:动态NAT,网络地址端口转换
             源地址转换:SNAT 用于内网主机访问互联网
             目标地址转换:DNAT
             让互联网上主机访问本地内网中的某服务器上的服务(发布)


        iptables基于SNAT和DNAT这两个目标实现地址转换技术
        -j SNT --to-source SIP
          规则添加:POSTROUTING链
        -j MASQUERAADE  动态获取


        -j DNAT --to-destination DIP{:PORT}
        支持端口映射




        基于nat表
           PREROUTING
           POSTROTING
           OUTPUT

     Proxy(代理):工作在应用层


举例说明:


网络拓扑



简单网络访问路由转发功能


172.16.1.10能ping通192.168.8.40,但不能ping通192.168.8.39
192.168.8.39能Ping通172.16.1.254,但不能ping通172.16.1.10
原因:Linux中网卡程序都加载于系统内核中,运行在上面的网卡程序会被系统认为是同一个设备

配置开启路由转发功能
# vim /etc/sysctl.conf 

net.ipv4.ip_forward = 1


让配置生效
# sysctl -p


也可以,采用如下命令临时生效

# sysctl -w net.ipv4.ip_forward=1

验证

# cat /proc/sys/net/ipv4/ip_forward 

windows客户端添加路由,也可以实现访问

route add 172.16.1.0 mask 255.255.255.0 172.16.1.254


将转发规则屏蔽,则无法访问
# iptables -P FORWARD DROP


对常见服务的放行实例

放行192.168.8.39中80口的访问
# iptables -A FORWARD -s 172.16.1.10 -d 192.168.8.39 -p tcp --dport 80 -j ACCEPT
# iptables -A FORWARD -d 172.16.1.10 -s 192.168.8.39 -p tcp --sport 80 -j ACCEPT


放行172.16.1.0/24网段对192.168.8.0网段22号端口的访问
# iptables -A FORWARD -s 172.16.1.0/24 -d 192.168.8.0/24 -p tcp --dport 22 -j ACCEPT
# iptables -A FORWARD -s 192.168.8.0/24 -d 172.16.1.0/24 -p tcp --sport 22 -j ACCEPT


重新编写规则
# iptables -F FORWARD
# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
# iptables -R FORWARD 2 -d 192.168.8.39 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT


nat规则举例


初始化:
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
//需要accept否则将无法通过路由转发任何数据包
# iptables -P FORWARD ACCEPT


模拟dnat功能之互联网访问局域网服务器


外网端:172.16.1.10
内网端:192.168.8.39


//将访问172.16.1.254 80端口的服务映射到8.89的80端口上
# iptables -t nat -F
# iptables -t nat -A PREROUTING -d 172.16.1.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.8.39


在目标8.39的web日志中可以看到是172.16.1.10访问的,而不是192.168.8.40路由访问


禁止172.16.1.10的IP访问
# iptables -I FORWARD -s 172.16.1.10 -j REJECT


通过外网地址172.16.1.254的22022端口访问192.168.8.39的22号端口(相当于端口映射)
# iptables -t nat -A PREROUTING -d 172.16.1.254 -p tcp --dport 22022 -j DNAT --to-destination 192.168.8.39:22






模拟snat功能之局域网访问互联网应用

172.16.1.10 和 172.16.1.254的eth1都放置于 vmnet2虚拟交换环境中




充当路由功能的机器

外网接口:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.8.15
BROADCAST=192.168.8.255
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
NETWORK=192.168.8.0


DNS配置
/etc/resolve.conf
nameserver 192.168.8.251


内网接口:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth1


DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.16.1.254
BROADCAST=172.16.1.255
NETMASK=255.255.255.0
NETWORK=172.16.1.0


内网的机器:

172.16.1.10
DNS:192.168.8.251
GAWEWAY:172.16.1.254


配置192.168.8.251
# vim /etc/sysctl.conf
打开防火墙转发功能
net.ipv4.ip_forward = 1


sysctl -p 使配置生效


在防火墙上添加规则,对来自内网 172.16.1.0网段的机器进行源地址转换
# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 192.168.8.15



测试在内网机器中可以访问互联网


tupdump抓包

nginx用来做什么?

    静态资源的web服务器

   http服务器反向代理

 

访问量统计网站:

tupdump抓包

详细的文档见http://blog.csdn.net/nanyun2010/article/details/23445223/

基本语法

========
过滤主机
--------
抓取所有经过 eth1,目的或源地址是 192.168.1.1 的网络数据
# tcpdump -i eth1 host 192.168.1.1
源地址
# tcpdump -i eth1 src host 192.168.1.1
目的地址
# tcpdump -i eth1 dst host 192.168.1.1
过滤端口
--------
抓取所有经过 eth1,目的或源端口是 25 的网络数据
# tcpdump -i eth1 port 25
源端口
# tcpdump -i eth1 src port 25
目的端口
# tcpdump -i eth1 dst port 25网络过滤
--------
# tcpdump -i eth1 net 192.168
# tcpdump -i eth1 src net 192.168
# tcpdump -i eth1 dst net 192.168
协议过滤
--------
# tcpdump -i eth1 arp
# tcpdump -i eth1 ip
# tcpdump -i eth1 tcp
# tcpdump -i eth1 udp
# tcpdump -i eth1 icmp
常用表达式
----------
 : ! or "not" (去掉双引号)
 : && or "and"
 : || or "or"
抓取所有经过 eth1,目的地址是 192.168.1.254  192.168.1.200 端口是 80  TCP 数据
# tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dsthost
192.168.1.200)))'
抓取所有经过 eth1,目标 MAC 地址是 00:01:02:03:04:05  ICMP 数据
# tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
抓取所有经过 eth1,目的网络是 192.168,但目的主机不是192.168.1.200  TCP 数据

# tcpdump -i eth1 '((tcp) and ((dst net192.168) and (not dst host 192.168.1.200)))'

 

只抓 SYN 
# tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'
 SYN, ACK
# tcpdump -i eth1 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] &tcp-ack != 0'
 SMTP 数据
----------
# tcpdump -i eth1 '((port 25) and (tcp[(tcp[12]>>2):4] = 0x4d41494c))'
抓取数据区开始为"MAIL"的包,"MAIL"的十六进制为0x4d41494c
 HTTP GET 数据
--------------
# tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x47455420'
"GET "的十六进制是 47455420
 SSH 返回
---------
# tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x5353482D'
"SSH-"的十六进制是 0x5353482D


# tcpdump -i eth1 '(tcp[(tcp[12]>>2):4] = 0x5353482D) and(tcp[((tcp[12]>>2)+4):2]
= 0x312E)'抓老版本的 SSH 返回信息,如"SSH-1.99.."

 

 DNS 请求数据
# tcpdump -i eth1 udp dst port 53
其他
----
-c 参数对于运维人员来说也比较常用,因为流量比较大的服务器,靠人工 CTRL+C 还是
抓的太多,于是可以用-c 参数指定抓多少个包。
# time tcpdump -nn -i eth0 'tcp[tcpflags] = tcp-syn' -c 10000 > /dev/null
上面的命令计算抓 10000  SYN 包花费多少时间,可以判断访问量大概是多少。

 

实时抓取端口号8000GET包,然后写入GET.log

tcpdump -i eth0 '((port8000) and (tcp[(tcp[12]>>2):4]=0x47455420))' -nnAl -w /tmp/GET.log

 



      本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1956943 ,如需转载请自行联系原作者








相关文章
|
5天前
|
Python
Python网络编程基础(Socket编程)绑定地址和端口
【4月更文挑战第9天】在UDP服务器编程中,我们首先需要创建一个UDP套接字,然后绑定一个本地地址和端口,以便客户端可以通过这个地址和端口与我们的服务器进行通信。下面,我们将详细讲解如何绑定地址和端口。
|
5天前
|
算法 网络架构
网络地址的相关计算(超详细,快来快来!)
网络地址的相关计算(超详细,快来快来!)
27 0
|
5天前
|
监控 网络协议 安全
【亮剑】当设备IP能ping通但无法上网时,可能是DNS解析、网关/路由设置、防火墙限制、网络配置错误或ISP问题
【4月更文挑战第30天】当设备IP能ping通但无法上网时,可能是DNS解析、网关/路由设置、防火墙限制、网络配置错误或ISP问题。解决步骤包括检查网络配置、DNS设置、网关路由、防火墙规则,以及联系ISP。预防措施包括定期备份配置、更新固件、监控网络性能和实施网络安全策略。通过排查和维护,可确保网络稳定和安全。
|
5天前
|
运维 安全 网络架构
【专栏】NAT技术是连接私有网络与互联网的关键,缓解IPv4地址短缺,增强安全性和管理性
【4月更文挑战第28天】NAT技术是连接私有网络与互联网的关键,缓解IPv4地址短缺,增强安全性和管理性。本文阐述了五大NAT类型:全锥形NAT(安全低,利于P2P)、限制锥形NAT(增加安全性)、端口限制锥形NAT(更安全,可能影响协议)、对称NAT(高安全,可能导致兼容性问题)和动态NAT(公网IP有限时适用)。选择NAT类型需考虑安全性、通信模式、IP地址数量和设备兼容性,以确保网络高效、安全运行。
|
5天前
|
机器学习/深度学习 安全 算法
|
5天前
|
安全 网络安全 定位技术
为何要隐藏IP地址?代理ip在网络安全和隐私保护中的作用是什么?
为何要隐藏IP地址?代理ip在网络安全和隐私保护中的作用是什么?
|
5天前
|
网络协议 Linux 网络安全
iptables 与 firewalld 防火墙
iptables 与 firewalld 防火墙
|
5天前
|
监控 网络协议 安全
Linux网络状态查看与防火墙管理
Linux网络状态查看与防火墙管理
44 0
|
5天前
|
网络协议 开发工具 Docker
iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9999 -j DNAT --to-destination 172.17.0.2:80 !
iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9999 -j DNAT --to-destination 172.17.0.2:80 !
19 1