博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iptables防火墙
阅读量:4229 次
发布时间:2019-05-26

本文共 9572 字,大约阅读时间需要 31 分钟。

一、iptables防火墙

 

firewalld  RHEL7   (底层还是调用包过滤防火墙iptables)

iptables    RHEL6

 

防火墙:隔离公网和私网

硬件防火墙、软件防火墙

表:防火墙的功能项

链:数据包传输的方向

表:raw(状态跟踪表)   mangle(包标记表)  nat(地址转换表)  fillter(过滤表)

INPUT链:处理进入防火墙的数据包(不管私网或公网)

OUTPUT链:从防火墙出去的数据包

FORWARD链:匹配(处理)经过防火墙服务器的数据包(转发)

POSTROUTING(路由后):对数据包作路由选择后应用此链中的规则(所有的数据包出来的时候都先由这个链处理)

数据包到达目标主机经过的路径;到达我的防火墙,已知道你要去的路径,我要修改你的访问路径(路由选路之后要对他处理)

PREROUTING(路由前):对数据包作路由选择前应用此链中的规则(所有数据包进来时都先由这个链处理)

数据到达目标还没选好传输的路径,到达防火墙给他改要到达的目标主机

4表----->5链------>规则(行)

包过滤匹配流程:

顺序比对:匹配即停止(LOG记日志除外)逐行处理

若无任何匹配,则按该链的默认策略处理

 

 

  • 命令用法

格式:iptables  [-t 表名]不写则默认filter  选项 [链名] [条件] [-j 目标操作(动作)]放行,丢弃

选项/链名/动作(目标操作)用大写

可以不指定表,默认filter表

可以不指定链,默认为对应表的所有链

如果没有匹配的规则,则使用防火墙默认规则(相当于最下面的规则)

 

 

动作(目标操作)

ACCEPT:允许通过/放行

DROP:直接丢弃,不给任何回应

REJECT:拒绝通过,必要时会给出提示

LOG:记录日志,然后传给下一条规则(匹配即停止的唯一例外)

 

选项

添加规则 -A 在链的末尾追加一条规则
  -I 在链的开头(或指定序号)插入一条规则
查看规则 -L 列出所有的规则条目 
  -n 以数字形式显示地址、端口等信息
  --line-numbers 查看规则时,显示规则的序号
删除规则 -D 删除链内指定序号(或内容)的一条规则
  -F 清空所有的规则
默认策略 -P 为指定的;链设置默认规则

 

所有链的初始默认规则均为ACCEPT

 

 

 

 

systemctl stop firewalld

systemctl disable firewalld

yum -y install iptables-services

systemctl start iptables

systemctl status iptables

 

iptables -t filter -L 

iptables -t filter -L  -n
iptables -t filter -Ln
iptables -t filter -nL
 iptables -t filter -nL  --line-numbers
iptables -t nat -nL  --line-numbers
iptables -t mangle -nL  --line-numbers
 iptables -t raw  -nL  --line-numbers
  iptables -L
 iptables -t  filter  -L
 iptables -t filter -nL
iptables -t filter -nL --line-numbers
 iptables -t  -nL --line-numbers
 iptables -t mangle -nL --line-numbres
iptables -t mangle -nL --line-numbers
iptables -t raw -nL --line-numbers
 iptables -t raw -nL OUTPUT --line-numbers
 iptables -t nat -nL OUTPUT --line-numbers
 iptables -t filter  -nL  OUTPUT --line-numbers
 iptables -t filter -nL INPUT --line-numbers
 iptables -t filter -nL FORWARD --line-numbers
iptables  -t filter  -D INPUT 3
 iptables -t filter  -nL INPUT  --line-numbers 
 iptables -t filter -F INPUT 
 iptables -t filter -nL  INPUT --line-numbers 
  iptables -t filter -nL INPUT --line-numbers 
 iptables -t filter -L
 iptables -t filter -F
  iptables -t nat   -F
 iptables  -t raw -F
 iptables -t mangle  -F
 iptables -t filter  -nL --line-numbers
 

 

 

  • fillter表控制       主机型防火墙(使用防火墙保护本机)

开启内核的IP转发

作为网关、路由的必要条件

echo 'net.ipv4.ip_forward=1'  >> /etc/sysctl.conf 或 echo 1 > /proc/sys/net/ipv4/ip_forward

 

匹配条件

  • 基本匹配条件 

通用匹配

可直接使用,不依赖于其他条件或扩展

包括网络协议、ip地址、网络接口等条件

隐含匹配

要求以特定的协议匹配作为前提

包括端口、TCP标记、ICMP类型等条件

需取反条件时,用“ ! ”

通用匹配 协议匹配 -p   协议名
  地址匹配 -s 源地址、-d 目标地址
  接口匹配 -i 收数据的网卡、 -o 发数据的网卡
隐含匹配 端口匹配 --sport  源端口 、  -dport 目标端口
  ICMP类型匹配 --icmp-type  ICMP类型(echo-reply回应 | echo-request请求)

例:

封禁IP地址/网段

主机防护,针对入站访问的源地址

iptables -A INPUT -s 192.168.4.50 -j DROP

网络保护,针对转发访问的源地址

iptables -A FORWARD -s 192.168.4.0/24 -j DROP


[root@host51 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT      #添加规则,重启失效

[root@host51 ~]# iptables -t filter -P INPUT DROP                                      #默认拒绝

[root@host51 ~]# iptables -nL --line-numbers

[root@host51 ~]# iptables -t filter  -I INPUT  -s 192.168.4.50 -p tcp --dport 22 -j DROP
[root@host51 ~]# iptables -t filter -nL
[root@host50 ~]# ssh 192.168.4.51
systemctl stop  iptables                    #网络yum被限制,需关闭

yum -y install httpd

systemctl start  httpd
systemctl start  iptables

iptables -nL                                      #服务重启规则还原

iptables -F

iptables -t filter  -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -t filter  -P INPUT  DROP

iptables -t filter  -I INPUT 1  -s 192.168.4.50 -p tcp --dport 22 -j DROP       #拒绝该主机22端口的规则 I插入在 指定1序号规则的前面

iptables -t filter -nL

iptables-save  > /etc/sysconfig/iptables                                     #保存到防火墙规则文件,下次重启则加载里面的规则了
 

echo "web51"  > /var/www/html/index.html

curl 192.168.4.51                                            #受防火墙限制无法访问
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT     #开放进来本机目标端口80    

curl 192.168.4.51                #再访问该网页

可能会自己访问自己会经过回环口,开放回环口允许访问

iptables -t filter -I INPUT -i lo -j ACCEPT 

curl 192.168.4.51    自己访问自己网站

iptables -t  filter  -A INPUT  -p icmp  --icmp-type echo-reply(ping回应) -j ACCEPT    #

[root@host52 ~]# iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
DROP       tcp  --  192.168.4.50         0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 0
 

 

扩展匹配条件

有对应的防火墙模块支持

-m  扩展模块 --扩展条件  条件值

MAC地址匹配 -m  mac  --mac-source  MAC地址
多端口转发 -m multiport --sports  源端口列表
  -m multiport --dports 目标端口列表
IP范围匹配 -m iprange --src-range IP1-IP2
  -m  iprange --dst-range IP1-IP2

 

MAC地址匹配

[root@host52 ~]# iptables -t filter  -I INPUT 4 -p icmp --icmp-type echo-request -m mac --mac-source 52:54:00:37:78:11 -j DROP

#在序号4前插入规则(此mac地址本机不接收请求)

多端口匹配

[root@host52 ~]# iptables -t filter  -A INPUT  -p tcp -m multiport  --dport 22,80 -j ACCEPT 

#同时添加22,80端口为开放

IP范围匹配

[root@host52 ~]# iptables -t filter  -A INPUT -m iprange  --src-range 192.168.4.250-192.168.4.254 -p icmp --icmp-type echo-request -j ACCEPT                         #此时只有该网段可以ping通(开放接收请求)

            

[root@host52 ~]# arp  -n          #查看谁ping过自己

 

             

 

 

  • nat表典型应用

网络型防火墙

A  eth0 192.168.4.51  ;公网网站http ; iptables停掉
B eth0/eth1 192.168.4.52/192.168.2.52  ;iptables防火墙开启
C eth1 192.168.2.54 ; gw 192.168.2.52 ; iptables停掉  ; 访问A网站测试

192.168.2.54主机模拟私有网络的pc

[root@host54 ~]# systemctl stop NetworkManager

[root@host54 ~]# route  add default gw 192.168.2.52

# route  del default gw 192.168.2.52  添加错了可以删掉

[root@host54 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.52    0.0.0.0         UG    0      0        0 eth1
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 eth1
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

 

192.168.4.52主机(防火墙服务器)

eth0 192.168.4.52  模拟公网地址

eth1 192.168.2.52 模拟私网地址

运行iptales服务并清空所有表的默认规则

[root@host50 demo]# echo 1 > /proc/sys/net/ipv4/ip_forward       #该文件不能vim修改,开启路由转发功能

[root@host52 ~]# vim /etc/rc.local                                            #开机自动执行

echo 1 > /proc/sys/net/ipv4/ip_forward

[root@host52 ~]# chmod +x  /etc/rc.local 

[root@host52 ~]# sysctl -a | grep ip_forward

net.ipv4.ip_forward = 1

[root@host52 ~]# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

[root@host52 ~]# sysctl -p

192.168.4.51 模拟公网的网站服务器

systemctl stop iptables

yum -y install httpd

echo AAAA  > /var/www/html/index.html

echo BBBB > /var/www/html/a.html

 systemctl start httpd

  路由后处理 局域网/24   SNAT源地址转换    公网

 

192.168.4.52 在防火墙上写规则,具体如下

iptables -t nat -A POSTROUTING -s 192.168.2.0/24(局域网端地址) -p tcp(外网接口) --dport 80 -j SNAT --to source(外网接口的ip地址)  192.168.4.52 或

iptables -t nat -A POSTROUTING  -s 192.168.2.0/24  -o eth0 -j MASQUERADE主要针对外网接口的ip地址不固定的情况

对于ADSL宽带拨号连接,网络接口可写为ppp+

iptables-save  > /etc/sysconfig/iptables

iptables -t nat  -nL  POSTROUTING
 

192.168.2.54 模拟内网

systemctl  stop firewalld

 systemctl  disable firewalld

yum -y  install iptables-services

systemctl  start iptables

curl http://192.168.4.51/a.html

ifdown eth0     #如有4.0网段需关掉

 

192.168.4.51 查看http访问日志

[root@host51 ~]# tail   /var/log/httpd/access_log 

192.168.4.52 - - [31/May/2019:09:57:42 +0800] "GET /a.html HTTP/1.1" 200 5 "-" "curl/7.29.0"
 

 

POSTROUTING源地址转换

入站:PREROUTING   ---->  INPUT

出站:OUTPUT -----> POSTROUTING

转发:PREROUTING   ---> FOREARD  ---> POSTROUTING


 

来自转载:

Iptables企业应用

 

 

  1. 很多中小企业和网吧利用iptables作企业的NAT路由器,传统的路由器供企业内部员工上网。
  2. IDC机房的服务器可以用Iptables硬件防火墙作为主机的防护措施,由于部署硬件防火墙需要很大投资,一般很少机房部署硬件防火墙。
  3. 可以结合squid作为企业内部商务的透明代理。
  4. 当将iptables作为企业NAT路由器时,我们可以使用iptables的扩展模块屏蔽P2P流量,还可以禁止非法网页。
  5. iptables还可以用于外网IP向内网IP映射。我们可以假设有一家ISP提供园区Internet接入服务,为了方便管理,该ISP分配给园区用户的ip地址都是内网IP,但是部分用户要求建立自己的web服务器对外发布信息。我们可以在防火墙的外部网卡上绑定多个合法IP地址,然后通过IP映射使发给其中某一个IP地址的包转发至内部用户的Web服务器上,这样内部的Web服务器也可以对外提供服务了
  6. 可以防止轻量级的DOS攻击。比如ping攻击及SYN洪水攻击,我们利用iptables来做相关安全策略还是很有效果的。

 

阻止指定IP地址

iptables  -A  INPUT -s 源ip地址   -j  DROP

ipatebls -A INPUT -i  eth0 -p tcp -s  源ip地址  -j DROP

允许所有ssh链接请求

iptables -A INPUT  -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED  -j ACCEPT

使用multiport将多个规则结合在一起i

允许多个端口从外界连入,除了为每个端口都写一条独立的规则外,我们可以用multiport将其组合成一条规则。如下所示:  例:允许所有ssh,http,https的流量访问

 

iptables -A INPUT -i eth0 -p tcp -m multiport --dport 22,80 ,443 -m state --state NEW,ESTABLISHED -j ACCEPT 

iptables -A OUTPUT  -o eth0 -p tcp  -m multiport  --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

 

负载平衡传入的网络流量

使用iptables可以实现传入web流量的负载均衡,我们可以传入web流量负载平衡使用iptables防火墙规则。  例:使用iptables nth将HTTPS流量负载平衡至三个不同的ip地址。

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

允许外部主机ping内部主机

  1. iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  2. iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

允许内部主机ping外部主机

  1. iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
  2. iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

允许来自指定网络的MySQL连接请求

很多情况下,MySQL数据库与web服务跑在同一台服务器上。有时候我们仅希望DBA和开发人员从内部网络(192.168.100.0/24)直接登录数据库,可尝试以下命令:

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
 

防止DoS攻击

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

上述例子中:
-m limit: 启用limit扩展
–limit 25/minute: 允许最多每分钟25个连接(根据需求更改)。
–limit-burst 100: 只有当连接达到limit-burst水平(此例为100)时才启用上述limit/minute限制

端口转发

例:将来自422端口的流量全部转到22端口。  这意味着我们既能通过422端口又能通过22端口进行ssh连接。启用DNAT转发。

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

除此之外,还需要允许连接到422端口的请求

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
 

 

 

 

 

 

 

 

 

 

你可能感兴趣的文章
Web Stotage——本地储存详解及案例
查看>>
File Reader文件操作
查看>>
地理位置服务——navigator.geolocation
查看>>
地理位置服务——百度地图API
查看>>
js拖放事件详解及实战
查看>>
js字符串常用属性与方法
查看>>
C++递归算法案例
查看>>
C++算法——异或运算解决出现次数问题
查看>>
C++数据结构——顺序栈(基本代码实现与案例)
查看>>
C++数据结构——链队列(基本代码实现与案例)
查看>>
C++数据结构——顺序表的查找(简单顺序查找、有序表的二分查找、索引顺序的查找)
查看>>
Hive 常用统计查询语句
查看>>
对象存储产生背景、发展历史、原理架构、优缺点、应用场景及开源项目对比
查看>>
Apache Ozone 分布式对象存储系统相关文档汇总
查看>>
Ozone 与 HDDS 的区别与联系
查看>>
maven失败测试用例rerun插件使用方法
查看>>
Python基础(三)
查看>>
Python入门NLP(二)
查看>>
四行Python代码,你也能从图片上识别文字!
查看>>
内网映射外网工具-ngrok
查看>>