Linux操作系统-10-Iptables

news2024/11/25 18:28:29

一、iptables防火墙介绍

无论IPtables还是Firewalld都是对netfilter防火墙框架进行的命令层的封装

1、三件事

防火墙做的三件事:

  • 获取流量
  • 匹配规则
  • 给出反馈(accept、drop)

iptables的特性:表、链、规则

2、五张表

五张表:filter、nat、mangle、raw、security,表主要用于将不同的规则存储到不同的表中

(1)filter表:默认表,负责过滤数据包,使用频率最高

(2)nat表:用于网络地址转换(IP、端口)和流量转发,使用频率较低

(3)mangle表:主要应用在修改数据包、流量整形、给数据包打标识

(4)raw表:这个表很少被用到,主要用于配置连接跟踪相关内容,使用频率较少

(5)security表:这个表用于安全Linux的防火墙规则,是iptables最近新增的表,使用频率较少

3、五条链

防火墙的链决定流量的方向,规则里边一定要定义好这条规则是入站规则input,还是出站规则output,还是转发规则,还是路由前规则prerouting,还是路由后规则postrouting,规则里边很重要的一个信息就是数据包的方向是什么。

(1)input:匹配目标Ip是本机的数据包,入站

(2)output:出口数据包,出站

(3)forward:匹配流经本机的数据包、转发

(4)prerouting:修改目的地址,用来做DNAT,如:把内网中的80端口映射到互联网端口

(5)postrouting:修改源地址,用来做SNAT,如:局域网共享一个公网IP接入Internet

4、规则

基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后依次执行,遇到匹配的规则就不再继续向下检查,如果遇到不匹配的规则则会继续向下进行。

二、安装配置iptables

systemctl stop firewalld
yum install iptables iptables-services
systemctl start iptables 

#如果遇到Failed to start iptables\xc2\xa0.service: Unit not found的问题,莫慌。这是因为在最新的Linux系统中,iptables服务已经被iptables.service所取代。因此,你应该使用以下命令来启动iptables服务,使用下面命令即可启动iptables:
systemctl start iptables.service

firewalld默认在没有设置规则的情况下,是拒绝所有流量,而iptables默认没有设定规则的情况下,是允许所有流量,通常情况下来说防火墙是条件白名单,所以使用iptables时先把防火墙所有端口都关闭。

三、基础命令使用

1、iptables -L

iptables -L列出目前已有的规则,显示服务名称

iptables -nL列出目前已有的规则,显示端口号

#List the rules in a chain or all chains
[root@bogon ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         


#将端口号以数字的形式显示默认filter表中的规则
[root@bogon ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
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

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

2、iptables -t

iptables -t filter -nL

[root@bogon ~]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
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

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@bogon ~]# 

iptables -t nat -nL

[root@bogon ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination 

3、iptables -A 与iptables -I

  • -A选项代表append追加的方式     

  • -I input   插入到最前面,优先级最高

  • 通常情况下来说,使用iptables防火墙要先把所有端口都关闭,然后根据需要再添加放行规则

#所有入站的流量全被丢弃,包括ssh的流量  
[root@bogon ~]# iptables -A INPUT -j DROP
[root@bogon ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@bogon ~]# 

两条规则合在一起就是只允许外边的机器访问22号端口,其他一概丢弃
iptables -A INPUT -j DROP             

iptables -I INPUT -p tcp --dport 22 -j ACCEPT      #打开目标端口22,接受流经该端口的流量

添加之后,iptables -nl看下,在DROP之前加了22号端口的ACCEPT

[root@bogon ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[root@bogon ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@bogon ~]# 

iptables -I INPUT -j DROP               #所有入站的流量全被丢弃,包括ssh的流量

iptables -I OUTPUT -j DROP #所有出站流量全部丢弃,包括SSH响应

这两条命令一旦执行,所有流量无法进来,所有流量无法出去,断网状态

  • xshell此时也连不上了,因为请求可以到达服务器但是响应发不出去
  • 允许22号端口访问

iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT#允许22端口,

注意:dport和sport的方向

小知识点:

 反弹shell:我访问不了目标,被目标服务器的防火墙挡了,考虑反弹shell,让它来访问我。

允许80端口

注意:dport和sport的方向

iptables -I INPUT -p tcp --dport 80 -j ACCEPT#允许80端口,

iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT#允许80端口。

不能访问外网,如www.woniuxy.com

因为OUTPUT规则里面是sport 80,也就是允许自己的80端口可以被访问

要想访问外网OUTPUT规则里面应该是dport 80开放才行

所以还是没办法访问www.woniuxy.com

对外提供服务的同时,阻止服务器主动去连外网,是不是我们一些攻击手段里的反弹shell这种情况,攻击之后通过执行一些命令去访问外网下载木马程序的这些情况就可以杜绝了。

关于DROP和REJECT

DROP:直接丢弃数据包,不会向源端任何回复

REJECT:拒绝接收数据包,并向源端发送拒绝响应

(1)禁ping 

a、通过DROP实现禁PING
[root@server234 ~]# iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
[root@server234 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
DROP       all  --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere             icmp echo-request

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
#保存iptables规则
[root@server234 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
#重启iptables
[root@server234 ~]# service iptables restart
Redirecting to /bin/systemctl restart iptables.service
[root@server234 ~]# 

客户端请求:

root123@agent90:~$ ping 192.168.1.234
PING 192.168.1.234 (192.168.1.234) 56(84) bytes of data

如果你想禁止服务器响应 Ping 请求,你应该添加一条规则来拒绝 ICMP Echo Reply
而不是将所有 ICMP 流量都允许通过。你可以通过添加如下规则来实现:
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP

iptables -A OUTPUT -p icmp --icmp-type echo-reply -j REJECT

b、通过REJECT实现禁PING
[root@server234 ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-prohibited
[root@server234 ~]# iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     icmp --  anywhere             anywhere             icmp echo-request reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     icmp --  anywhere             anywhere             icmp echo-reply reject-with icmp-port-unreachable
[root@server234 ~]# 

客户端请求

root123@agent90:~$ ping 192.168.1.234
PING 192.168.1.234 (192.168.1.234) 56(84) bytes of data.
来自 192.168.1.234 icmp_seq=1 Destination Host Prohibited
来自 192.168.1.234 icmp_seq=2 Destination Host Prohibited
来自 192.168.1.234 icmp_seq=3 Destination Host Prohibited
来自 192.168.1.234 icmp_seq=4 Destination Host Prohibited
来自 192.168.1.234 icmp_seq=5 Destination Host Prohibited
来自 192.168.1.234 icmp_seq=6 Destination Host Prohibited
^C
--- 192.168.1.234 ping 统计 ---
已发送 6 个包, 已接收 0 个包, +6 错误, 100% 包丢失, 耗时 5066 毫秒
c、允许某个IP地址PING

如果你要允许某些流量通过防火墙,你需要在这个默认规则之前添加允许的规则。例如,如果要允许某个特定IP的Ping请求通过防火墙,可以添加如下规则:

iptables -A INPUT -s 允许的IP地址 -p icmp --icmp-type echo-request -j ACCEPT

iptables -I INPUT -s 允许的IP地址 -p icmp --icmp-type echo-request -j ACCEPT

这个规则将允许来自特定IP的 Ping 请求通过防火墙。记得将 允许的IP地址 替换为实际的 IP 地址。因为防火墙规则是从上往下匹配的,A代表Append会添加在后面,I代表Insert会插入到最前面。

d、取消禁ping 

iptables -I INPUT -p icmp -j ACCEPT

[root@server234 ~]# iptables -I INPUT -p icmp -j ACCEPT
[root@server234 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere             icmp echo-request
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
DROP       all  --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere             icmp echo-request

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@server234 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@server234 ~]# service iptables restart

4、删除规则

iptables -L INPUT --line-numbers                       #查看入站规则的行号

iptables -L OUTPUT -p icmp -j ACCEPT            #查看出站规则的行号

iptables -D OUTPUT 3          #删除出站规则的第三条规则

iptables -nl                         

[root@server234 ~]# iptables -L OUTPUT --line-numbers
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     icmp --  anywhere             anywhere            
2    DROP       icmp --  anywhere             anywhere             icmp echo-reply
3    ACCEPT     icmp --  anywhere             anywhere            
[root@server234 ~]# iptables -D OUTPUT 1
[root@server234 ~]# iptables -D OUTPUT 3
iptables: Index of deletion too big.
[root@server234 ~]# iptables -D OUTPUT 2
[root@server234 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere             icmp echo-request
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
DROP       all  --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere             icmp echo-request

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  anywhere             anywhere             icmp echo-reply
[root@server234 ~]# 

5、保存iptables规则 

所有规则,一旦重启iptables,所有的规则全会消失

yum install iptables-service        #需要提前安装iptables-services

service iptables save                  #将iptables规则保存下来

cat /etc/sysconfig/iptables                    #保存的规则都写到了这个文本里面

[root@server234 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@server234 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Sun Mar 31 18:08:36 2024
*mangle
:PREROUTING ACCEPT [2651:253097]
:INPUT ACCEPT [2638:251924]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1952:127059]
:POSTROUTING ACCEPT [1952:127059]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Sun Mar 31 18:08:36 2024
# Generated by iptables-save v1.4.21 on Sun Mar 31 18:08:36 2024
*nat
:PREROUTING ACCEPT [1684:116553]
:INPUT ACCEPT [1316:85560]
:OUTPUT ACCEPT [27:1684]
:POSTROUTING ACCEPT [27:1684]
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT
# Completed on Sun Mar 31 18:08:36 2024
# Generated by iptables-save v1.4.21 on Sun Mar 31 18:08:36 2024
*filter
:INPUT ACCEPT [865:68720]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1232:81545]
-A INPUT -p icmp -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sun Mar 31 18:08:36 2024

6、清空规则

iptables -F            #清空规则

iptables -F 命令用于清空所有防火墙规则,但是这些改变不会永久保存到磁盘,只会在当前会话中生效。如果你重启服务器,这些改变会被丢弃,并且恢复到之前的防火墙规则配置状态。无论是Flush清空还是Input新增,只要不保存,重启之后都不会生效,只是实时生效。

四、iptables进阶用法

1、设置服务器环境与外网隔离

要设置服务器环境无法访问外网,你可以通过配置防火墙规则来实现。具体来说,你可以使用 iptables 或 firewalld 在服务器上设置防火墙规则,阻止所有对外部网络的访问。

以下是使用 iptables 设置服务器无法访问外网的示例:

  • 首先,确保清空现有的 iptables 规则以免影响到你的配置:
iptables -F
  • 接下来,设置默认策略为拒绝所有输出流量:
iptables -P OUTPUT DROP
  • 然后,允许回环流量(本地主机之间的通信):
iptables -A OUTPUT -o lo -j ACCEPT
  • 最后,允许已经建立的连接的流量通过。这可以确保已经建立的连接(例如 SSH 连接)不会被阻止:
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 保存 iptables 规则以便重启后生效(如果可以访问外网的话):
service iptables save

完成以上步骤后,你的服务器将无法访问外网,但仍然可以进行本地通信和已建立的连接。

[root@server234 ~]# iptables -F
[root@server234 ~]# iptables -P OUTPUT DROP
[root@server234 ~]# iptables -A OUTPUT -o lo -j ACCEPT
[root@server234 ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@server234 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@server234 ~]# ping www.baiidu.com
ping: www.baiidu.com: Name or service not known
[root@server234 ~]# ping 192.168.1.90
PING 192.168.1.90 (192.168.1.90) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
^C
--- 192.168.1.90 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4109ms

[root@server234 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED


2、允许服务器访问指定网络 

思考:别人可以访问我的80端口,但我访问不了别人

服务器环境:
出站入站:只要匹配不到规则的全部DROP

服务器和其他服务器通信,比如站库分离,访问另一台电脑上的数据库,设定只能访问某一台电脑(添加白名单)

实验:

让服务器可以访问别的某台电脑,可以是内网也可以是外网

curl http://www.woniuxy.com/

对外访问提供http://www.woniuxy.com/网站服务的这台电脑,别的访问不了,添加白名单,避免攻击者使用curl、weget命令去访问其他电脑,下载其他内容。

画图:

  • 根据画图分析来看,出站配dp和d,入站配sp和s
  • 主要是搞清楚方向,不要空想画出来

允许本地访问外部IP地址和端口号,通过设定白名单的方式可以本机去访问别的服务器

#通过这种场景的设置,可以最大可能避免反弹shell和挖矿程序试图通过本地访问目标服务器下载恶意程序或执行恶意指令。

根据画图分析来看,出站配dp和d,入站配sp和s,先配出去的,再配进来的

iptables -I INPUT -i ens33 -p tcp -s 101.37.65.91 --sport 8088 -j ACCEPT

允许来自特定源 IP 地址(101.37.65.91)且源端口为 8088 的 TCP 流量通过指定的网络接口(ens33)。

规则解释:

  • -I INPUT:表示插入规则到 INPUT 链的顶部,这意味着这个规则将会在已有的规则之前生效。
  • -i ens33:指定接口为 ens33,即规则仅适用于从 ens33 网络接口接收到的数据包。
  • -p tcp:指定协议为 TCP。
  • -s 101.37.65.91:指定源 IP 地址为 101.37.65.91,即规则仅适用于来自该 IP 地址的数据包。
  • --sport 8088:指定源端口为 8088,即规则仅适用于源端口为 8088 的数据包。
  • -j ACCEPT:如果数据包符合上述条件,则接受它。

这个规则的作用是允许来自 IP 地址为 101.37.65.91 且源端口为 8088 的 TCP 数据包通过 ens33 网络接口进入服务器。

iptables -I OUTPUT -o ens33 -p tcp -d 101.37.65.91 --dport 8088 -j ACCEPT

[root@server234 ~]# iptables -I INPUT -i ens33 -p tcp -s 101.37.65.91 --sport 443 -j ACCEPT
[root@server234 ~]# iptables -I OUTPUT -o ens33 -p tcp -d 101.37.65.91 --dport 443 -j ACCEPT
[root@server234 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  101.37.65.91         anywhere             tcp spt:https
ACCEPT     tcp  --  101.37.65.91         anywhere             tcp spt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             101.37.65.91         tcp dpt:https
ACCEPT     tcp  --  anywhere             101.37.65.91         tcp dpt:http
ACCEPT     tcp  --  anywhere             101.37.65.91         tcp dpt:radan-http

访问测试

3、防止DDOS攻击

(1)限制来自客户端的TCP流量

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

下面是你提供的规则的含义:

  • -A INPUT:将规则附加到 INPUT 链,即所有进入服务器的数据包。
  • -p tcp:指定协议为 TCP。
  • --sport 80:指定源端口为 80,即来自客户端的流量。
  • -m limit --limit 25/minute --limit-burst 100:使用限速模块限制数据包速率,允许每分钟最多 25 个数据包,允许突发 100 个数据包。
  • -j ACCEPT:如果数据包符合上述条件,则接受它。

这个规则的作用是限制来自客户端(源端口为 80)的 TCP 连接请求速率,以防止过多的连接请求导致服务器过载。

可以同时添加多个端口,在 INPUT 链上添加了允许特定端口的 TCP 连接。

iptables -I INPUT -p tcp -m multiport --dport 80,22,443,3306 -j ACCEPT

规则解释:

  • -I INPUT:表示插入规则到 INPUT 链的顶部,这意味着这个规则将会在已有的规则之前生效。
  • -p tcp:指定协议为 TCP。
  • -m multiport --dport 80,22,443,3306:使用 multiport 模块来匹配多个目标端口,这里指定了端口号 80、22、443 和 3306。这意味着允许进入服务器的 TCP 流量中的目标端口是这些端口的都会被接受。
  • -j ACCEPT:如果数据包符合上述条件,则接受它。

这是一个常见的防火墙设置,允许 HTTP(80)、SSH(22)、HTTPS(443)和 MySQL(3306)等服务的连接请求通过防火墙。这样设置可以确保这些常用服务能够正常运行。

(2)限定服务器上发出的TCP流量 

 如果你想要限制服务器上发出的 TCP 流量(例如限制对外部 Web 服务器的访问速率),你应该将规则应用到 OUTPUT 链而不是 INPUT 链。例如:

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

这样的规则将限制服务器对外部 Web 服务器的连接请求速率。请根据你的需求选择适当的链来应用规则

4、端口转发   

(1)本地端口转发

本地端口转发    比如80端口关闭,开放一个莫名其妙的如45692端口对外访问,不知道80端口,可以避免协议猜测,本机端口转发也可直接把服务器网站端口设置成45692端口达到一样的效果。

应用场景 :外网端口和内网端口访问的不一样,这种情况就用端口转发,端口转发相对更灵活。

iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 80

(2)远程端口转发

远程端口转发,把本机接收到的请求转发到远程电脑和对应端口上(远程可以是本地局域网,也可以是公网服务器)。

远程端口转发(功能类似于负载均衡)

a、确保端口转发功能是启用的

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

sysctl -p /etc/sysctl.conf                 #修改生效

b、发得出去

PREROUTING上访问8888时,转发给目标服务器和目标端口

PREROUTING是先于FILTER执行的,所以不需要转发时允许8888端口ACCEPT

当别人访问本机192.168.112.188的8888端口的时候转发到101.37.65.91的80端口。

iptables -t nat -A PREROUTING -d 192.168.112.188 -p tcp --dport 8888 -j DNAT --to-destination 101.37.65.91:80

c、回得来

远程转发的服务器101.37.65.91的80端口路由到本机192.168.112.188,本机响应给客户端。

iptables -t nat -A POSTROUTING -d 101.37.65.91 -p tcp --dport 80 -j SNAT --to-destination 192.168.112.188

iptables -t nat -A POSTROUTING -d 101.37.65.91 -p tcp --dport 80 -j SNAT --to-destination 192.168.112.188

此时访问192.168.112.188:8888端口就访问到了蜗牛学院的官网

从客户端来说是不知道192.168.112.153这台远程电脑的存在的

钓鱼网站,社会工程学的内容

改本地host文件:访问的就是正常的URL网址,但是我把域名的DNS解析到我的IP地址上

DNS欺骗,看到的是攻击者做的钓鱼网站的页面

五、iptables命令参数

参数说明
-A添加一条规则,即添加在规则的最后
INPUT链名、常用、大写
RPREROUTING链名、大写
OUTPUT链名、大写
-I指定链中插入规则,即添加到规则的最前面
-s指定源地址,可以是IP地址,也可以是网段“192.168.1.10、24”;“-s”为空表示所有
-d目标地址
-p指定协议
--dport指定主机端口(本机开放或拒绝端口)
--sport指定主机端口(如:禁止连接对方某接口)
-i指定网卡名,表示报文流入的接口
-o指定网卡名,表示报文流出的接口
-j指定所需要的操作
ACCEPT允许
REJECT拒绝、拒绝提供服务
DROP拒绝,丢弃数据包不回应
--src-range源地址范围(如:拒绝某IP段访问)
--dsc-range目标地址的范围
--mac-source源主机的MAC地址
-t指定表名,默认是filter表
-v查看详细信息
-nvL --line-numbers查看filter表中规则的顺序
-nvL -t mangle查看mangle表中的防火墙规则
-F清空filter表
-I指定链中插入规则
-R替换规则
-m指定模块

希望通过IPtables在网络安全意识上有所加深!!!

这是后面做应急响应做安全加固,做防御,甚至做攻击分析过程中必不可少的核心技术!!!

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

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

相关文章

数据湖技术选型——Flink+Paimon 方向

文章目录 前言Apache Iceberg存储索引metadataFormat V2小文件 Delta LakeApache Hudi存储索引COWMOR元数据表 Apache PaimonLSMTagconsumerChangelogPartial Update 前言 对比读写性能和对流批一体的支持情况,建议选择Apache Paimon截止2024年1月12日数据湖四大开…

【计算机毕业设计】微信小程序:MHK自学平台的设计与实现——后附源码

🎉**欢迎来到我的技术世界!**🎉 📘 博主小档案: 一名来自世界500强的资深程序媛,毕业于国内知名985高校。 🔧 技术专长: 在深度学习任务中展现出卓越的能力,包括但不限于…

Swagger + SwaggerUI

用的是SpringBoot2、jdk11、<spring-boot.version>2.3.3.RELEASE</spring-boot.version> &#xff08;单纯的swagger还是不如knife界面好用好看&#xff09; 1.导入依赖 <dependency> <groupId>io.springfox</groupId> <art…

SpringBoot项目调用讯飞星火认知大模型

文章目录 注册讯飞星火平台&#xff0c;领取免费token引入SDKapplication.xml中进行配置config文件读取配置信息编写代码调用接口进行测试 官方文档&#xff1a; https://www.xfyun.cn/doc/spark/Web.html#_1-%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E 注册讯飞星火平台&#xff…

管道流设计模式结合业务

文章目录 流程图代码实现pomcontextEventContextBizTypeAbstractEventContext filterEventFilterAbstractEventFilterEventFilterChainFilterChainPipelineDefaultEventFilterChain selectorFilterSelectorDefaultFilterSelector 调用代码PipelineApplicationcontrollerentitys…

线上线下交友社区系统 可打包小程序 支持二开 源码交付!

社交网络的普及&#xff0c;人们交友的方式发生了巨大的变化。过去&#xff0c;我们主要通过线下的方式来结识新朋友&#xff0c;比如在学校、工作场所、社交活动或者兴趣小组中。然而&#xff0c;随着移动端软件的发展&#xff0c;线上交友也逐渐变得流行。 方便性&#xff1a…

FreeRTOS学习 -- 中断配置

一、什么是中断 中断时微控制器一个很常见的特性&#xff0c;中断是由硬件产生&#xff0c;当中断产生以后CPU就会中断当前的流程而去处理中断服务&#xff0c;Cortex-M内核的MCU提供了一个用于中断管理的嵌套向量中断控制器&#xff08;NVIC&#xff09;。 二、中断优先级分…

波士顿动力抛弃液压机器人Atlas,推出全新电动化机器人,动作超灵活

本周&#xff0c;机器人科技巨头波士顿动力宣布液压Atlas退役&#xff0c;并推出了下一代产品——专为实际应用而设计的全电动Atlas机器人&#xff0c;这也意味着人形机器人迈出了商业化的第一步。 Atlas——人形机器人鼻祖 Atlas&#xff08;阿特拉斯&#xff09;这个名字最…

为什么有的云渲染注册条件哪么多?有没有注册条件少的?

随着云渲染技术的普及&#xff0c;越来越多的设计师、艺术家和企业开始依赖这一强大的工具来加速创作过程。但是在我们注册账号的时候你会发现不同平台间的注册条件不同&#xff0c;一些平台在用户注册过程中设置了一系列繁琐的验证环节&#xff0c;让我们填那种无意义的数字或…

java体育馆使用预约平台的设计与实现(springboot+mysql源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的体育馆使用预约平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 体育馆使用预约平台的…

ruoyi-nbcio-plus基于vue3的多租户机制

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

饮料市场迎来“营养革命”?2024年饮料行业销售数据分析已出炉

随着健康意识的日益增强&#xff0c;消费者对于饮料的需求已经不再是单纯追求口感和美味&#xff0c;而是更加关注产品的营养价值和健康属性。在这种背景下&#xff0c;上海市卫生健康委近期启动了“首批营养健康指导试点项目”&#xff0c;其中饮料“营养选择”分级标识试点的…

DFS专题:力扣岛屿问题(持续更新)

DFS专题&#xff1a;力扣岛屿问题 开篇 每次做到DFS相关的题目都是直接跳过。蓝桥杯过后痛定思痛&#xff0c;好好学习一下DFS和BFS。先从DFS开始吧。 参考题解&#xff1a;nettee&#xff1a;岛屿类问题的通用解法、DFS 遍历框架 题目链接&#xff1a; 200.岛屿数量    …

机器学习波士顿房价

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接&#xff1a;https://pan.baidu.com/s/1deECYRPQFx8h28BvoZcbWw?pwdft5a 提取码&#xff1a;ft5a --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

FreeRTOS之动态创建任务与删除任务

1.本文是利用FreeRTOS来动态创建任务和删除任务。主要是使用FreeRTOS的两个API函数&#xff1a;xTaskCreate()和vTaskDelete()。 任务1和任务2是让LED0、LED1闪烁。任务3是当按键按下时删除任务1。 使用动态创建任务时&#xff0c;需要动态的堆中申请任务所需的内存空间&…

Eagle for Mac v1.9.13注册版:强大的图片管理工具

Eagle for Mac是一款专为Mac用户设计的图片管理工具&#xff0c;旨在帮助用户更高效、有序地管理和查找图片资源。 Eagle for Mac v1.9.13注册版下载 Eagle支持多种图片格式&#xff0c;包括JPG、PNG、GIF、SVG、PSD、AI等&#xff0c;无论是矢量图还是位图&#xff0c;都能以清…

软考 系统架构设计师系列知识点之大数据设计理论与实践(11)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之大数据设计理论与实践&#xff08;10&#xff09; 所属章节&#xff1a; 第19章. 大数据架构设计理论与实践 第3节 Lambda架构 19.3.6 Lambda与其它架构模式对比 Lambda架构的诞生离不开很多现有设计思想和架构的铺垫…

ctfhub-ssrf(2)

1.URL Bypass 题目提示:请求的URL中必须包含http://notfound.ctfhub.com&#xff0c;来尝试利用URL的一些特殊地方绕过这个限制吧 打开环境发现URL中必须包含http://notfound.ctfhub.com&#xff0c;先按照之前的经验查看127.0.0.1/flag.php,发现没什么反应&#xff0c;按照题…

excel表格如何筛选重复的内容并单独显示

在处理Excel数据时&#xff0c;遇到大量数据时需要筛选数据中的重复值并单独显示出来&#xff0c;那么此时该如何处理呢&#xff1f;事实上在Excel表格中筛选出重复的内容并单独显示的方法有很多种&#xff0c;以下是其中常用的3种&#xff1a; 方法一&#xff1a;使用条件格式…

每日OJ题_多源BFS①_力扣542. 01 矩阵(多源BFS解决最短路原理)

目录 多源BFS解决最短路算法原理 力扣542. 01 矩阵 解析代码 多源BFS解决最短路算法原理 什么是单源最短路 / 多源最短路&#xff1f; 之前的BFS解决最短路都是解决的单源最短路。 画图来说&#xff0c;单源最短路问题即为&#xff1a; 而对于多源最短路问题: 如何解决此…