Ignore:
Timestamp:
Jul 14, 2017, 11:51:04 AM (2 years ago)
Author:
Juanma
Message:

WIP

File:
1 moved

Legend:

Unmodified
Added
Removed
  • zero-lliurex-transparent-proxy/trunk/fuentes/install-files/usr/sbin/transparent-proxy-manager.py

    r5525 r5526  
    1212
    1313class mainWindow(Gtk.Window):
    14         def __init__(self):
    15                 self.service="squid-ssl"
    16                 Gtk.Window.__init__(self,title="Transparent Proxy Manager")
    17                 self.box = Gtk.Grid()
    18                 self.box.set_column_spacing(20)
    19                 self.box.set_row_spacing(20)
    20                 self.add(self.box)
    21                 self.box.add(Gtk.Label(_("Enable Transparent Proxy")))
    22                 self.sw_Enable=Gtk.Switch()
    23                 self.sw_Enable.connect("state-set",self._on_sw_state)
    24                 self.box.attach(self.sw_Enable,1,0,2,1)
     14    def __init__(self):
     15        self.service="squid-ssl"
     16        Gtk.Window.__init__(self,title="Transparent Proxy Manager")
     17        self.box = Gtk.Grid()
     18        self.box.set_column_spacing(20)
     19        self.box.set_row_spacing(20)
     20        self.add(self.box)
     21        self.box.add(Gtk.Label(_("Enable Transparent Proxy")))
     22        self.sw_Enable=Gtk.Switch()
     23        self.sw_Enable.connect("state-set",self._on_sw_state)
     24        self.box.attach(self.sw_Enable,1,0,2,1)
     25        self.sw_Enable.set_state(self._is_service_running(self.service))
     26        if self.sw_Enable.get_state():
     27            service_label="Service up and running"
     28        else:
     29            service_label="Service deactivated"
     30        self.lbl_State=Gtk.Label(_(service_label))
     31        self.box.attach(self.lbl_State,0,1, 1,1)
     32               
     33    def _on_sw_state(self,widget,data):
     34        sw_state=widget.get_state()
     35        if not sw_state:
     36            self.lbl_State.set_text("Enabling transparent proxy")
     37            self._enable_proxy()
     38            self.lbl_State.set_text("Service up and running")
     39        else:
     40            self.lbl_State.set_text("Disabling transparent proxy")
     41            self._disable_proxy();
     42            self.lbl_State.set_text("Service deactivated")
    2543
    26                 st=self._is_service_running(self.service)
    27                 self.sw_Enable.set_state(self._is_service_running(self.service))
    28                 if self.sw_Enable.get_state():
    29                         service_label="Service up and running"
    30                 else:
    31                         service_label="Service deactivated"
    32 
    33                 self.lbl_State=Gtk.Label(_(service_label))
    34 #                self.box.attach_next_to(Gtk.Label(_(service_label)),self.sw_Enable,Gtk.PositionType.BOTTOM, 1, 2)
    35                 self.box.attach(self.lbl_State,0,1, 1,1)
     44    def _enable_proxy(self):
     45        if not self._is_service_running(self.service):
     46        #Copy the original squid.conf and make the needed changes
     47            try:
     48                shutil.copy ("/etc/squid/squid.conf","/etc/squid-ssl/squid.conf")
     49                f=open("/etc/squid-ssl/squid.conf","r")
     50                squidConf=f.readlines()
     51                f.close()
     52                squidConfSsl=[]
     53                net_ip=''
     54                for line in squidConf:
     55                    if line.startswith("http_port"):
     56                        if '127.0.' not in line:
     57                            net_ip=line.split(' ')[1]
     58                            net_ip=net_ip.split('.')[0:3]+'.0'
     59                            lineHttps="##Transparent https -->\nhttps_port 10.2.1.254:3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/myCA.pem key=/etc/squid/ssl_cert/myCA.pem\n#ssl_bump client-first all\nssl_bump splice all\n## <--"
     60                            line=line.rstrip("\n")+" intercept\n"
     61                            line=line+lineHttps
     62                    squidConfSsl.append(line)
     63                f=open("/etc/squid-ssl/squid.conf","w")
     64                f.writelines(squidConfSsl)
     65                f.close()
     66            except Exception as e:
     67                print(str(e))
     68       #Disable squid
     69       self._disable_squid()
     70       #Add iptables redirection
     71       with open(os.devnull, 'wb') as hide_output:
     72           iptablesCmd='iptables -t nat -A PREROUTING -s '+net_ip+'/16 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129'
     73           subprocess.Popen(iptablesCmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
     74           iptablesCmd='iptables -t nat -A PREROUTING -s '+net_ip+'/16 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128'
     75           subprocess.Popen(iptablesCmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
     76       #Enable squid-ssl
     77           cmd="update-rc.d squid-ssl defaults 30"
     78           subprocess.Popen(cmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
     79           cmd="invoke-rc.d squid-ssl restart"
     80           subprocess.Popen(cmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
    3681               
    37         def _on_sw_state(self,widget,data):
    38                 sw_state=widget.get_state()
    39                 if not sw_state:
    40                         self.lbl_State.set_text("Enabling transparent proxy")
    41                         self._enable_proxy()
    42                         self.lbl_State.set_text("Service up and running")
    43                 else:
    44                         self.lbl_State.set_text("Disabling transparent proxy")
    45                         self._disable_proxy();
    46                         self.lbl_State.set_text("Service deactivated")
    47 
    48         def _enable_proxy(self):
    49                 if not self._is_service_running(self.service):
    50                         #Copy the original squid.conf and make the needed changes
    51                         try:
    52                                 shutil.copy ("/etc/squid/squid.conf","/etc/squid-ssl/squid.conf")
    53                                 f=open("/etc/squid-ssl/squid.conf","r")
    54                                 squidConf=f.readlines()
    55                                 f.close()
    56                                 squidConfSsl=[]
    57                                 for line in squidConf:
    58                                     if line.startswith("proxy"):
    59                                         if '127.0.' not in line:
    60                                             lineHttps=line
    61                                             line=line.rstrip("\n")+" intercepted\n"
    62                                             line=line+lineHttps
    63                                     squidConfSsl.append(line)
    64                                 f=open("/etc/squid-ssl/squid.conf","w")
    65                                 f.writelines(squidConfSsl)
    66                                 f.close()
    67                         except Exception as e:
    68                                 print(str(e))
    69                         #Add iptables redirection
    70                         with open(os.devnull, 'wb') as hide_output:
    71                             subprocess.Popen(['iptables', '-t','nat','-F'], stdout=hide_output, stderr=hide_output).wait()
    72                
    73         def _disable_proxy(self):
    74             with open(os.devnull, 'wb') as hide_output:
    75                 if self._is_service_running(self.service):
    76                     #stop the service
    77                     try:
    78                         subprocess.Popen(['service', name, 'stop'], stdout=hide_output, stderr=hide_output).wait()
    79                     except Exception as e:
    80                         print(str(e))
    81                 #Clean the firewall
     82    def _disable_proxy(self):
     83        with open(os.devnull, 'wb') as hide_output:
     84            if self._is_service_running(self.service):
     85                #stop the service
     86                cmd='service '+self.service+' stop'
    8287                try:
    83                     subprocess.Popen(['iptables', '-t','nat','-F'], stdout=hide_output, stderr=hide_output).wait()
    84                     #Remove the service
    85                     os.remove('/etc/init.d/open-ssl')
     88                    subprocess.Popen(cmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
    8689                except Exception as e:
    8790                    print(str(e))
    88                 #Clone the postrm actions
     91            #Clean the firewall
     92            cmd='iptables -t nat -F'
     93            try:
     94                subprocess.Popen(cmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
     95            except Exception as e:
     96                print(str(e))
     97            #Remove the service
     98            cmd='update-rc.d squid-ssl remove > /dev/null'
     99            try:
     100                subprocess.Popen(cmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
     101            except Exception as e:
     102                print(str(e))
     103        #Remove the conf files
     104        if os.path.isfile('/etc/init.d/squid-ssl'):
     105            os.remove('/etc/init.d/squid-ssl')
     106        if os.path.isfile("/etc/squid-ssl/squid.conf"):
     107            os.remove('/etc/squid-ssl/squid.conf')
     108        self._enable_squid()
    89109
    90         def _is_service_running(self,name):
    91                 retval=False
    92                 try:
    93                     with open(os.devnull, 'wb') as hide_output:
    94                         status = subprocess.Popen(['service', name, 'status'], stdout=hide_output, stderr=hide_output).wait()
    95                     if status==0:
    96                             retval=True
    97                 except Exception as e:
    98                     print(str(e))
    99                 return retval
     110    def _disable_squid(self):
     111        with open(os.devnull, 'wb') as hide_output:
     112            cmd='service squid stop'
     113            subprocess.Popen(cmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
     114            cmd='update-rc.d squid remove'
     115            subprocess.Popen(cmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
     116
     117    def _enable_squid(self):
     118        with open(os.devnull, 'wb') as hide_output:
     119            cmd="update-rc.d squid defaults 30"
     120            subprocess.Popen(cmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
     121            cmd="invoke-rc.d squid restart"
     122            subprocess.Popen(cmd.split(' '), stdout=hide_output, stderr=hide_output).wait()
     123
     124    def _is_service_running(self,name):
     125        retval=False
     126        try:
     127            with open(os.devnull, 'wb') as hide_output:
     128                status = subprocess.Popen(['service', name, 'status'], stdout=hide_output, stderr=hide_output).wait()
     129            if status==0:
     130                retval=True
     131        except Exception as e:
     132            print(str(e))
     133        return retval
    100134
    101135win = mainWindow()
Note: See TracChangeset for help on using the changeset viewer.