iptables防火墙常见用法和修改默认配置
iptables是大多数Linux的默认防火墙服务。最近折腾的时候发现服务器默认的配置有点不合理,花了点时间学习调整了一下。这里也做一下整理。
基本用法
使用以下命令可以看到现有的规则:
iptables -L
默认有三个分组(Chain,也可以叫规则链):
- INPUT:入站规则(外部连入服务器本机)
- OUTPUT:出战规则(服务器本机连接外部)
- FORWARD:转发(流经本机的数据)
INPUT组的默认策略是ACCEPT,即外部进入服务器的连接默认都是放行(黑名单模式)。但是这样可能不太安全,改为进入连接默认为拒绝,然后手动放行部分允许的连接(白名单模式)比较好。
iptables 命令的常见用法是:
# 在尾部追加新规则
iptables -A 规则链名 [-i/o 网卡名] -p 协议名 [-s 源IP/源子网] [--sport 源端口] [-d 目标IP/目标子网] [--dport 目标端口] -j 动作
# 在指定位置插入一条新规则
iptables -I 规则链名 [链中的行号] [-i/o 网卡名] -p 协议名 [-s 源IP/源子网] [--sport 源端口] [-d 目标IP/目标子网] [--dport 目标端口] -j 动作
# 删除一条规则
iptables -D 规则链名 链中的行号
# 显示所有规则和行号
iptables -nL --line-number
方括号中的参数都表示可选,最后的“动作”有两个常用值:ACCEPT
表示允许(放行),DROP
表示丢弃(拒绝)。
以下是一些示例:
# 在INPUT链中第2条规则前加入,放行外部连接目标端口为3306的TCP协议连接
iptables -I 2 INPUT -p tcp --dport 3306 -j ACCEPT
# 在INPUT链中追加一条记录,允许外部来源为192.168.3.10的连接访问本机端口10500到10509端口(端口用冒号表示一段范围)
iptables -A INPUT -s 192.168.3.10 --dport 10500:10509 -j ACCEPT
# 阻止外部来源端口号为 12345、12346 的访问(只是示例的规则,应该没有实用性)
iptables -A INPUT --sport 12345,12346 -j DROP
iptables规则的生效顺序是从上往下的,插入时请留意规则的顺序。
修改默认入站策略
了解了基本用法后就可以动手调整了。首先要添加几条放行规则:
# 添加端口(SSH端口和HTTP服务的两个端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许本地回环接口(即允许本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允许已建立和相关的连接继续访问(不加上curl等程序不能正常访问外网)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 放开DNS服务 否则ping等很多命令用不了
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
到此正常的必要服务端口就添加好了。
不过此时外部ping服务器是不通的,还要继续添加两条
# 允许ping(icmp协议)
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
上条两条命令还有等效的写法:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
最后修改INPUT组的默认规则为 DROP(不匹配规则的默认阻止)即可
iptables -P INPUT DROP
至于出站OUTPUT规则组默认的用ACCEPT规则即可,如有需要也可以自行调整。
保存规则
规则修改完后需要手动保存一下,否则iptables服务重启后修改的规则配置会丢失。
大多数配置了iptables服务的服务器已经设置好了规则保存路径,可以直接用以下命令保存:
service iptables save
如果iptables规则的保存和恢复是手动配置的,就需要用下列的命令导出和恢复了
# 导出保存规则到文件
iptables-save > 文件路径
# 从文件导入规则
iptables-restore < 文件路径
其他常见规则
这里也顺带整理了一下其他常用的规则,以供参考。
# 阻止非本地的访问(!表示"非"的意思,例如下述表示禁止外网访问 3456 端口)
iptables -A INPUT ! -s 127.0.0.1 -p tcp -m tcp --sport 3456 -j DROP
# 阻止外部ping服务器本机
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# 禁止服务器访问外网邮件协议默认端口
iptables -A OUTPUT -p tcp -m tcp --dport 25 -j DROP
iptables -A OUTPUT -p udp -m udp --dport 25 -j DROP
另外还看到一个总结得不错的文章,有兴趣可以看看:iptables用法
https://xyuxf.com/archives/2153
欢迎关注 咸鱼先锋 (微信号公众号:xyuxf),获取干货推送
THE END
二维码
文章目录
关闭
共有 0 条评论