iptables命令
构建防火墙的步骤
- 清除所有规则
为了避免新建的防火墙与系统中已经运行的防火墙相互干扰,一般应该先清除所有规则。 - 设置防火墙策略
设置当数据包没有匹配到链中的规则时应该如何对待(是拒绝还是放行)。 - 设置防火墙规则
设置数据包的匹配规则以及匹配后的处理动作(指
定目标)。
防火墙策略的设置方法
没有明确允许的都被拒绝
方法1:
- 首先配置策略禁止所有的包
- 然后再根据需要的服务设置规则允许特定的包通过
- 最安全,但不太方便
方法2:
- 首先配置策略允许所有的包
- 然后再根据需要的服务设置规则允许特定的包通过
- 最后在链中添加一-条可捕捉一切的拒绝规则
- 当捕捉一切的拒绝规则被误删除将导致门户的全面开放
iptables服务
#安装iptables服务
yum -y install iptables-services
yum -y install system-config-firewall-{base,tui}
#屏蔽firewalld服务并开启iptables服务
systemctl stop firewalld
systemctl mask firewalld
systemctl start iptables
systemctl enable iptables
iptables命令语法规则
格式:
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
COMMAND :
-A 追加规则
-D 删除规则
-R 修改规则
-I 插入规则
-L 查看规则
-N 新的规则
CRETIRIA :
-p 协议
-s源地址
-d目的地址
-sport源端口
-dport目的端口
-i指定入口网卡
-o指定出口网卡
ACTION:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT:基于原地址的转换
DNAT:目标地址转换
source:指定原地址
MASQUERADE:动态伪装
示例
列出防火墙所有规则
[root@google ~]# iptables -L -nv
# 列出所有规则,并显示行号
[root@google ~]# iptables -L -nv --line-num
清楚防火墙规则(下列两条同样的效果)
[root@google ~]# iptables -F
[root@google ~]# iptables --flush
拒绝其他所有主机访问
# 此条应为防火墙策略的最后一条规则
[root@google ~]# iptables -A INPUT -j DROP
允许某个ip访问
[root@google ~]# iptables -I INPUT -p tcp -s 192.168.139.1 -j ACCEPT
日志记录
[root@google ~]# iptables -A INPUT -m state --state INVALID -j LOG
# 同时要将无效访问拒绝,避免资源浪费
[root@google ~]# iptables -A INPUT -m state --state INVALID -j DROP
自定义链
[root@google ~]# iptables -N LAN
[root@google ~]# iptables -A INPUT -j LAN
[root@google ~]# iptables -A LAN -j ACCEPT
大致流程如下
设置访问端口
# 允许访问22 ssh服务端口
[root@google ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 一次性同时添加80,443端口
[root@google ~]# iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
#处理IP碎片数量,防止攻击,允许每秒100个
[root@google ~]# iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包
[root@google ~]# iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
设置地址伪装,内网可以访问外网
[root@google ~]# iptables -t nat -A POSTROUTING -s 192.168.139.128 -j MASQUERADE
允许内网访问外网某台机器
[root@google ~]# iptables -t nat -A POSTROUTING -s 192.168.139.128 -j SNAT --to-source 192.168.91.128
实现端口转发
[root@google ~]# iptables -t nat -A PREROUTING -s 192.168.91.141 -p tcp --dport 80 -j DNAT --to 192.168.129.129:80