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。
来源:oschina
链接:https://my.oschina.net/u/2351109/blog/668862