Linux系统安全04使用iptables阻止访问特定网站

主要使用iptables的string扩展模块,使用string参数阻止访问特定网站的http/https服务,使用hex-string参数阻止对特定域名进行DNS解析。

比如,阻止访问baidu.com的http/https服务。其中--string参数指定需要屏蔽的网站地址中包含的字符串关键字, --algo指定字符串匹配算法,支持bm和kmp两种算法。

#disable some http/https request
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m string --string "baidu.com" --algo bm -j DROP
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m string --string "baidu.com" --algo bm -j DROP
iptables -A FORWARD -p tcp -m multiport --dports 80,443 -m string --string "baidu.com" --algo bm -j DROP

阻止对包含baidu.com的域名进行解析的代码如下。其中--hex-string参数中的05和03表示字符串的长度。

#disable some dns query.
iptables -A OUTPUT -p tcp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A INPUT -p tcp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A FORWARD -p tcp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A OUTPUT -p udp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A INPUT -p udp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A FORWARD -p udp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP

完整代码如下:

iptables -F
iptables -X
iptables -Z

iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z

iptables -t raw -F
iptables -t raw -X
iptables -t raw -Z

iptables -t security -F
iptables -t security -X
iptables -t security -Z

if [ "$1" = "stop" ]
then
echo "WARNING:iptables stopped."
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT

iptables -t raw -P PREROUTING ACCEPT
iptables -t raw -P OUTPUT ACCEPT

iptables -t security -P INPUT ACCEPT
iptables -t security -P OUTPUT ACCEPT
iptables -t security -P FORWARD ACCEPT

iptables -L -n -v --line-numbers
exit
fi

iptables -P INPUT    DROP
iptables -P OUTPUT   DROP
iptables -P FORWARD  DROP

iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT

iptables -t raw -P PREROUTING ACCEPT
iptables -t raw -P OUTPUT ACCEPT

iptables -t security -P INPUT ACCEPT
iptables -t security -P OUTPUT ACCEPT
iptables -t security -P FORWARD ACCEPT

#localhost
iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT   -s ${IP_WAN} -d ${IP_WAN} -j ACCEPT
iptables -A OUTPUT  -s ${IP_WAN} -d ${IP_WAN} -j ACCEPT
iptables -A INPUT   -s ${IP_LAN} -d ${IP_LAN} -j ACCEPT
iptables -A OUTPUT  -s ${IP_LAN} -d ${IP_LAN} -j ACCEPT

#inside subnet.
iptables -A INPUT -s ${IP_INSIDE}  -j REJECT
iptables -A OUTPUT -d ${IP_INSIDE} -j REJECT

#disable some http/https request
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m string --string "baidu.com" --algo bm -j DROP
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m string --string "baidu.com" --algo bm -j DROP
iptables -A FORWARD -p tcp -m multiport --dports 80,443 -m string --string "baidu.com" --algo bm -j DROP

#disable some dns query.
iptables -A OUTPUT -p tcp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A INPUT -p tcp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A FORWARD -p tcp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A OUTPUT -p udp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A INPUT -p udp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP
iptables -A FORWARD -p udp -m multiport --dports 53 -m string --hex-string "|05|baidu|03|com" --algo bm -j DROP

iptables -A OUTPUT -p tcp -m multiport --dports 53 -m string --hex-string "|03|163|03|com" --algo bm -j DROP
iptables -A INPUT -p tcp -m multiport --dports 53 -m string --hex-string "|03|163|03|com" --algo bm -j DROP
iptables -A FORWARD -p tcp -m multiport --dports 53 -m string --hex-string "|03|163|03|com" --algo bm -j DROP
iptables -A OUTPUT -p udp -m multiport --dports 53 -m string --hex-string "|03|163|03|com" --algo bm -j DROP
iptables -A INPUT -p udp -m multiport --dports 53 -m string --hex-string "|03|163|03|com" --algo bm -j DROP
iptables -A FORWARD -p udp -m multiport --dports 53 -m string --hex-string "|03|163|03|com" --algo bm -j DROP

#ping xxx
iptables -A OUTPUT -o ${ETH_WAN} -p icmp -s ${THIS_SERVER} -j ACCEPT
iptables -A INPUT -i ${ETH_WAN} -p icmp -d ${THIS_SERVER}  -j ACCEPT

#dns lookup
iptables -A OUTPUT -o ${ETH_WAN} -p udp   -s ${THIS_SERVER}  -d ${DNS_SERVER} --dport ${DNS_PORT} -j ACCEPT
iptables -A INPUT -i ${ETH_WAN} -p udp   -s ${DNS_SERVER} --sport ${DNS_PORT} -d ${THIS_SERVER}  -j ACCEPT 

iptables -A OUTPUT -o ${ETH_WAN} -p tcp   -s ${THIS_SERVER}  -d ${DNS_SERVER} --dport ${DNS_PORT} -j ACCEPT
iptables -A INPUT -i ${ETH_WAN} -p tcp   -s ${DNS_SERVER} --sport ${DNS_PORT} -d ${THIS_SERVER} -m state --state RELATED,ESTABLISHED  -j ACCEPT 

#http browser
iptables -A OUTPUT -o ${ETH_WAN} -p tcp --match multiport --dports ${HTTP_PORT} -j ACCEPT
iptables -A INPUT -i ${ETH_WAN} -p tcp --match multiport --sports ${HTTP_PORT} -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT  -j LOG --log-prefix "iptables"

iptables-save > /etc/sysconfig/iptables

原文地址:https://www.cnblogs.com/coe2coe/p/9060092.html

时间: 2024-11-05 23:29:50

Linux系统安全04使用iptables阻止访问特定网站的相关文章

保证Linux系统安全之使用iptables工具管理防火墙

随着企业中使用Linux系统的增加,保证Linux系统安全成为运维人员的必备技能之一. Linux系统本身有很强大的防护措施:防火墙.那么如何管理防火墙就成为重中之重. 随着CentOS 7.CentOS 8的出现,越来越多的人喜欢使用firewalld工具来管理防火墙.因为它不仅可以通过命令行设置,也可以通过图形化设置.关于使用firewalld工具管理Linux防火墙,可参考保证Linux系统安全之使用firewalld工具管理防火墙 下面我们主要介绍iptables工具管理防火墙. 本人第

解决Linux系统没有/etc/sysconfig/iptables文件

Linux系统中,防火墙默认是不开启的,一般也没有配置过任何防火墙的策略,所以不存在/etc/sysconfig/iptables文件. 一.常规解决方法: 1.在控制台使用iptables命令随便写一条防火墙规则 iptables -A OUTPUT -j ACCEPT 2.使用 service iptables save 进行保存,默认就保存到了/etc/sysconfig目录下的iptables文件中. 但是,这个方法已经在一些版本的Linux下无法使用,比如Ubuntu,Debian.

linux系统centOS6.5使用goaccess工具分析nginx网站日志

网站的log日志分析是每个站长经常做的必备工作,通过网站日志文件我们可以分析各大搜索引擎对网站的爬取情况.最近我的网站做了一些调整,所以想看下日志文件,但因为网站服务器环境是LNMP,所以我就找了一款nginx日志文件分析工具--goaccess.本文我们将一起分享如何在linux(centos)中安装goaccess来分析网站日志. 准备工作: 系统:CentOS6.5(我在本地搭建的虚拟机) web服务:nginx 日志文件:access.log文件(从自己的环境中拷贝具体日志文件) 工具:

Forefront TMG 2010 篇(九)--禁止用户访问特定网站

上文已经提过可以允许用户直接访问外网了,但是公司有特定的要求,不允许某些用户访问某些网站,如:淘宝.QQ.奇艺等.所以我们又要进行相关的设置. 计划: A.建立二个用户组: 无限制用户>>>>公司因为要控制,允许一部分人联网,所以没有办法使用默认的所有者 受限制用户>>>>在允许上网的基础上,进行限制. B.建立 URL 集. 方便把不允许访问的网站集合起来. C.使用 web 访问策略. 创建一条WEB访问策略,就可以把隐藏起来的系统策略调出来,再进行编辑

linux系统ubuntu19.04使用nc命令开放(iptables以及ufw命令无效情况下)

开放端口命令:nc -lp 端口号  & (如开放80端口:nc -lp 80 & 即可) 使用此命令开放的端口在使用时会报端口已经被占用,是因为该命令打开的端口都有相应的监听程序,解决方法如下: 使用命令lsof -i:端口号(如:lsof -i:80)查看占用端口的pid 然后直接kill -9 pid杀死对应的线程即可正常使用开放的端口. 我在多次使用iptables命令和ufw命令无果后使用了该方法. 亲测有效!!!!!!!! 原文地址:https://www.cnblogs.co

[原创]在Linux系统Ubuntu14.04上安装部署docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用.所以需要确保Ubuntu的版本是64位. apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统.

VMware10中的Linux系统利用NAT网络连接方式访问外网配置

一.描述 在VMware10中 提供常见的三种网络连接方式 : 1.Bridge:这种方式最简单,直接将虚拟网卡桥接到一个物理网卡上面,与linux下一个网卡绑定两个不同地址类似,实际上是将网卡设置为混杂模式,从而达到侦听多个IP的能力. 在此种模式下,虚拟机内部的网卡(例如linux下的eth0)直接连到了我们真实物理网卡所在的网络上,相当于虚拟机和真实主机处于对等的地位,在网络关系上是平等的,没有谁在谁后面的问题.使用这种方式很简单,前提是你有1个以上的IP地址,这个不太适合使用. 2.na

Linux -- 系统安全之Iptables防火墙(2)

一.iptables防水墙的实现方式及iptables命令的格式 iptables防火墙介绍 netfilter/iptables是Linux系统提供的一个非常优秀的防火墙工具,它完全免费.功能强大.使用灵活.占用系统资源少,可以对经过的数据进行非常细致的控制.本节首先介绍有关iptables防火墙的基本知识,包括netfilter框架.iptables防火墙结构与原理.iptables命令格式等内容. netfilter框架 Linux内核包含了一个强大的网络子系统,名为netfilter,它

外网访问ARM嵌入式Linux系统

外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动ARM嵌入式Linux系统 ARM嵌入式Linux系统默认的sshd端口是22. 2. 实现步骤 2.1 下载并解压holer软件包 Holer软件包:holer-linux-arm.tar.gz Holer支持多种ARM版本,请选择跟自己ARM版本匹配的holer程序上传至系统上. 2.2 获