firewall-cmd

1、基本使用

  1. 查看版本: firewall-cmd --version
  2. 查看帮助: firewall-cmd --help
  3. 显示状态: firewall-cmd --state
  4. 更新防火墙规则: firewall-cmd --reload
  5. 查看区域信息: firewall-cmd --get-active-zones
  6. 查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
  7. 拒绝所有包:firewall-cmd --panic-on
  8. 取消拒绝状态: firewall-cmd --panic-off
  9. 查看是否拒绝: firewall-cmd --query-panic
  10. 参数解释
  11. add-service #添加的服务
  12. zone #作用域
  13. add-port=80/tcp #添加端口,格式为:端口/通讯协议
  14. permanent #永久生效,没有此参数重启后失效

2、对网络端口操作

  1. 添加
  2. firewall-cmd --zone=public(作用域) --add-port=80/tcp(端口和访问类型) --permanent(永久生效)
  3. firewall-cmd --zone=public --add-port=80/tcp --permanent
  4. firewall-cmd --zone=public --query-port=80/tcp #查看
  5. firewall-cmd --zone=public --remove-port=80/tcp --permanent # 删除
  6. firewall-cmd --zone=public --list-ports #查看所有打开的端口

3、对服务操作

  1. firewall-cmd --list-services
  2. firewall-cmd --get-services
  3. firewall-cmd --add-service=<service>
  4. firewall-cmd --zone=public --add-service=http --permanent
  5. firewall-cmd --delete-service=<service>

在每次修改端口和服务后/etc/firewalld/zones/public.xml文件就会被修改,所以也可以在文件中之间修改,然后重新加载 使用命令实际也是在修改文件,需要重新加载才能生效。

4、详细使用

  1. #修改/etc/firewalld/zones/public.xml下规则文件和直接用命令配置效果一样
  2. firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept' //设置某个ip访问某个服务
  3. firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept' //删除配置
  4. firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept' //设置某个ip访问某个端口
  5. firewall-cmd --permanent --remove-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept' //删除配置
  6. firewall-cmd --query-masquerade # 检查是否允许伪装IP
  7. firewall-cmd --add-masquerade # 允许防火墙伪装IP
  8. firewall-cmd --remove-masquerade # 禁止防火墙伪装IP
  9. firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至8080
  10. firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1
  11. firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口

curl

  1. $ curl -X GET -H "Accept:application/json" http://192.100.3.28:8000/instances/947140e87046/actuator/health
  2. -H设置请求头
  3. -X:指定请求方式
  4. curl -X POST -H "Content-Type:application/json" -d '{}' 127.0.0.1:8088/user/getAllUserInfo

ip

  1. #1、添加路由
  2. ip route add to 192.100.3.0/24 dev ens33 via 192.100.5.254

ifconfig

  1. ifconfig 查看网卡信息

iptables

链接
四表五链概念

  • filter表——过滤数据包
  • Nat表——用于网络地址转换(IP、端口)
  • Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
  • Raw表——决定数据包是否被状态跟踪机制处理
  • INPUT链——进来的数据包应用此规则链中的策略
  • OUTPUT链——外出的数据包应用此规则链中的策略
  • FORWARD链——转发数据包时应用此规则链中的策略
  • PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
  • POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理

  • ``` iptables -t nat -A POSTROUTING -s 192.168.25.0/24 -j SNAT —to-source 192.168.189.131 #将来自192.168.25.0/24网段的数据包的源地址替换为192.168.189.131 iptables -t nat -vnL #查看net规则 iptables -t nat -F #清空规则 iptables -t nat -vnL POSTROUTING —line-numbers #查看POSTROUTING链的规则 iptables -t nat -D POSTROUTING 1 #删除POSTROUTING链的第一条规则 -t :指定表 -A :添加到指定chain -D :从指定chain删除匹配的规则 -L: List the rules in a chain or all chains -j : target for rule -n: 以数字的格式显示ip 和端口
    —line-numbers:显示行号 -v:详细模式 -o :指定可以说访问的网卡

    让openstack 虚拟机上网的规则

    iptables -t nat -A POSTROUTING -s 172.28.101.111/255.255.255.0 -o ens33 -j MASQUERADE iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -o docker0 -j MASQUERADE iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
    SNAT是source networkaddress translation的缩写,即源地址目标转换。 NAT是destination networkaddress translation的缩写,即目标网络地址转换 MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。 target的特殊值: ACCEPT – 允许防火墙接收数据包 DROP – 防火墙丢弃包 QUEUE – 防火墙将数据包移交到用户空间 RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。

iptables 命令介绍 : https://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html

  1. <a name="Ijrfm"></a>
  2. # ncat/nc

https://www.cnblogs.com/ECJTUACM-873284962/p/9712882.html

监听端口

nc -l 8080

连接端口

nc 192.100.3.100 8080

监听/连接 UDP 端口

nc -l -u 1234 ncat -v -u 192.168.105.150 1234

将 nc 作为聊天工具

ncat -l 8080 ncat 192.168.1.100 8080

将 nc 作为代理

ncat -l 8080 | ncat 192.168.1.200 80

所有发往我们服务器 8080 端口的连接都会自动转发到 192.168.1.200 上的 80 端口。 不过由于我们使用了管道,数据只能被单向传输。 要同时能够接受返回的数据,我们需要创建一个双向管道。 使用下面命令可以做到这点

mkfifo 2way ncat -l 8080 0<2way | ncat 192.168.1.200 80 1>2way

使用 nc 拷贝文件

ncat -l 8080 > file.txt 现在去要被拷贝数据的机器上运行下面命令: ncat 192.168.1.100 8080 —send-only < data.txt 这里,data.txt 是要发送的文件。 -–send-only 选项会在文件拷贝完后立即关闭连接。 如果不加该选项, 我们需要手工按下 ctrl+c 来关闭连接。 我们也可以用这种方法拷贝整个磁盘分区,不过请一定要小心

通过 nc 创建后门

nc 命令还可以用来在系统中创建后门,并且这种技术也确实被黑客大量使用。 为了保护我们的系统,我们需要知道它是怎么做的。 创建后门的命令为: ncat -l 10000 -e /bin/bash -e 标志将一个 bash 与端口 10000 相连。现在客户端只要连接到服务器上的 10000 端口就能通过 bash 获取我们系统的完整访问权限: ncat 192.168.1.100 10000

  1. <a name="cZ0cj"></a>
  2. # netstat

netstat -nltp #查看当前的进程连接网络的信息 netstat -antup|grep 2766 #查询pid对应的端口号 -r:显示路由表信息 -l:显示监听socket -a:显出所有的socket -p:显示socket的 PID/Program -t:显示tcp协议的socket -u:显示udp协议的socket

  1. <a name="qBjCB"></a>
  2. # route

永久路由

https://www.cnblogs.com/t-bar/p/11170120.html https://www.cnblogs.com/zhangyy3/p/12079150.html route add -net 192.168.0.0/16 gw 192.100.5.254 #添加路由 add/del:添加或删除路由;删除时可以不加网关:route del -net 192.168.0.0/16 -host/-net:表示路由目标是主机还是网段; netmask:表示路由目标为网段时才会使用到,表示路由目标网段的子网掩码; gw:命令关键字,后面跟下一跳网关; dev:命令关键字,后面跟具体设备名,表示路由是从该设备出去。 route -n # -n 参数就是在输出的信息中不打印主机名而直接打印ip地址。

#

Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.189.2 0.0.0.0 UG 100 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.100.10.0 0.0.0.0 255.255.255.0 U 0 0 0 br-0c45240b6397 192.168.81.0 0.0.0.0 255.255.255.0 U 100 0 0 eth1 192.168.189.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 后四条是自动生成的,因为是直连的网段,不需要走三层,直接走二层协议,在每块网卡上每配置一个IP就会生成一条记录(一个网卡上可以配置多个IP)。 表示去往这四个网段的数据包,直接由网卡接口docker0及brbr-0c45240b6397、eth1、eth0发送出去 这两条记录中的gateway并没有意义,Flags那一列中有G时才会使用Gateway。这两条路由并没有这样的标志, 由于它们是本地的,匹配这些条目的数据包会直接通过Iface列中的网卡发送出去。 例如: 192.168.0.0 10.77.238.254 255.255.0.0 UG 0 0 0 eth0 表示去往192.168.0.0网段的数据包由网关10.77.238.254通过网卡eth0来转发 0.0.0.0 169.254.0.0 0.0.0.0 UG 0 0 0 eth1 表示去往所有目标地址数据包由网关169.254.0.0 通过网卡eth1来转发

路由匹配是先匹配掩码(mask)最长的 如果mask一样 就根据Metric值匹配的顺序。

#

route 命令输出的路由表字段含义如下: Destination 目标 The destination network or destination host. 目标网络或目标主机。 Gateway 网关 The gateway address or ‘*’ if none set. 网关地址,如果没有就显示星号。 Genmask 网络掩码 The netmask for the destination net; ‘255.255.255.255’ for a host destination and ‘0.0.0.0’ for the default route. Flags:总共有多个旗标,代表的意义如下:
U (route is up):该路由是启动的;
H (target is a host):目标是一部主机 (IP) 而非网域;
G (use gateway):需要透过外部的主机 (gateway) 来转递封包;
R (reinstate route for dynamic routing):使用动态路由时,恢复路由资讯的旗标;
D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由
M (modified from routing daemon or redirect):路由已经被修改了;
! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!) A (installed by addrconf) C (cache entry) Metric 距离、跳数。暂无用。 The ‘distance’ to the target (usually counted in hops). It is not used by recent kernels, but may be needed by routing dae- mons. Ref 不用管,恒为0。 Number of references to this route. (Not used in the Linux ker-nel.) Use 该路由被使用的次数,可以粗略估计通向指定网络地址的网络流量。 Count of lookups for the route. Depending on the use of -F and -C this will be either route cache misses (-F) or hits (-C). Iface 接口,即eth0,eth0等网络接口名 Interface to which packets for this route will be sent.

  1. <a name="xew6e"></a>
  2. # tcpdump

tcpdump -i ens36 -nn icmp 抓包 经过网卡ens36的数据包 https://linux.cn/article-10191-1.html https://blog.csdn.net/liang_baikai/article/details/79626180 ```