Linux防火墙iptables限制几个特定ip才能访问服务器。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux防火墙iptables限制几个特定ip才能访问服务器。相关的知识,希望对你有一定的参考价值。

linux下要使用iptables限制只有指定的ip才能访问本机则需要先设置一个默认的规则
iptables有默认的规则,它可以适用于所有的访问

因为只有指定或特定的ip地址才能访问本机
所以可以将默认的规则设置为所有访问全部阻止(当然这里需要注意下,如果你要设置的机器是在远端,比如vps则需要注意在设置默认规则的同时要将与该服务器链接的ip添加进白名单,否则在设置完默认阻止后你也无法访问这台服务器,也无法再进行操作了,我们可以使用分号;或者&&来在同一个命令行下来完成默认阻止和将自己的ip添加进白名单,假如你的ip地址为1.2.3.4则可以这样输入iptables -P INPUT DROP;iptables -A INPUT -s 1.2.3.4 -p tcp -j ACCEPT,或者也可以指定一个端口)
设置默认规则后则可以添加白名单了
比如允许2.3.4.5访问则可以
iptables -A INPUT -s 2.3.4.5 -p tcp -j ACCEPT

如果要限定的不是整个服务器而只是该服务器中的某个服务
比如web服务(一般端口在80,https在443)
则我们可以使用0.0.0.0/0来阻止所有的ip地址
比如

iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 80 -j DROP
以及
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 443 -j DROP
来阻止所有访问web服务器的ip地址
然后再添加指定的ip到白名单
比如添加1.2.3.4,我们可以
iptables -A INPUT -s 1.2.3.4 -p tcp --dport 80 -j ACCEPT
如果我们允许某个网段下的所有ip都可以访问的话比如1.2.3.[0-255],我们可以
iptables -A INPUT -s 1.2.3.0/24 -p tcp --dport -j ACCEPT

总之不管是阻止所有的服务还是只阻止指定的服务
我们可以先将默认的规则设置为所有ip都不可访问
然后再手动添加ip地址到白名单
参考技术A 阻止一个IP访问本机
sudo iptables -t filter -A INPUT -s 那个IP -i eth0 -j DROP
阻止本机访问一个IP
sudo iptables -t filter -A OUTPUT -s 那个IP -i eth0 -j DROP追问

我想要几个特定的内网IP 访问我的数据库服务器(redhat)

参考技术B 要限制哪几个特定IP?访问什么服务器?问问题能不能说得具体点?

既然你没说那我只能自己举例子了:
内网是192.168.1.0/24,限制只有192.168.100和192.168.1.200能访问WEB服务器。
将WEB服务器的INPUT链设置成默认拒绝
iptables -P INPUT DROP
然后再添加下面两条规则
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -s 192.168.1.200 -j ACCEPT本回答被提问者和网友采纳
参考技术C

linux下要使用iptables限制只有指定的ip才能访问本机则需要先设置一个默认的规则
iptables有默认的规则,它可以适用于所有的访问。因为只有指定或特定的ip地址才能访问本机

延展阅读:总之不管是阻止所有的服务还是只阻止指定的服务,我们可以先将默认的规则设置为所有ip都不可访问,然后再手动添加ip地址到白名单。

参考技术D 兔~*子&IP ,支持手机和电脑用的,IP覆盖全国,IP很多
你如果需要改不同的IP地址,刷网站点击量,这个对你有很大帮助
一键换IP,特别的方便
解决网络卡顿

iptables防火墙

Linux的防火墙主要工作在网络层,针对TCP/IP数据包实现过滤和限制,属于包过滤防火墙(或称为网路层防火墙)。

 

1.LINUX防火墙:Netfilteriptables的主要区别如下:

netfilter 位于Linux内核中的包过滤功能体系

称为Linux防火墙的内核态

iptables 位于/sbin/iptables,用来管理防火墙规则的工具

称为Linux防火墙的用户态

 

  规则的作用:对数据包进行过滤或处理

 

2.规则表:

表的作用:容纳各种规则链

表的划分依据:防火墙规则的作用相似

默认包括4个规则表

raw表:确定是否对该数据包进行状态跟踪
       mangle表:为数据包设置标记
       nat表:修改数据包中的源、目标IP地址或端口
       filter表:确定是否放行该数据包(过滤)

3.规则链

      链的作用:容纳各种防火墙规则

  链的分类依据:处理数据包的不同时机

 

默认包括5种规则链

 INPUT:处理入站数据包
  OUTPUT:处理出站数据包
  FORWARD:处理转发数据包
  POSTROUTING链:在进行路由选择后处理数据包
  PREROUTING链:在进行路由选择前处理数据包

4.默认的表、链结构示意图

技术分享

6.规则表之间的顺序

raw?mangle?nat?filter

6.规则链之间的顺序

入站:PREROUTING?INPUT
出站:OUTPUT?POSTROUTING
转发:PREROUTING?FORWARD?POSTROUTING

7.规则链内的匹配顺序

按顺序依次检查,匹配即停止(LOG策略例外)

若找不到相匹配的规则,则按该链的默认策略处理

 

8.基本语法:

iptables  [-t 表名]  选项  [链名]  [条件]  [-j 控制类型]

  默认处理filter

 

9.数据包的常见控制类型

ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配

例子:在filter表的input链中插入(-I)一条规则,拒绝发给本机的icmp协议的数据包

[[email protected]~]# iptables -t filter -I INPUT -p icmp -j REJECT

10.添加新的规则

 

选项:

-A:在链的末尾追加一条规则

-I在链的开头(或指定序号)插入一条规则

    -D: 删除指定链中的某一条规则

    -L:制定并列出

    -F:清空指定链中的所有规则

    -P:设置指定链中的默认策略

    -n:使用数字形式

    -v:查看规则列表时显示详细信息

    -h:查看命令的详细信息

    -line-numbers:查看并显示序列号

添加一条防火墙规则

[[email protected] ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT

添加的两条规则分别位于filter表的第一条和第二条

[[email protected]~]# iptables -I INPUT -p udp -j ACCEPT
[[email protected]~]# iptables -I INPUT 2 -p icmp -j ACCEPT

12.查看规则表

[[email protected]~]#  iptables -L INPUT --line   
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere            
2    ACCEPT     icmp --  anywhere             anywhere            
3    REJECT     icmp --  anywhere             anywhere            reject-with icmp-port-unreachable 
4    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
5    ACCEPT     icmp --  anywhere             anywhere            
6    ACCEPT     all  --  anywhere             anywhere            
7    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
8    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
9    ACCEPT     tcp  --  anywhere             anywhere

13. 删除,清空规则

[[email protected]~]#  iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0   

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22

REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0

删除INPUT

[[email protected] ~]# iptables -D INPUT 3

14.设置默认策略

iptables的各条链中,默认策略是规则匹配的最后一个环节,当找不到任何一条能够匹配数据包的规则时,则执行默认策略

[[email protected]~]# iptables -t filter -P FORWARD DROP
[[email protected]~]# iptables -t filter -P OUTPUT ACCEPT        

15.通用匹配

 

1)协议匹配

丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙的除icmp协议之外的数据包

[[email protected]~]# iptables -I INPUT -p icmp -j DROP
[[email protected]~]# iptables -A FORWARD ! -p icmp -j ACCEPT

2)地址匹配

拒绝转发源地址为192.168.1.11的数据,允许转发源地址位于192.168.7.0/24网段的数据

[[email protected]~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
[[email protected]~]# iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT

3)网络接口匹配

若要丢弃从外网接口访问访问防火墙本机且源地址为私有地址的数据包

[[email protected]~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
[[email protected]~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
[[email protected]~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP

隐含匹配

1) 端口匹配

允许为网段192.168.4.0/24转发DNS查询数据包

[[email protected]crushlinux~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
[[email protected]crushlinux~]# iptables -A FORWARD -d 192.168.4.0/24 -p udp --dport 53 -j ACCEPT

1) ICMP类型匹配

要禁止从其他主机ping本机,但是允许本机ping其他主机

[[email protected]crushlinux~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[[email protected]crushlinux~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[[email protected]crushlinux~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[[email protected]crushlinux~]# iptables -A INPUT -p icmp -j DROP

列出所有支持类型

[[email protected]crushlinux~]# iptables -p icmp –h
Valid ICMP Types:
any
echo-reply (pong)
destination-unreachable
   network-unreachable
   host-unreachable
……………………………………………..

显示匹配

1) 多端口匹配

允许本机开放25,80,110,143端口

[[email protected]crushlinux ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

2) IP范围匹配

禁止192.168.4.21-192.168.4.28之间的TCP数据包

[[email protected]crushlinux ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT

3) MAC地址匹配

根据mac地址封锁主机

[[email protected]crushlinux ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:a9:8a:dc -j DROP

4) 状态匹配

禁止转发与正常TCP连接无关的非—syn请求数据包

[[email protected]crushlinux ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

只开放本机的80端口,但对发给本机的TCP应答数据包予以放行,其它入站数据包均丢弃,则对应的入站控制规则

[[email protected]crushlinux ~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[[email protected]crushlinux ~]# iptables -I INPUT -p tcp -m state --state  ESTABLISHED -j ACCEPT
[[email protected]crushlinux ~]# iptables -P INPUT DROP

 

 

以上是关于Linux防火墙iptables限制几个特定ip才能访问服务器。的主要内容,如果未能解决你的问题,请参考以下文章

Linux防火墙iptables限制几个特定ip才能访问服务器。

Linux中的防火墙----iptables

Linux防火墙firewalld只允许特定IP访问

iptables限制同一IP连接数,防防CC/DDOS攻击

linux iptables详解

iptables防火墙