Linux - iptables

iptables 规则

其实iptables 其实有四个表  filter、 nat、 mangle、 raw (处理异常的表)

一般都认为是 内建三个表:nat mangle 和 filter  

filter  规则参数 

filter预设规则表,有INPUT、FORWARD 和 OUTPUT 三个规则链
vi
/etc/sysconfig/iptables   # 配置文件参数 INPUT   # 进入 FORWARD   # 转发 OUTPUT   # 出去 ACCEPT   # 将封包放行 REJECT   # 拦阻该封包 DROP   # 丢弃封包不予处理 -A   # 在所选择的链(INPUT等)末添加一条或更多规则 -D   # 删除一条 -E   # 修改 -p # tcp、udp、icmp 0相当于所有all !取反 -P   # 设置缺省策略(与所有链都不匹配强制使用此策略) -s   # IP/掩码 (IP/24) 主机名、网络名和清楚的IP地址 !取反 -j # 目标跳转,立即决定包的命运的专用内建目标 -i # 进入的(网络)接口 [名称] eth0 -o # 输出接口[名称] -m # 模块 --sport   # 源端口 --dport   # 目标端口

iptables 常用规则

iptables -F # 将防火墙中的规则条目清除掉    # 注意: iptables -P INPUT ACCEPT
iptables-restore < 规则文件      # 导入防火墙规则
/etc/init.d/iptables save     # 保存防火墙设置
/etc/init.d/iptables restart      # 重启防火墙服务
iptables -L -n         # 查看规则
iptables -t nat -nL        # 查看转发

iptables 配置示例参考  

iptables -L INPUT   # 列出某规则链中的所有规则
iptables -X allowed   # 删除某个规则链 ,不加规则链,清除所有非内建的
iptables -Z INPUT   # 将封包计数器归零
iptables -N allowed   # 定义新的规则链
iptables -P INPUT DROP   # 定义过滤政策
iptables -A INPUT -s 192.168.1.1   # 比对封包的来源IP     # ! 192.168.0.0/24 ! 反向对比
iptables -A INPUT -d 192.168.1.1   # 比对封包的目的地IP
iptables -A INPUT -i eth0   # 比对封包是从哪片网卡进入
iptables -A FORWARD -o eth0   # 比对封包要从哪片网卡送出 eth+表示所有的网卡
iptables -A INPUT -p tcp   # -p ! tcp 排除tcp以外的udp、icmp。-p all所有类型
iptables -D INPUT 8   # 从某个规则链中删除一条规则
iptables -D INPUT --dport 80 -j DROP   # 从某个规则链中删除一条规则
iptables -R INPUT 8 -s 192.168.0.1 -j DROP   # 取代现行规则
iptables -I INPUT 8 --dport 80 -j ACCEPT   # 插入一条规则
iptables -A INPUT -i eth0 -j DROP   # 其它情况不允许
iptables -A INPUT -p tcp -s IP -j DROP   # 禁止指定IP访问
iptables -A INPUT -p tcp -s IP --dport port -j DROP   # 禁止指定IP访问端口
iptables -A INPUT -s IP -p tcp --dport port -j ACCEPT   # 允许在IP访问指定端口
iptables -A INPUT -p tcp --dport 22 -j DROP   # 禁止使用某端口
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP   # 禁止icmp端口
iptables -A INPUT -i eth0 -p icmp -j DROP   # 禁止icmp端口
iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP   # 阻止所有没有经过你系统授权的TCP连接
iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT   # IP包流量限制
iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT   # 除192.168.62.1外,禁止其它人ping我的主机
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 --rttl --name WEB --rsource -j DROP   # 可防御cc攻击

iptables配置实例文件

# 
*filter
:INPUT ACCEPT [637:58967]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5091:1301533]
  # 允许的IP或IP段访问 建议多个
-A INPUT -s 127.0.0.1 -p tcp -j ACCEPT
-A INPUT -s 192.168.0.0/255.255.0.0 -p tcp -j ACCEPT
  # 开放对外开放端口
-A INPUT -p tcp --dport 80 -j ACCEPT
  # 指定某端口针对IP开放
-A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT
  # 拒绝所有协议(INPUT允许)
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP
  # 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  # 拒绝ping
-A INPUT -p tcp -m tcp -j REJECT --reject-with icmp-port-unreachable
COMMIT
# 

iptables配置实例

  # 允许某段IP访问任何端口
iptables -A INPUT -s 192.168.0.3/24 -p tcp -j ACCEPT
  # 设定预设规则 (拒绝所有的数据包,再允许需要的,如只做WEB服务器.还是推荐三个链都是DROP)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
  # 注意: 直接设置这三条会掉线
  # 开启22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  # 如果OUTPUT 设置成DROP的,要写上下面一条
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 
  # 注:不写导致无法SSH.其他的端口一样,OUTPUT设置成DROP的话,也要添加一条链
  # 如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
  # 做WEB服务器,开启80端口 ,其他同理
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  # 做邮件服务器,开启25,110端口
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
  # 允许icmp包通过,允许ping
iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话) 
iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)
  # 允许loopback!(不然会导致DNS无法正常关闭等问题) 
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)

添加网段转发

# 例如通过vpn上网
echo 1 > /proc/sys/net/ipv4/ip_forward   # 在内核里打开ip转发功能

  然后iptables 进行配置

# 添加网段转发
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE 
# 原IP网段经过哪个网卡IP出去
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.0.0.0 -o eth0 -j SNAT --to 192.168.10.158

# 查看转发
iptables -t nat -nL 

端口映射转发

# 内网通过有外网IP的机器映射端口
# 内网主机添加路由
route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.20.111 # 内网需要添加默认网关,并且网关开启转发

# 网关主机 echo
1 > /proc/sys/net/ipv4/ip_forward # 在内核里打开ip转发功能
iptables
-t nat -A PREROUTING -d 外网IP -p tcp --dport 9999 -j DNAT --to 10.10.20.55:22
# 进入

iptables
-t nat -A POSTROUTING -s 10.10.20.0/24 -j SNAT --to 外网IP
# 转发回去
iptables
-t nat -nL
# 查看转发

 

posted @ 2018-04-01 19:38  01234567  阅读(220)  评论(0编辑  收藏  举报