Linux

痴心易碎 提交于 2020-03-07 17:46:01

Linux网络安全-防火墙 >防火墙 >


1. iptables 四表五链

2. iptables 语法详解

3. 替换规则

4. 场景练习

5. 其他


1. iptables 四表五链

raw表        确定是否对该表进行状态跟踪
mangle表     为数据包设置标记, 修改数据包,改变包头中内容(TTL, TOS, MARK)
nat表        修改数据包中的源,目标ip地址或端口。 地址转发。
filter表     确定是否放行数据包(过滤). 访问控制。 规则匹配。

INPUT    
OUTPUT
FORWARD
POSTROUTING
PREROUTING


2. iptables 语法详解

iptables 【-t 表名]】管理选项 【链名】【条件匹配】 【-j 目标动作或跳转】

iptables 规则组成:

数据包访问控制: ACCEPT, DROP, REJECT

数据包改写:SNAT, DNAT

信息记录: LOG


iptables -t 表  动作  链名  匹配条件  目标动作(跳转)

所有源,目标禁用 ping:

iptables -t filter -A INPUT -p icmp -j DROP

删除刚刚的规则:

iptables -t filter -D INPUT -p icmp -j DROP   # 删除单条(笨方法)

sudo iptables -L -n --line-numbers    # 显示行号

iptables -D INPUT 1      # 根据行号删除

iptables -F    # 删除所有


替换规则

sudo iptables -R INPUT 1 -p icmp -s 192.168.0.116 -j DROP

-R, replace, 替换原有规则

1, line-numbers 使用行号

-s, source, 指定源地址


场景练习

查看机器当前网络状况      netstat -luntp

iptables -L 显示当前的所有规则

iptables -L -n     ->>  -n  是让主机名等不显示出来

iptables -F         ->>  -F  表示清除之前设置的规则


1.  允许别人使用 tcp 协议 访问我机器的 80 端口

iptables -I INPUT  -p tcp --dport  80  -j ACCEPT                   允许访问 80 端口
iptables -I INPUT  -p tcp --dport  22  -j ACCEPT                   允许访问 22 端口
iptables -I INPUT  -p tcp --dport  10:21  -j ACCEPT              允许访问 10-21 端口段
iptables -I INPUT  -p icmp -j ACCEPT                                    允许所有 icmp 报文 访问
iptables -A INPUT -j REJECT                                                在 INPUT 最后加入一条规划, 所有未被允许的规则都拒绝


查看某台机器的某个端口是不是通的:  telnet 10.10.188.232 22

此时, 因为上面加了一条不允许其他所有访问。导致现在 telnet 本机都不可以了。解决方法是 允许 本机 本地回环, lo 网卡设备 被外部访问。

iptables -I INPUT -i lo -j ACCEPT                 ->>  -i lo  指定 设备

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT      ->>  允许主机访问外部。 这里没有懂讲课老师想表达的

在之前配置的基础上, 修改, 只允许 10.103.188.233 访问本机的 httpd 服务。

iptables -I INPUT -p tcp -s 10.103.188.233 --dport 80 -j ACCEPT


常见允许外网访问的服务:

http     80/tcp
https    443/tcp
smtp    25/tcp
smtps    465/tcp
pop3    110/tcp
pop3s    995/tcp
imap    143/tcp


常见不允许外网访问的服务:

文件服务器:
    nfs    123/udp    网络文件服务
    samba    137,138,139/tcp    445/tcp
    ftp    20/tcp    21/tcp
远程管理:
    ssh    22/tcp
数据库:
    mysql    3306/tcp
    oracle    1521/tcp
    mongodb    27017/tcp


场景2: 公司网络服务访问配置

配置规则基本思路:

ACCEPT规则:
    1. 允许本地访问
    2. 允许已监听状态数据包通过
    3. 允许规则中允许的数据包通过, 注意开放 ssh 远程管理端口
DENY 规则:
    1. 拒绝未被允许的数据包
iptables 规则保存成配置文件。

配置开始:

1. 清除所有配置

iptables -F

2. 允许本地回环访问

iptables -I INPUT -i lo -j ACCEPT

3. 放行已建立连接状态的数据包

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

4. 开始配置允许公司内部访问

iptables -A INPUT -s 10.10.155.0/24 -j ACCEPT          允许 155 网段的机器访问所有服务

iptables -A INPUT -s 10.10.188.0/24 -j ACCEPT          允许 188 网段的机器访问所有服务

5. 配置公司外部可以访问的服务

iptables -A INPUT -p tcp --dport 80 -j ACCEPT             允许外部访问80端口的服务  一般是 web 服务

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT         允许外部访问1723端口的服务 vpn 常用的端口

iptables -I INPUT -p icmp -j ACCEPT                           如果企业安全性要求不是特高,允许 icmp 包

6. 允许的配置完了,现在拒绝其他没有经过允许的

iptables -A INPUT -j REJECT

7. 保存当前配置到配置文件

/etc/init.d/iptables save

$ Saving firewall rules to  /etc/sysconfig/iptables:[OK]

vim /etc/sysconfig/iptables

另外一种保存命令的方式,写一个脚本文件 iptables_sh.sh . 里面是一行一条的命令。使用 /bin/sh iptables_sh.sh 来运行。

将这个脚本设置为开机启动:

将命令 /bin/sh iptables_sh.sh 追加到 文件 /etc/rc.local 文件中即可。

# TODO 测试开机启动命令, 如 touch /home/tiger.py


iptables 防火墙 nat 表规则配置:

分类    功能              作用链
snat    源地址转换    出口 postrouting
dnat    目标地址转换    进口 postrouting


5. 其他

iptables 防止 cc 攻击:

1. connlimit 模块

作用:用于限制每一个客户端ip的并发连接数

参数: --connlimit-above n # 限制并发连接数

用法举例:

iptables -I INPUT -p TCP --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT         单个 ip 最大连接数 100

iptables -I INPUT -p TCP --dport 80 -s 10.10.163.232 -m connlimit --connlimit-above 10 -j REJECT   ip 10.10.163.232 访问端口80的最大连接数为 10


2. limit 模块

作用: 限速, 控制流量

用法举例:

iptables -A INPUT -m limit --limit 3/hour        # 一个小时内允许3个连接过来

--limit-burst 默认值为5

iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT        # 满足规则的放行    默认放行10个数据包,后每一分钟放行一个数据包。默认过后开始流量控制

iptables -A INPUT -p icmp -j DROP     # 关掉默认的 icmp。


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!